From 736ca69245b89ec0af12b120a3277725f095fe9c Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 9 Jan 2020 20:09:40 +0100 Subject: [PATCH 01/97] warning fixen and better circle --- src/GUI/IntelliPhotoGui.cpp | 5 ++--- src/Layer/PaintingArea.cpp | 6 ++++-- src/Tool/IntelliToolCircle.cpp | 3 +-- src/Tool/IntelliToolLine.cpp | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d73a730..b3c03cc 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -78,9 +78,8 @@ void IntelliPhotoGui::slotCreateNewLayer(){ tr("Height:"), 200,1, 500, 1, &ok2); // Create New Layer - if (ok1&&ok2) - { - int layer = paintingArea->addLayer(width,height,0,0); + if (ok1&&ok2){ + paintingArea->addLayer(width,height,0,0); UpdateGui(); } } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index a2df96d..779c2bb 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -265,8 +265,9 @@ std::vector PaintingArea::getPolygonDataOfRealLayer(){ // left button and if so store the current position // Set that we are currently drawing void PaintingArea::mousePressEvent(QMouseEvent*event){ - if(this->activeLayer < 0) + if(this->activeLayer < 0){ return; + } if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; @@ -283,8 +284,9 @@ void PaintingArea::mousePressEvent(QMouseEvent*event){ // we call the drawline function which draws a line // from the last position to the current void PaintingArea::mouseMoveEvent(QMouseEvent*event){ - if(this->activeLayer < 0) + if(this->activeLayer < 0){ return; + } if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; diff --git a/src/Tool/IntelliToolCircle.cpp b/src/Tool/IntelliToolCircle.cpp index eba6736..cde5da6 100644 --- a/src/Tool/IntelliToolCircle.cpp +++ b/src/Tool/IntelliToolCircle.cpp @@ -13,7 +13,6 @@ IntelliToolCircle::~IntelliToolCircle(){ } void IntelliToolCircle::drawCircle(int radius){ - int outer = radius+20; QColor inner = this->colorPicker->getSecondColor(); inner.setAlpha(Toolsettings->getInnerAlpha()); int yMin, yMax, xMin, xMax; @@ -27,7 +26,7 @@ void IntelliToolCircle::drawCircle(int radius){ } //TODO implement circle drawing algorithm bresenham - radius = static_cast(radius +(Toolsettings->getLineWidth()/2.)-1.); + radius = static_cast(radius +(Toolsettings->getLineWidth()/2.)); yMin = (centerPoint.y()-radius); yMax = (centerPoint.y()+radius); for(int i=yMin; i<=yMax; i++) { diff --git a/src/Tool/IntelliToolLine.cpp b/src/Tool/IntelliToolLine.cpp index 97daa85..45194de 100644 --- a/src/Tool/IntelliToolLine.cpp +++ b/src/Tool/IntelliToolLine.cpp @@ -49,7 +49,7 @@ void IntelliToolLine::onMouseMoved(int x, int y){ QPoint p2 =lineStartingPoint.x() < next.x() ? next : lineStartingPoint; int m = static_cast(static_cast(p2.y()-p1.y())/static_cast(p2.x()-p1.x())+0.5f); int c = lineStartingPoint.y()-lineStartingPoint.x()*m; - + //TODO implement dotted algorithm break; } } From 2ae679099b05e831fe273dafd59ad43595e564b3 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 9 Jan 2020 20:18:50 +0100 Subject: [PATCH 02/97] Update PaintingArea.h --- src/Layer/PaintingArea.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 253c746..fad58dd 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -215,9 +215,9 @@ QImage* Canvas; int maxWidth; int maxHeight; - IntelliRenderSettings renderSettings; - IntelliTool* Tool; - IntelliPhotoGui* DummyGui; +IntelliRenderSettings renderSettings; +IntelliTool* Tool; +IntelliPhotoGui* DummyGui; std::vector layerBundle; int activeLayer=-1; From 7eeee52fb49a989cbfa05e84a866a7d46078866b Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 9 Jan 2020 21:07:36 +0100 Subject: [PATCH 03/97] Startingh UnitTesting --- src/UnitTest.pro | 57 ++++++++++++++++++++++++++++++++++++++++++++ src/mainUnitTest.cpp | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/UnitTest.pro create mode 100644 src/mainUnitTest.cpp diff --git a/src/UnitTest.pro b/src/UnitTest.pro new file mode 100644 index 0000000..c61749e --- /dev/null +++ b/src/UnitTest.pro @@ -0,0 +1,57 @@ +QT += testlib +QT += gui +CONFIG += qt warn_on depend_includepath testcase + +TEMPLATE = app + +SOURCES += \ + GUI/IntelliPhotoGui.cpp \ + Image/IntelliImage.cpp \ + Image/IntelliRasterImage.cpp \ + Image/IntelliShapedImage.cpp \ + IntelliHelper/IntelliColorPicker.cpp \ + IntelliHelper/IntelliRenderSettings.cpp \ + IntelliHelper/IntelliToolsettings.cpp \ + IntelliHelper/IntelliTriangulation.cpp \ + Layer/PaintingArea.cpp \ + Tool/IntelliColorPicker.cpp \ + Tool/IntelliTool.cpp \ + Tool/IntelliToolCircle.cpp \ + Tool/IntelliToolFloodFill.cpp \ + Tool/IntelliToolLine.cpp \ + Tool/IntelliToolPen.cpp \ + Tool/IntelliToolPlain.cpp \ + Tool/IntelliToolPolygon.cpp \ + Tool/IntelliToolRectangle.cpp \ + mainUnitTest.cpp + +DISTFILES += \ + icons/Wechselpfeile.png \ + icons/circle-tool.svg \ + icons/eraser-tool.svg \ + icons/flood-fill-tool.svg \ + icons/icon.png \ + icons/line-tool.svg \ + icons/pen-tool.svg \ + icons/plain-tool.svg \ + icons/polygon-tool.svg \ + icons/rectangle-tool.svg + +HEADERS += \ + GUI/IntelliPhotoGui.h \ + Image/IntelliImage.h \ + Image/IntelliRasterImage.h \ + Image/IntelliShapedImage.h \ + IntelliHelper/IntelliColorPicker.h \ + IntelliHelper/IntelliRenderSettings.h \ + IntelliHelper/IntelliToolsettings.h \ + IntelliHelper/IntelliTriangulation.h \ + Layer/PaintingArea.h \ + Tool/IntelliTool.h \ + Tool/IntelliToolCircle.h \ + Tool/IntelliToolFloodFill.h \ + Tool/IntelliToolLine.h \ + Tool/IntelliToolPen.h \ + Tool/IntelliToolPlain.h \ + Tool/IntelliToolPolygon.h \ + Tool/IntelliToolRectangle.h diff --git a/src/mainUnitTest.cpp b/src/mainUnitTest.cpp new file mode 100644 index 0000000..75fb0d6 --- /dev/null +++ b/src/mainUnitTest.cpp @@ -0,0 +1,49 @@ +#include + +// add necessary includes here + +class UnitTest : public QObject +{ + Q_OBJECT + +public: + UnitTest(); + ~UnitTest(); + +private slots: + void initTestCase(); + void cleanupTestCase(); + void test_case1(); + +}; + +UnitTest::UnitTest() +{ + +} + +UnitTest::~UnitTest() +{ + +} + +void UnitTest::initTestCase() +{ + +} + +void UnitTest::cleanupTestCase() +{ + +} + +void UnitTest::test_case1() +{ + QBENCHMARK { + QVERIFY(1 == 1); + } +} + +QTEST_APPLESS_MAIN(UnitTest) + +#include "tst_unittest.moc" From 4d4a21667b21b7f73a7233801975666969c7587f Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 9 Jan 2020 22:20:11 +0100 Subject: [PATCH 04/97] start of test writing --- src/IntelliHelper/IntelliToolsettings.h | 4 ++++ src/mainUnitTest.cpp | 28 +++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/IntelliHelper/IntelliToolsettings.h b/src/IntelliHelper/IntelliToolsettings.h index 1a63bbc..ae11dc0 100644 --- a/src/IntelliHelper/IntelliToolsettings.h +++ b/src/IntelliHelper/IntelliToolsettings.h @@ -10,14 +10,18 @@ enum class LineStyle { SOLID_LINE, DOTTED_LINE }; + IntelliToolsettings(); virtual ~IntelliToolsettings(); + int getLineWidth(); void setLineWidth(); void setLineWidth(int LineWidth); + int getInnerAlpha(); void setInnerAlpha(); void setInnerAlpha(int innerAlpha); + LineStyle getLinestyle(); private: diff --git a/src/mainUnitTest.cpp b/src/mainUnitTest.cpp index 75fb0d6..0d27b36 100644 --- a/src/mainUnitTest.cpp +++ b/src/mainUnitTest.cpp @@ -1,10 +1,32 @@ -#include - +#include // add necessary includes here + +#include "GUI/IntelliPhotoGui.h" +#include "Image/IntelliImage.h" +#include "Image/IntelliRasterImage.h" +#include "Image/IntelliShapedImage.h" +#include "IntelliHelper/IntelliColorPicker.h" +#include "IntelliHelper/IntelliRenderSettings.h" +#include "IntelliHelper/IntelliToolsettings.h" +#include "IntelliHelper/IntelliTriangulation.h" +#include "Layer/PaintingArea.h" +#include "Tool/IntelliTool.h" +#include "Tool/IntelliToolCircle.h" +#include "Tool/IntelliToolFloodFill.h" +#include "Tool/IntelliToolLine.h" +#include "Tool/IntelliToolPen.h" +#include "Tool/IntelliToolPlain.h" +#include "Tool/IntelliToolPolygon.h" +#include "Tool/IntelliToolRectangle.h" + class UnitTest : public QObject { Q_OBJECT +private: + PaintingArea* area; + IntelliPhotoGui* gui; + QImage* image; public: UnitTest(); @@ -15,6 +37,8 @@ private slots: void cleanupTestCase(); void test_case1(); + + }; UnitTest::UnitTest() From b7fa18907b87de0663e0fa81c513ea5f37b28d0c Mon Sep 17 00:00:00 2001 From: Mienek Date: Fri, 10 Jan 2020 11:15:08 +0100 Subject: [PATCH 05/97] Sequenz- und Zustandsdiagramm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2 Sequenz- und 2 Zustandsdiagramme hinzugefügt --- .../Sequenzdiagram-PenTool.uxf | 394 ++++++++++++++++++ .../Sequenzdiagram-PlainTool.uxf | 316 ++++++++++++++ .../Zustandsiagram-Layer-Color.uxf | 206 +++++++++ docs/Zustandsdiagramm/Zustandsiagram-Tool.uxf | 218 ++++++++++ 4 files changed, 1134 insertions(+) create mode 100644 docs/Sequenzdiagramme/Sequenzdiagram-PenTool.uxf create mode 100644 docs/Sequenzdiagramme/Sequenzdiagram-PlainTool.uxf create mode 100644 docs/Zustandsdiagramm/Zustandsiagram-Layer-Color.uxf create mode 100644 docs/Zustandsdiagramm/Zustandsiagram-Tool.uxf diff --git a/docs/Sequenzdiagramme/Sequenzdiagram-PenTool.uxf b/docs/Sequenzdiagramme/Sequenzdiagram-PenTool.uxf new file mode 100644 index 0000000..020ddd8 --- /dev/null +++ b/docs/Sequenzdiagramme/Sequenzdiagram-PenTool.uxf @@ -0,0 +1,394 @@ + + + 10 + + UMLGeneric + + 530 + 70 + 100 + 30 + + _:PaintingArea_ + + + + Relation + + 570 + 90 + 30 + 70 + + lt=. + 10.0;10.0;10.0;50.0 + + + UMLActor + + 340 + 60 + 60 + 110 + + + + + + UMLGeneric + + 360 + 140 + 20 + 780 + + + + + + UMLGeneric + + 570 + 140 + 20 + 780 + + + + + + Relation + + 370 + 140 + 220 + 40 + + lt=<- +MouseLeftPressed(event) + 200.0;20.0;10.0;20.0 + + + UMLGeneric + + 780 + 140 + 20 + 780 + + + + + + UMLGeneric + + 740 + 70 + 100 + 30 + + _:IntelliTool_ + + + + Relation + + 780 + 90 + 30 + 70 + + lt=. + 10.0;10.0;10.0;50.0 + + + UMLGeneric + + 950 + 70 + 100 + 30 + + _:IntelliToolPen_ + + + + Relation + + 990 + 90 + 30 + 70 + + lt=. + 10.0;10.0;10.0;50.0 + + + UMLGeneric + + 990 + 140 + 20 + 770 + + + + + + Relation + + 370 + 430 + 220 + 40 + + lt=<- +updateInterface() + 10.0;20.0;200.0;20.0 + + + Relation + + 580 + 160 + 220 + 40 + + lt=<- +MouseLeftPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 790 + 180 + 220 + 40 + + lt=<- +MouseLeftPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 370 + 300 + 220 + 40 + + lt=<- +MouseMove(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 580 + 320 + 220 + 40 + + lt=<- +MouseMove(koordinates) + 200.0;20.0;10.0;20.0 + + + UMLFrame + + 290 + 250 + 840 + 240 + + loop +-- +until MouseLeftReleased(event) or MouseRightPressed(event) + + + + + + + + + Relation + + 790 + 340 + 220 + 40 + + lt=<- +MouseMove(koordinates) + 200.0;20.0;10.0;20.0 + + + Relation + + 580 + 400 + 430 + 40 + + lt=<- +DrwaLineToKoordinates() + 10.0;20.0;410.0;20.0 + + + UMLFrame + + 290 + 520 + 840 + 350 + + alt +-- + + + + + + + + + + +-- + + + + Relation + + 370 + 550 + 220 + 40 + + lt=<- +MouseLeftReleased(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 580 + 570 + 220 + 40 + + lt=<- +MouseLeftReleased(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 790 + 590 + 220 + 40 + + lt=<- +MouseLeftReleased(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 580 + 630 + 430 + 40 + + lt=<- +MergeSubLayer() + 10.0;20.0;410.0;20.0 + + + Relation + + 580 + 210 + 430 + 40 + + lt=<- +CreateSubLayer() + 10.0;20.0;410.0;20.0 + + + Relation + + 370 + 720 + 220 + 40 + + lt=<- +MouseRightPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 580 + 740 + 220 + 40 + + lt=<- +MouseRightPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 790 + 760 + 220 + 40 + + lt=<- +MouseRightPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 580 + 790 + 430 + 40 + + lt=<- +DeleteSubLayer() + 10.0;20.0;410.0;20.0 + + + Relation + + 370 + 660 + 220 + 40 + + lt=<- +updateInterface() + 10.0;20.0;200.0;20.0 + + + Relation + + 370 + 820 + 220 + 40 + + lt=<- +updateInterface() + 10.0;20.0;200.0;20.0 + + diff --git a/docs/Sequenzdiagramme/Sequenzdiagram-PlainTool.uxf b/docs/Sequenzdiagramme/Sequenzdiagram-PlainTool.uxf new file mode 100644 index 0000000..9f91896 --- /dev/null +++ b/docs/Sequenzdiagramme/Sequenzdiagram-PlainTool.uxf @@ -0,0 +1,316 @@ + + + 10 + + UMLGeneric + + 630 + 80 + 100 + 30 + + _:PaintingArea_ + + + + Relation + + 670 + 100 + 30 + 70 + + lt=. + 10.0;10.0;10.0;50.0 + + + UMLActor + + 440 + 70 + 60 + 110 + + + + + + UMLGeneric + + 460 + 150 + 20 + 490 + + + + + + UMLGeneric + + 670 + 150 + 20 + 490 + + + + + + Relation + + 470 + 150 + 220 + 40 + + lt=<- +MouseLeftPressed(event) + 200.0;20.0;10.0;20.0 + + + UMLGeneric + + 880 + 150 + 20 + 490 + + + + + + UMLGeneric + + 840 + 80 + 100 + 30 + + _:IntelliTool_ + + + + Relation + + 880 + 100 + 30 + 70 + + lt=. + 10.0;10.0;10.0;50.0 + + + UMLGeneric + + 1050 + 80 + 100 + 30 + + _:IntelliToolPlain_ + + + + Relation + + 1090 + 100 + 30 + 70 + + lt=. + 10.0;10.0;10.0;50.0 + + + UMLGeneric + + 1090 + 150 + 20 + 490 + + + + + + Relation + + 680 + 170 + 220 + 40 + + lt=<- +MouseLeftPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 890 + 190 + 220 + 40 + + lt=<- +MouseLeftPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 680 + 220 + 430 + 40 + + lt=<- +CreateSubLayer() + 10.0;20.0;410.0;20.0 + + + Relation + + 470 + 280 + 220 + 40 + + lt=<- +MouseLeftReleased(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 680 + 300 + 220 + 40 + + lt=<- +MouseLeftReleased(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 890 + 320 + 220 + 40 + + lt=<- +MouseLeftReleased(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 680 + 360 + 430 + 40 + + lt=<- +MergeSubLayer() + 10.0;20.0;410.0;20.0 + + + Relation + + 470 + 390 + 220 + 40 + + lt=<- +updateInterface() + 10.0;20.0;200.0;20.0 + + + UMLFrame + + 390 + 250 + 840 + 350 + + alt +-- + + + + + + + + + + +-- + + + + Relation + + 470 + 450 + 220 + 40 + + lt=<- +MouseRightPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 470 + 550 + 220 + 40 + + lt=<- +updateInterface() + 10.0;20.0;200.0;20.0 + + + Relation + + 680 + 520 + 430 + 40 + + lt=<- +DeleteSubLayer() + 10.0;20.0;410.0;20.0 + + + Relation + + 680 + 470 + 220 + 40 + + lt=<- +MouseRightPressed(event) + 200.0;20.0;10.0;20.0 + + + Relation + + 890 + 490 + 220 + 40 + + lt=<- +MouseRightPressed(event) + 200.0;20.0;10.0;20.0 + + diff --git a/docs/Zustandsdiagramm/Zustandsiagram-Layer-Color.uxf b/docs/Zustandsdiagramm/Zustandsiagram-Layer-Color.uxf new file mode 100644 index 0000000..a89bd07 --- /dev/null +++ b/docs/Zustandsdiagramm/Zustandsiagram-Layer-Color.uxf @@ -0,0 +1,206 @@ + + + 10 + + UMLSpecialState + + 480 + 200 + 20 + 20 + + type=initial + + + + UMLSpecialState + + 550 + 200 + 20 + 20 + + type=final + + + + UMLState + + 300 + 280 + 450 + 40 + + idle state + + + + Relation + + 480 + 210 + 60 + 90 + + lt=-> +start + 10.0;10.0;10.0;70.0 + + + Relation + + 550 + 210 + 50 + 90 + + lt=-> +end + 10.0;70.0;10.0;10.0 + + + Relation + + 650 + 310 + 90 + 110 + + lt=-> +new layer + 10.0;10.0;10.0;90.0 + + + UMLState + + 560 + 400 + 140 + 40 + + set width + + + + Relation + + 690 + 400 + 190 + 40 + + lt=-> +ok + 10.0;20.0;170.0;20.0 + + + UMLState + + 860 + 400 + 90 + 40 + + set height + + + + Relation + + 740 + 290 + 250 + 130 + + lt=-> +create +new layer + 170.0;110.0;170.0;10.0;10.0;10.0 + + + Relation + + 570 + 310 + 70 + 110 + + lt=-> +cancel + 10.0;90.0;10.0;10.0 + + + Relation + + 720 + 310 + 170 + 110 + + lt=-> +cancel + 150.0;90.0;10.0;90.0;10.0;10.0 + + + Relation + + 470 + 310 + 80 + 90 + + lt=-> +move +layer + 60.0;10.0;60.0;60.0;10.0;60.0;10.0;10.0 + + + Relation + + 420 + 310 + 100 + 210 + + lt=-> +new primary +color + 10.0;10.0;10.0;190.0 + + + Relation + + 330 + 310 + 120 + 210 + + lt=-> +new secondary +color + 10.0;10.0;10.0;190.0 + + + UMLState + + 320 + 500 + 140 + 40 + + color picker + + + + Relation + + 260 + 290 + 110 + 250 + + lt=-> +choose color + 60.0;230.0;10.0;230.0;10.0;10.0;40.0;10.0 + + diff --git a/docs/Zustandsdiagramm/Zustandsiagram-Tool.uxf b/docs/Zustandsdiagramm/Zustandsiagram-Tool.uxf new file mode 100644 index 0000000..3420725 --- /dev/null +++ b/docs/Zustandsdiagramm/Zustandsiagram-Tool.uxf @@ -0,0 +1,218 @@ + + + + 10 + + UMLState + + 360 + 330 + 290 + 40 + + idle state + + + + UMLSpecialState + + 480 + 220 + 20 + 20 + + type=initial + + + + UMLSpecialState + + 620 + 220 + 20 + 20 + + type=final + + + + Relation + + 480 + 230 + 60 + 120 + + lt=-> +start + 10.0;10.0;10.0;100.0 + + + Relation + + 620 + 230 + 50 + 120 + + lt=-> +end + 10.0;100.0;10.0;10.0 + + + Relation + + 620 + 360 + 80 + 130 + + lt=-> +use Tool + 10.0;10.0;10.0;110.0 + + + UMLState + + 470 + 470 + 180 + 40 + + drawing + + + + Relation + + 610 + 480 + 140 + 100 + + lt=-> +preview + + 10.0;30.0;10.0;70.0;120.0;70.0;120.0;10.0;40.0;10.0 + + + Relation + + 390 + 360 + 120 + 90 + + lt=-> +switch Tool + 10.0;10.0;10.0;70.0;100.0;70.0;100.0;10.0 + + + Relation + + 500 + 360 + 80 + 130 + + lt=-> +merch +preview + 10.0;110.0;10.0;10.0 + + + Relation + + 560 + 360 + 80 + 130 + + lt=-> +discard +changes + 10.0;110.0;10.0;10.0 + + + Relation + + 380 + 360 + 110 + 150 + + lt=-> +switch Tool + 90.0;130.0;10.0;130.0;10.0;10.0 + + + Relation + + 640 + 320 + 210 + 40 + + lt=-> +set tool width + 10.0;20.0;190.0;20.0 + + + UMLState + + 830 + 330 + 90 + 40 + + line width + + + + Relation + + 640 + 340 + 210 + 40 + + lt=-> +choose tool width + 190.0;20.0;10.0;20.0 + + + UMLState + + 140 + 330 + 90 + 40 + + inner Alpha + + + + Relation + + 220 + 320 + 160 + 40 + + lt=-> +set inner Alpha + 140.0;20.0;10.0;20.0 + + + Relation + + 220 + 340 + 160 + 40 + + lt=-> +choose Alpha value + 10.0;20.0;140.0;20.0 + + From 048fae53fb9bc698d349e026f282c0481258e53f Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Fri, 10 Jan 2020 11:16:17 +0100 Subject: [PATCH 06/97] Added Colorpalette for most of the things @AshBastian @DerAnonymos --- src/GUI/IntelliPhotoGui.cpp | 45 ++++++++++++++++++++++++------------- src/GUI/IntelliPhotoGui.h | 4 +++- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index b3c03cc..1c4e009 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -46,8 +46,10 @@ void IntelliPhotoGui::slotOpen(){ // If we have a file name load the image and place // it in the paintingArea - if (!fileName.isEmpty()) + if (!fileName.isEmpty()){ paintingArea->open(fileName); + UpdateGui(); + } } } @@ -71,9 +73,13 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int width = QInputDialog::getInt(this, tr("New Layer"), + QInputDialog Input; + Input.setPalette(Palette); + + int width = Input.getInt(this, tr("New Layer"), tr("Width:"), 200,1, 500, 1, &ok1); + int height = QInputDialog::getInt(this, tr("New Layer"), tr("Height:"), 200,1, 500, 1, &ok2); @@ -188,11 +194,11 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // "Layer to set on" is the title of the window // the next tr is the text to display - // Define the standard Value, min, max, step and ok button - int layer = QInputDialog::getInt(this, tr("Layer to set on"), - tr("Layer:"), + // Define the standard Value, min, max, step and ok button + int layer = QInputDialog::getInt(this, tr("Layer to set on"), + tr("Layer:"), 1,1,500,1, &ok1); - if (ok1) + if (ok1) { paintingArea->setLayerActive(layer-1); UpdateGui(); @@ -678,10 +684,9 @@ void IntelliPhotoGui::createGui(){ preview = preview.fromImage(tmp); } - ActiveLayerImageButton = new QPushButton(); - ActiveLayerImageButton->setFixedSize(Buttonsize); - ActiveLayerImageButton->setIcon(preview); - ActiveLayerImageButton->setIconSize(Buttonsize); + ActiveLayerImageLine = new QLabel(); + ActiveLayerImageLine->setFixedSize(Buttonsize); + ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); // set gui elements @@ -701,18 +706,23 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(SecondColorButton,12,3,1,1); mainLayout->addWidget(SwitchColorButton,13,2,1,2); mainLayout->addWidget(ActiveLayerLine,14,2,1,2); - mainLayout->addWidget(ActiveLayerImageButton,15,2,1,2); + mainLayout->addWidget(ActiveLayerImageLine,15,2,1,2); } void IntelliPhotoGui::setIntelliStyle(){ // Set the title setWindowTitle("IntelliPhoto Prototype"); - QPalette Palette; Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); + Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); + Palette.setBrush(QPalette::Window, QColor(0, 0, 0)); + Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); // Set style sheet this->setStyleSheet("background-color:rgb(64,64,64)"); - this->centralGuiWidget->setStyleSheet("color:rgb(255,255,255)"); this->menuBar()->setPalette(Palette); this->fileMenu->setPalette(Palette); this->saveAsMenu->setPalette(Palette); @@ -725,6 +735,12 @@ void IntelliPhotoGui::setIntelliStyle(){ this->toolCreationMenu->setPalette(Palette); this->toolSettingsMenu->setPalette(Palette); + this->WidthLine->setPalette(Palette); + this->EditLineWidth->setPalette(Palette); + this->innerAlphaLine->setPalette(Palette); + this->EditLineInnerAlpha->setPalette(Palette); + this->ActiveLayerLine->setPalette(Palette); + QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name()); @@ -795,8 +811,7 @@ void IntelliPhotoGui::UpdateGui(){ tmp.fill(Qt::transparent); preview = preview.fromImage(tmp); } - ActiveLayerImageButton->setIcon(preview); - ActiveLayerImageButton->setIconSize(Buttonsize); + ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index a882ef8..43aa03e 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -124,7 +124,9 @@ QPushButton* SecondColorButton; QPushButton* SwitchColorButton; QLabel* ActiveLayerLine; -QPushButton* ActiveLayerImageButton; +QLabel* ActiveLayerImageLine; + +QPalette Palette; // The menu widgets QMenu*saveAsMenu; From 74d2d30fe0febb25e8a90c0d2f6342658ca8b269 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Fri, 10 Jan 2020 12:28:55 +0100 Subject: [PATCH 07/97] Update --- src/GUI/IntelliPhotoGui.cpp | 56 +++++++++++++++++++------------ src/GUI/IntelliPhotoGui.h | 5 ++- src/Tool/IntelliTool.cpp | 3 +- src/Tool/IntelliToolRectangle.cpp | 4 +-- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 1c4e009..64fd586 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -12,11 +12,11 @@ IntelliPhotoGui::IntelliPhotoGui(){ // create Menus createMenus(); // set style of the gui - setIntelliStyle(); - // Size the app - resize(600,600); - showMaximized(); - setDefaultToolValue(); + setIntelliStyle(); + // Size the app + resize(600,600); + showMaximized(); + setDefaultToolValue(); } // User tried to close the app @@ -46,7 +46,7 @@ void IntelliPhotoGui::slotOpen(){ // If we have a file name load the image and place // it in the paintingArea - if (!fileName.isEmpty()){ + if (!fileName.isEmpty()) paintingArea->open(fileName); UpdateGui(); } @@ -194,11 +194,11 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // "Layer to set on" is the title of the window // the next tr is the text to display - // Define the standard Value, min, max, step and ok button - int layer = QInputDialog::getInt(this, tr("Layer to set on"), - tr("Layer:"), + // Define the standard Value, min, max, step and ok button + int layer = QInputDialog::getInt(this, tr("Layer to set on"), + tr("Layer:"), 1,1,500,1, &ok1); - if (ok1) + if (ok1) { paintingArea->setLayerActive(layer-1); UpdateGui(); @@ -587,9 +587,9 @@ void IntelliPhotoGui::createGui(){ preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); CircleButton = new QPushButton(); - CircleButton->setFixedSize(Buttonsize); + CircleButton->setFixedSize(Buttonsize); CircleButton->setIcon(preview); - CircleButton->setIconSize(Buttonsize); + CircleButton->setIconSize(Buttonsize); CircleButton->setCheckable(true); preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg"); @@ -636,10 +636,10 @@ void IntelliPhotoGui::createGui(){ WidthLine = new QLabel(); WidthLine->setText("Width"); - WidthLine->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + WidthLine->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineWidth = new QLineEdit(); - EditLineWidth->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + EditLineWidth->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineWidth->setText("5"); ValidatorLineWidth = new QIntValidator(); ValidatorLineWidth->setTop(99); @@ -648,10 +648,10 @@ void IntelliPhotoGui::createGui(){ innerAlphaLine = new QLabel(); innerAlphaLine->setText("Inner Alpha"); - innerAlphaLine->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + innerAlphaLine->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineInnerAlpha = new QLineEdit(); - EditLineInnerAlpha->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + EditLineInnerAlpha->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineInnerAlpha->setText("255"); ValidatorInnerAlpha = new QIntValidator(); ValidatorInnerAlpha->setTop(999); @@ -659,21 +659,21 @@ void IntelliPhotoGui::createGui(){ EditLineInnerAlpha->setValidator(ValidatorInnerAlpha); FirstColorButton = new QPushButton(); - FirstColorButton->setFixedSize(Buttonsize/2); + FirstColorButton->setFixedSize(Buttonsize); SecondColorButton = new QPushButton(); - SecondColorButton->setFixedSize(Buttonsize/2); + SecondColorButton->setFixedSize(Buttonsize); preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png"); SwitchColorButton = new QPushButton(); - SwitchColorButton->setFixedSize(Buttonsize.width(),Buttonsize.height()/2); + SwitchColorButton->setFixedSize(Buttonsize.width()*2,Buttonsize.height()); SwitchColorButton->setIcon(preview); - SwitchColorButton->setIconSize(QSize(Buttonsize.width(),Buttonsize.height()/2)); + SwitchColorButton->setIconSize(QSize(Buttonsize.width()*2,Buttonsize.height())); ActiveLayerLine = new QLabel(); QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); - ActiveLayerLine->setFixedSize(Buttonsize.width()+10,Buttonsize.height()/3); + ActiveLayerLine->setFixedSize(Buttonsize.width()*2+10,(Buttonsize.height()*2)/3); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); if(activePicture){ @@ -707,6 +707,7 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(SwitchColorButton,13,2,1,2); mainLayout->addWidget(ActiveLayerLine,14,2,1,2); mainLayout->addWidget(ActiveLayerImageLine,15,2,1,2); + mainLayout->setHorizontalSpacing(0); } void IntelliPhotoGui::setIntelliStyle(){ @@ -799,6 +800,19 @@ void IntelliPhotoGui::setDefaultToolValue(){ slotEnterPressed(); } +void IntelliPhotoGui::setToolWidth(int value){ + if(value < 1){ + value = 1; + }else if(value > 50){ + value = 50; + } + EditLineWidth->setText(QString("%1").arg(value)); +} + +int IntelliPhotoGui::getToolWidth(){ + return EditLineWidth->text().toInt(); +} + void IntelliPhotoGui::UpdateGui(){ QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 43aa03e..c9b43e8 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -34,6 +34,9 @@ IntelliPhotoGui(); void UpdateGui(); +void setToolWidth(int value); +int getToolWidth(); + protected: // Function used to close an event void closeEvent(QCloseEvent*event) override; @@ -103,7 +106,7 @@ void setDefaultToolValue(); // What we'll draw on PaintingArea* paintingArea; -const QSize Buttonsize = QSize(70,70); +const QSize Buttonsize = QSize(35,35); QPixmap preview; QPushButton* CircleButton; QPushButton* FloodFillButton; diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 2dd2272..0779a8f 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -45,7 +45,8 @@ void IntelliTool::onMouseMoved(int x, int y){ } void IntelliTool::onWheelScrolled(int value){ - //if needed for future general tasks implement in here + //if needed for future general tasks implement in here + Area->DummyGui->setToolWidth(value+Area->DummyGui->getToolWidth()); } bool IntelliTool::createToolLayer(){ diff --git a/src/Tool/IntelliToolRectangle.cpp b/src/Tool/IntelliToolRectangle.cpp index 29fa038..4fe86f7 100644 --- a/src/Tool/IntelliToolRectangle.cpp +++ b/src/Tool/IntelliToolRectangle.cpp @@ -58,6 +58,6 @@ void IntelliToolRectangle::onMouseMoved(int x, int y){ } void IntelliToolRectangle::onWheelScrolled(int value){ - IntelliTool::onWheelScrolled(value); - Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value); + IntelliTool::onWheelScrolled(value); + Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value); } From ea7316cb0bd5bbd82f299758536cea9c269e1aad Mon Sep 17 00:00:00 2001 From: AshBastian Date: Fri, 10 Jan 2020 12:39:01 +0100 Subject: [PATCH 08/97] Buttonsize Updated --- src/GUI/IntelliPhotoGui.cpp | 46 +++++++++++++++++-------------------- src/GUI/IntelliPhotoGui.h | 3 +-- src/Tool/IntelliTool.cpp | 2 +- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 64fd586..17b02c1 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -46,7 +46,7 @@ void IntelliPhotoGui::slotOpen(){ // If we have a file name load the image and place // it in the paintingArea - if (!fileName.isEmpty()) + if (!fileName.isEmpty()){ paintingArea->open(fileName); UpdateGui(); } @@ -684,29 +684,29 @@ void IntelliPhotoGui::createGui(){ preview = preview.fromImage(tmp); } - ActiveLayerImageLine = new QLabel(); - ActiveLayerImageLine->setFixedSize(Buttonsize); - ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); + ActiveLayerImageLabel = new QLabel(); + ActiveLayerImageLabel->setFixedSize(Buttonsize*2); + ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); // set gui elements mainLayout->addWidget(paintingArea,1,1,20,1); - mainLayout->addWidget(CircleButton,1,2,1,2); - mainLayout->addWidget(FloodFillButton,2,2,1,2); - mainLayout->addWidget(LineButton,3,2,1,2); - mainLayout->addWidget(PenButton,4,2,1,2); - mainLayout->addWidget(PlainButton,5,2,1,2); - mainLayout->addWidget(PolygonButton,6,2,1,2); - mainLayout->addWidget(RectangleButton,7,2,1,2); - mainLayout->addWidget(WidthLine,8,2,1,2); - mainLayout->addWidget(EditLineWidth,9,2,1,2); - mainLayout->addWidget(innerAlphaLine,10,2,1,2); - mainLayout->addWidget(EditLineInnerAlpha,11,2,1,2); - mainLayout->addWidget(FirstColorButton,12,2,1,1); - mainLayout->addWidget(SecondColorButton,12,3,1,1); - mainLayout->addWidget(SwitchColorButton,13,2,1,2); - mainLayout->addWidget(ActiveLayerLine,14,2,1,2); - mainLayout->addWidget(ActiveLayerImageLine,15,2,1,2); + mainLayout->addWidget(CircleButton,1,2,1,1); + mainLayout->addWidget(FloodFillButton,1,3,1,1); + mainLayout->addWidget(LineButton,2,2,1,1); + mainLayout->addWidget(PenButton,2,3,1,1); + mainLayout->addWidget(PlainButton,3,2,1,1); + mainLayout->addWidget(PolygonButton,3,3,1,1); + mainLayout->addWidget(RectangleButton,4,2,1,1); + mainLayout->addWidget(WidthLine,5,2,1,2); + mainLayout->addWidget(EditLineWidth,6,2,1,2); + mainLayout->addWidget(innerAlphaLine,7,2,1,2); + mainLayout->addWidget(EditLineInnerAlpha,8,2,1,2); + mainLayout->addWidget(FirstColorButton,9,2,1,1); + mainLayout->addWidget(SecondColorButton,9,3,1,1); + mainLayout->addWidget(SwitchColorButton,10,2,1,2); + mainLayout->addWidget(ActiveLayerLine,11,2,1,2); + mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2); mainLayout->setHorizontalSpacing(0); } @@ -809,10 +809,6 @@ void IntelliPhotoGui::setToolWidth(int value){ EditLineWidth->setText(QString("%1").arg(value)); } -int IntelliPhotoGui::getToolWidth(){ - return EditLineWidth->text().toInt(); -} - void IntelliPhotoGui::UpdateGui(){ QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); @@ -825,7 +821,7 @@ void IntelliPhotoGui::UpdateGui(){ tmp.fill(Qt::transparent); preview = preview.fromImage(tmp); } - ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); + ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index c9b43e8..55920ff 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -35,7 +35,6 @@ IntelliPhotoGui(); void UpdateGui(); void setToolWidth(int value); -int getToolWidth(); protected: // Function used to close an event @@ -127,7 +126,7 @@ QPushButton* SecondColorButton; QPushButton* SwitchColorButton; QLabel* ActiveLayerLine; -QLabel* ActiveLayerImageLine; +QLabel* ActiveLayerImageLabel; QPalette Palette; diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 0779a8f..520ad1c 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -46,7 +46,7 @@ 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+Area->DummyGui->getToolWidth()); + Area->DummyGui->setToolWidth(value+Toolsettings->getLineWidth()); } bool IntelliTool::createToolLayer(){ From dbf1cda101d529fef836e59a037b8e5d4fc06c88 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Fri, 10 Jan 2020 14:15:59 +0100 Subject: [PATCH 09/97] Update --- src/GUI/IntelliInputDialog.cpp | 45 ++++++++++++++++++++++++++++++++++ src/GUI/IntelliInputDialog.h | 25 +++++++++++++++++++ src/GUI/IntelliPhotoGui.cpp | 10 +++----- src/IntelliPhoto.pro | 2 ++ 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 src/GUI/IntelliInputDialog.cpp create mode 100644 src/GUI/IntelliInputDialog.h diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp new file mode 100644 index 0000000..1e35545 --- /dev/null +++ b/src/GUI/IntelliInputDialog.cpp @@ -0,0 +1,45 @@ +#include "IntelliInputDialog.h" + +IntelliInputDialog::IntelliInputDialog() +{ + setValuesOfPalette(); +} + +void IntelliInputDialog::Input(){ + QDialog* Dialog = new QDialog(); + QGridLayout* Layout = new QGridLayout(); + QDialogButtonBox* ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + QPushButton* Button = new QPushButton(); + Button->setFixedSize(Buttonsize); + + QPushButton* okButton = ButtonBox->button(QDialogButtonBox::Ok); + okButton->setAutoDefault(false); + okButton->setDefault(false); + + QPushButton* cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); + cancelButton->setAutoDefault(false); + cancelButton->setDefault(false); + + Button->setPalette(Palette); + okButton->setPalette(Palette); + cancelButton->setPalette(Palette); + + Layout->addWidget(Button); + Layout->addWidget(ButtonBox); + Dialog->setLayout(Layout); + Dialog->setStyleSheet("background-color:rgb(64,64,64)"); + connect(okButton, SIGNAL(clicked()),Dialog,SLOT(slotCloseEvent())); +} + +void IntelliInputDialog::setValuesOfPalette(){ + Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); + Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); + Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); + Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); + Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); +} diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h new file mode 100644 index 0000000..49af2b5 --- /dev/null +++ b/src/GUI/IntelliInputDialog.h @@ -0,0 +1,25 @@ +#ifndef INTELLIINPUTDIALOG_H +#define INTELLIINPUTDIALOG_H + +#include + +#include "IntelliPhotoGui.h" + +class IntelliInputDialog +{ +public: + IntelliInputDialog(); + + void Input(); + +private slots: + void slotCloseEvent(); + +private: + IntelliPhotoGui* DummyGui; + const QSize Buttonsize = QSize(35,35); + QPalette Palette; + void setValuesOfPalette(); +}; + +#endif // INTELLIINPUTDIALOG_H diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 17b02c1..9f3b4b4 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -73,10 +73,9 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - QInputDialog Input; - Input.setPalette(Palette); - int width = Input.getInt(this, tr("New Layer"), + + /*int width = QInputDialog::getInt(this, tr("New Layer"), tr("Width:"), 200,1, 500, 1, &ok1); @@ -87,7 +86,7 @@ void IntelliPhotoGui::slotCreateNewLayer(){ if (ok1&&ok2){ paintingArea->addLayer(width,height,0,0); UpdateGui(); - } + }*/ } // Opens a dialog that allows the user to delete a Layer @@ -689,7 +688,6 @@ void IntelliPhotoGui::createGui(){ ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); // set gui elements - mainLayout->addWidget(paintingArea,1,1,20,1); mainLayout->addWidget(CircleButton,1,2,1,1); mainLayout->addWidget(FloodFillButton,1,3,1,1); @@ -717,7 +715,7 @@ void IntelliPhotoGui::setIntelliStyle(){ Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); - Palette.setBrush(QPalette::Window, QColor(0, 0, 0)); + Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); diff --git a/src/IntelliPhoto.pro b/src/IntelliPhoto.pro index 13b6975..f3c669a 100644 --- a/src/IntelliPhoto.pro +++ b/src/IntelliPhoto.pro @@ -16,6 +16,7 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ + GUI/IntelliInputDialog.cpp \ GUI/IntelliPhotoGui.cpp \ Image/IntelliImage.cpp \ Image/IntelliRasterImage.cpp \ @@ -36,6 +37,7 @@ SOURCES += \ main.cpp HEADERS += \ + GUI/IntelliInputDialog.h \ GUI/IntelliPhotoGui.h \ Image/IntelliImage.h \ Image/IntelliRasterImage.h \ From 7491472962e55924f4f94ddf2d77876ff5ad2152 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Fri, 10 Jan 2020 21:10:49 +0100 Subject: [PATCH 10/97] Schluss --- src/GUI/IntelliInputDialog.cpp | 84 ++++++++++++++++++++++++++++------ src/GUI/IntelliInputDialog.h | 37 +++++++++++---- src/GUI/IntelliPhotoGui.cpp | 25 +++++----- src/GUI/IntelliPhotoGui.h | 8 +++- src/main.cpp | 7 ++- 5 files changed, 121 insertions(+), 40 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index 1e35545..7afa6b1 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -1,35 +1,71 @@ #include "IntelliInputDialog.h" -IntelliInputDialog::IntelliInputDialog() +IntelliInputDialog::IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step) { + this->Dialog = Dialog; + createInputBox(Title, Label, value, minValue, maxValue, step); + createConnections(Loop); setValuesOfPalette(); + setInputBoxStyle(); } -void IntelliInputDialog::Input(){ - QDialog* Dialog = new QDialog(); - QGridLayout* Layout = new QGridLayout(); - QDialogButtonBox* ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); +void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){ + this->Dialog = new QDialog(); + Dialog->setWindowFlags(Dialog->windowFlags() & ~Qt::WindowContextHelpButtonHint); + if(Title == nullptr){ + Dialog->setWindowTitle("Input Box"); + } + else{ + Dialog->setWindowTitle(Title); + } + Layout = new QGridLayout(); + ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - QPushButton* Button = new QPushButton(); - Button->setFixedSize(Buttonsize); + InputLabel = new QLabel(); + if(Label == nullptr){ + InputLabel->setText("Width:"); + } + else{ + InputLabel->setText(Label); + } + InputLabel->setFixedSize(Linesize); - QPushButton* okButton = ButtonBox->button(QDialogButtonBox::Ok); + Input = new QSpinBox(); + Input->setFixedSize(Linesize); + Input->setRange(minValue,maxValue); + Input->setValue(value); + + okButton = ButtonBox->button(QDialogButtonBox::Ok); + okButton->setFixedSize(Buttonsize); okButton->setAutoDefault(false); okButton->setDefault(false); - QPushButton* cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); + cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); + cancelButton->setFixedSize(Buttonsize); cancelButton->setAutoDefault(false); cancelButton->setDefault(false); - Button->setPalette(Palette); + Layout->addWidget(InputLabel,1,1,1,1); + Layout->addWidget(Input,2,1,1,1); + Layout->addWidget(ButtonBox,3,1,1,1); + Dialog->setLayout(Layout); + Dialog->resize(172,94); + Dialog->show(); +} + +void IntelliInputDialog::createConnections(QEventLoop* Loop){ + connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe(Speicher))); + connect(okButton, SIGNAL(clicked()), Loop, SLOT(quit())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent())); + connect(cancelButton, SIGNAL(clicked()), Loop, SLOT(quit())); +} + +void IntelliInputDialog::setInputBoxStyle(){ + InputLabel->setPalette(Palette); + Input->setPalette(Palette); okButton->setPalette(Palette); cancelButton->setPalette(Palette); - - Layout->addWidget(Button); - Layout->addWidget(ButtonBox); - Dialog->setLayout(Layout); Dialog->setStyleSheet("background-color:rgb(64,64,64)"); - connect(okButton, SIGNAL(clicked()),Dialog,SLOT(slotCloseEvent())); } void IntelliInputDialog::setValuesOfPalette(){ @@ -43,3 +79,21 @@ void IntelliInputDialog::setValuesOfPalette(){ Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); } + +void IntelliInputDialog::slotCloseEvent(){ + Dialog->close(); +} + +void IntelliInputDialog::slotEingabe(Speichereinheit &Speicher){ + qDebug() << Input->value(); + SetValueToGUI(); + Dialog->close(); +} + +void IntelliInputDialog::SetValueToGUI(){ + Input->value(); +} + +void IntelliInputDialog::getIntInput(Speichereinheit &Speicher, QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step){ + this->Dialog = new IntelliInputDialog(Speicher, Loop, Dialog, Title, Label, value, minValue, maxValue, step); +} diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index 49af2b5..bcc9a12 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -2,24 +2,45 @@ #define INTELLIINPUTDIALOG_H #include - +#include #include "IntelliPhotoGui.h" -class IntelliInputDialog +class Speichereinheit{ + int value; +}; + +class IntelliInputDialog : public QDialog { +Q_OBJECT public: - IntelliInputDialog(); + IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); - void Input(); + void getIntInput(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = "InputBox", QString Label = "Weight:", int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); -private slots: +public slots: void slotCloseEvent(); + void slotEingabe(Speichereinheit &Speicher); private: - IntelliPhotoGui* DummyGui; - const QSize Buttonsize = QSize(35,35); - QPalette Palette; + void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); + void createConnections(QEventLoop* Loop = nullptr); void setValuesOfPalette(); + void setInputBoxStyle(); + + void SetValueToGUI(); + + QDialog* Dialog; + + QGridLayout* Layout; + QDialogButtonBox* ButtonBox; + + const QSize Linesize = QSize(150,20); + const QSize Buttonsize = QSize(72,20); + QPalette Palette; + QLabel* InputLabel; + QSpinBox* Input; + QPushButton* okButton; + QPushButton* cancelButton; }; #endif // INTELLIINPUTDIALOG_H diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 9f3b4b4..7297c47 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -4,7 +4,8 @@ #include "Layer/PaintingArea.h" // IntelliPhotoGui constructor -IntelliPhotoGui::IntelliPhotoGui(){ +IntelliPhotoGui::IntelliPhotoGui(IntelliInputDialog* InputDialog){ + //this->InputDialog = InputDialog; // create Gui elements and lay them out createGui(); // Create actions @@ -15,7 +16,7 @@ IntelliPhotoGui::IntelliPhotoGui(){ setIntelliStyle(); // Size the app resize(600,600); - showMaximized(); + //showMaximized(); setDefaultToolValue(); } @@ -68,25 +69,22 @@ void IntelliPhotoGui::slotSave(){ // Opens a dialog that allows the user to create a New Layer void IntelliPhotoGui::slotCreateNewLayer(){ // Stores button value - bool ok1, ok2; // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button + Speichereinheit Speicher; + this->InputDialog->getIntInput(Speicher, &Loop, this->InputDialog, "New Layer", "Width:", 5, 0, 5000, 1); + int width = returnValueOfInputDialog; - /*int width = QInputDialog::getInt(this, tr("New Layer"), - tr("Width:"), - 200,1, 500, 1, &ok1); + qDebug() << width; + + int height = 25;//QInputDialog::getInt(this, tr("New Layer"),tr("Height:"),200,1, 500, 1, &ok2); - int height = QInputDialog::getInt(this, tr("New Layer"), - tr("Height:"), - 200,1, 500, 1, &ok2); // Create New Layer - if (ok1&&ok2){ - paintingArea->addLayer(width,height,0,0); - UpdateGui(); - }*/ + paintingArea->addLayer(width,height,0,0); + UpdateGui(); } // Opens a dialog that allows the user to delete a Layer @@ -496,7 +494,6 @@ void IntelliPhotoGui::createMenus(){ foreach (QAction *action, actionSaveAs) saveAsMenu->addAction(action); - // Attach all actions to File fileMenu = new QMenu(tr("&File"), this); fileMenu->addAction(actionOpen); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 55920ff..27909ee 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -11,6 +11,9 @@ #include #include +#include "IntelliInputDialog.h" + + // PaintingArea used to paint the image class PaintingArea; @@ -30,11 +33,12 @@ public: /*! * \brief The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window */ -IntelliPhotoGui(); +IntelliPhotoGui(IntelliInputDialog* InputDialog); void UpdateGui(); void setToolWidth(int value); +int returnValueOfInputDialog = 5; protected: // Function used to close an event @@ -104,6 +108,8 @@ void setDefaultToolValue(); // What we'll draw on PaintingArea* paintingArea; +IntelliInputDialog* InputDialog; +QEventLoop Loop; const QSize Buttonsize = QSize(35,35); QPixmap preview; diff --git a/src/main.cpp b/src/main.cpp index 30adab2..d6a8dd3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ #include "GUI/IntelliPhotoGui.h" +#include "GUI/IntelliInputDialog.h" #include #include #include @@ -7,9 +8,11 @@ int main(int argc, char*argv[]){ // The main application QApplication app(argc, argv); + IntelliInputDialog* InputDialog; + // Create and open the main window - IntelliPhotoGui window; - window.show(); + IntelliPhotoGui window(InputDialog); + window.show(); return app.exec(); } From 5a05aa4a197550c2e8527d519e1cd4d3a24f618d Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 12 Jan 2020 20:23:39 +0100 Subject: [PATCH 11/97] start of unit test --- src/GUI/IntelliPhotoGui.h | 56 ++++++------ src/Image/IntelliImage.h | 4 + src/Image/IntelliRasterImage.h | 4 + src/Image/IntelliShapedImage.h | 4 + src/IntelliHelper/IntelliColorPicker.h | 4 + src/IntelliHelper/IntelliRenderSettings.h | 4 + src/IntelliHelper/IntelliToolsettings.h | 4 + src/IntelliHelper/IntelliTriangulation.h | 3 + src/Layer/PaintingArea.cpp | 14 --- src/Layer/PaintingArea.h | 4 + src/Tool/IntelliColorPicker.cpp | 36 -------- src/Tool/IntelliTool.h | 4 + src/Tool/IntelliToolCircle.h | 5 ++ src/Tool/IntelliToolFloodFill.h | 5 ++ src/Tool/IntelliToolLine.h | 4 + src/Tool/IntelliToolPen.h | 4 + src/Tool/IntelliToolPlain.h | 5 ++ src/Tool/IntelliToolPolygon.h | 5 ++ src/Tool/IntelliToolRectangle.h | 5 ++ src/UnitTest.pro | 3 +- src/mainUnitTest.cpp | 100 +++++++++++++++++----- 21 files changed, 180 insertions(+), 97 deletions(-) delete mode 100644 src/Tool/IntelliColorPicker.cpp diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 43aa03e..6dd85f2 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -11,6 +11,9 @@ #include #include +//for unit testing +class UnitTest; + // PaintingArea used to paint the image class PaintingArea; @@ -22,6 +25,7 @@ class IntelliColorPicker; * \brief The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program */ class IntelliPhotoGui : public QMainWindow { + friend UnitTest; // Declares our class as a QObject which is the base class // for all Qt objects // QObjects handle events @@ -129,47 +133,47 @@ QLabel* ActiveLayerImageLine; QPalette Palette; // The menu widgets -QMenu*saveAsMenu; -QMenu*fileMenu; -QMenu*renderMenu; -QMenu*optionMenu; -QMenu*layerMenu; -QMenu*colorMenu; -QMenu*toolCreationMenu; -QMenu*toolSettingsMenu; -QMenu*toolMenu; -QMenu*helpMenu; +QMenu* saveAsMenu; +QMenu* fileMenu; +QMenu* renderMenu; +QMenu* optionMenu; +QMenu* layerMenu; +QMenu* colorMenu; +QMenu* toolCreationMenu; +QMenu* toolSettingsMenu; +QMenu* toolMenu; +QMenu* helpMenu; // All the actions that can occur // meta image actions (need further modularisation) -QAction*actionOpen; -QAction*actionExit; +QAction* actionOpen; +QAction* actionExit; //Rendersetting actions QAction*actionUpdateRenderSettingsOn; QAction*actionUpdateRenderSettingsOff; // color Picker actions -QAction*actionColorPickerFirstColor; -QAction*actionColorPickerSecondColor; -QAction*actionColorSwap; +QAction* actionColorPickerFirstColor; +QAction* actionColorPickerSecondColor; +QAction* actionColorSwap; // tool actions -QAction*actionCreatePenTool; -QAction*actionCreatePlainTool; -QAction*actionCreateLineTool; -QAction*actionCreateRectangleTool; -QAction*actionCreateCircleTool; -QAction*actionCreatePolygonTool; -QAction*actionCreateFloodFillTool; +QAction* actionCreatePenTool; +QAction* actionCreatePlainTool; +QAction* actionCreateLineTool; +QAction* actionCreateRectangleTool; +QAction* actionCreateCircleTool; +QAction* actionCreatePolygonTool; +QAction* actionCreateFloodFillTool; // dialog actions -QAction*actionAboutDialog; -QAction*actionAboutQtDialog; +QAction* actionAboutDialog; +QAction* actionAboutQtDialog; // layer change actions -QAction*actionCreateNewLayer; -QAction*actionDeleteLayer; +QAction* actionCreateNewLayer; +QAction* actionDeleteLayer; QAction* actionSetActiveLayer; QAction* actionSetActiveAlpha; QAction* actionMovePositionUp; diff --git a/src/Image/IntelliImage.h b/src/Image/IntelliImage.h index 185063d..5ba0337 100644 --- a/src/Image/IntelliImage.h +++ b/src/Image/IntelliImage.h @@ -11,12 +11,16 @@ #include "IntelliHelper/IntelliTriangulation.h" #include "IntelliHelper/IntelliRenderSettings.h" +//for unit testing +class UnitTest; + class IntelliTool; /*! * \brief An abstract class which manages the basic IntelliImage operations. */ class IntelliImage { + friend UnitTest; friend IntelliTool; public: diff --git a/src/Image/IntelliRasterImage.h b/src/Image/IntelliRasterImage.h index f589843..f05be17 100644 --- a/src/Image/IntelliRasterImage.h +++ b/src/Image/IntelliRasterImage.h @@ -3,10 +3,14 @@ #include "Image/IntelliImage.h" +//for unit testing +class UnitTest; + /*! * \brief The IntelliRasterImage manages a RASTERIMAGE. */ class IntelliRasterImage : public IntelliImage { + friend UnitTest; friend IntelliTool; protected: /*! diff --git a/src/Image/IntelliShapedImage.h b/src/Image/IntelliShapedImage.h index 220ad75..e3ce35d 100644 --- a/src/Image/IntelliShapedImage.h +++ b/src/Image/IntelliShapedImage.h @@ -4,10 +4,14 @@ #include "Image/IntelliRasterImage.h" #include +//for unit testing +class UnitTest; + /*! * \brief The IntelliShapedImage manages a Shapedimage. */ class IntelliShapedImage : public IntelliRasterImage { + friend UnitTest; friend IntelliTool; private: /*! diff --git a/src/IntelliHelper/IntelliColorPicker.h b/src/IntelliHelper/IntelliColorPicker.h index 4ea686b..948b2e1 100644 --- a/src/IntelliHelper/IntelliColorPicker.h +++ b/src/IntelliHelper/IntelliColorPicker.h @@ -5,10 +5,14 @@ #include "QPoint" #include "QColorDialog" +//for unit testing +class UnitTest; + /*! * \brief The IntelliColorPicker manages the selected colors for one whole project. */ class IntelliColorPicker { + friend UnitTest; public: /*! * \brief IntelliColorPicker constructor, setting 2 preset colors, be careful, theese color may change in production. diff --git a/src/IntelliHelper/IntelliRenderSettings.h b/src/IntelliHelper/IntelliRenderSettings.h index a0be040..21c7bc9 100644 --- a/src/IntelliHelper/IntelliRenderSettings.h +++ b/src/IntelliHelper/IntelliRenderSettings.h @@ -1,9 +1,13 @@ #ifndef INTELLIRENDERSETTINGS_H #define INTELLIRENDERSETTINGS_H +//for unit testing +class UnitTest; + class IntelliRenderSettings { + friend UnitTest; public: IntelliRenderSettings(); diff --git a/src/IntelliHelper/IntelliToolsettings.h b/src/IntelliHelper/IntelliToolsettings.h index ae11dc0..8a3e837 100644 --- a/src/IntelliHelper/IntelliToolsettings.h +++ b/src/IntelliHelper/IntelliToolsettings.h @@ -1,7 +1,11 @@ #ifndef INTELLITOOLSETTINGS_H #define INTELLITOOLSETTINGS_H +//for unit testing +class UnitTest; + class IntelliToolsettings { + friend UnitTest; public: /*! * \brief The LineStyle enum classifing all ways of drawing a line. diff --git a/src/IntelliHelper/IntelliTriangulation.h b/src/IntelliHelper/IntelliTriangulation.h index 21ebfa3..02ac065 100644 --- a/src/IntelliHelper/IntelliTriangulation.h +++ b/src/IntelliHelper/IntelliTriangulation.h @@ -1,6 +1,9 @@ #ifndef INTELLITRIANGULATION_H #define INTELLITRIANGULATION_H +//for unit testing +class UnitTest; + #include #include diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 779c2bb..e2df40d 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -22,20 +22,6 @@ PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) : QWidget(parent){ this->Tool = nullptr; this->setLayerDimensions(maxWidth, maxHeight); - this->addLayer(200,200,0,0,IntelliImage::ImageType::SHAPEDIMAGE); - layerBundle[0].image->drawPlain(QColor(0,0,255,255)); - std::vector polygon; - polygon.push_back(QPoint(100,000)); - polygon.push_back(QPoint(200,100)); - polygon.push_back(QPoint(100,200)); - polygon.push_back(QPoint(000,100)); - layerBundle[0].image->setPolygon(polygon); - - this->addLayer(200,200,150,150,IntelliImage::ImageType::RASTERIMAGE); - layerBundle[1].image->drawPlain(QColor(0,255,0,255)); - layerBundle[1].alpha=200; - - activeLayer=0; } PaintingArea::~PaintingArea(){ diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index fad58dd..666a6a7 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -14,6 +14,9 @@ #include "Tool/IntelliTool.h" #include "IntelliHelper/IntelliColorPicker.h" +//for unit testing +class UnitTest; + /*! * \brief The LayerObject struct holds all the information needed to construct a layer * \param width - Stores the width of a layer in pixels @@ -36,6 +39,7 @@ struct LayerObject { */ class PaintingArea : public QWidget { + friend UnitTest; // Declares our class as a QObject which is the base class // for all Qt objects // QObjects handle events diff --git a/src/Tool/IntelliColorPicker.cpp b/src/Tool/IntelliColorPicker.cpp deleted file mode 100644 index 67ba35c..0000000 --- a/src/Tool/IntelliColorPicker.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "IntelliColorPicker.h" -#include "QDebug" - -IntelliColorPicker::IntelliColorPicker(PaintingArea* Area) - : IntelliTool(Area){ - firstColor = {255,0,0,255}; - secondColor = {0,0,255,255}; -} - -IntelliColorPicker::~IntelliColorPicker(){ - -} - -void IntelliColorPicker::getColorbar(int firstOrSecondColor = 1){ - QString Titel; - QColor newColor; - if(firstOrSecondColor == 1) { - Titel = "Choose first Color"; - newColor = QColorDialog::getColor(this->firstColor,nullptr,Titel); - this->firstColor = newColor; - qDebug() << "Firstcolor" << this->firstColor; - } - else{ - Titel = "Choose second Color"; - newColor = QColorDialog::getColor(this->secondColor,nullptr,Titel); - this->secondColor = newColor; - } -} - -QColor IntelliColorPicker::getFirstColor(){ - return firstColor; -} - -QColor IntelliColorPicker::getSecondColor(){ - return secondColor; -} diff --git a/src/Tool/IntelliTool.h b/src/Tool/IntelliTool.h index 56404aa..213ec1f 100644 --- a/src/Tool/IntelliTool.h +++ b/src/Tool/IntelliTool.h @@ -5,6 +5,9 @@ #include "IntelliHelper/IntelliToolsettings.h" #include +//for unit testing +class UnitTest; + struct LayerObject; class PaintingArea; @@ -12,6 +15,7 @@ class PaintingArea; * \brief An abstract class that manages the basic events, like mouse clicks or scrolls events. */ class IntelliTool { + friend UnitTest; public: enum class Tooltype { CIRCLE, diff --git a/src/Tool/IntelliToolCircle.h b/src/Tool/IntelliToolCircle.h index d75665d..53dfbd7 100644 --- a/src/Tool/IntelliToolCircle.h +++ b/src/Tool/IntelliToolCircle.h @@ -4,10 +4,15 @@ #include "QColor" #include "QPoint" + +//for unit testing +class UnitTest; + /*! * \brief The IntelliToolCircle class represents a tool to draw a circle. */ class IntelliToolCircle : public IntelliTool { + friend UnitTest; /*! * \brief A function that implements a circle drawing algorithm. * \param radius - The radius of the circle. diff --git a/src/Tool/IntelliToolFloodFill.h b/src/Tool/IntelliToolFloodFill.h index 3e93699..699de0e 100644 --- a/src/Tool/IntelliToolFloodFill.h +++ b/src/Tool/IntelliToolFloodFill.h @@ -4,10 +4,15 @@ #include "QColor" +//for unit testing +class UnitTest; + + /*! * \brief The IntelliToolFloodFill class represents a tool to flood FIll a certian area. */ class IntelliToolFloodFill : public IntelliTool { + friend UnitTest; public: /*! * \brief A constructor setting the general paintingArea and colorPicker. diff --git a/src/Tool/IntelliToolLine.h b/src/Tool/IntelliToolLine.h index 1bae946..ee7fe3b 100644 --- a/src/Tool/IntelliToolLine.h +++ b/src/Tool/IntelliToolLine.h @@ -4,10 +4,14 @@ #include "QPoint" +//for unit testing +class UnitTest; + /*! * \brief The IntelliToolFloodFill class represents a tool to draw a line. */ class IntelliToolLine : public IntelliTool { + friend UnitTest; /*! * \brief The starting point of the line. */ diff --git a/src/Tool/IntelliToolPen.h b/src/Tool/IntelliToolPen.h index 39aab9e..82428ad 100644 --- a/src/Tool/IntelliToolPen.h +++ b/src/Tool/IntelliToolPen.h @@ -5,10 +5,14 @@ #include "QColor" #include "QPoint" +//for unit testing +class UnitTest; + /*! * \brief The IntelliToolPen class represents a tool to draw a line. */ class IntelliToolPen : public IntelliTool { + friend UnitTest; /*! * \brief point - Represents the previous point to help drawing a line. */ diff --git a/src/Tool/IntelliToolPlain.h b/src/Tool/IntelliToolPlain.h index c4b294c..331507c 100644 --- a/src/Tool/IntelliToolPlain.h +++ b/src/Tool/IntelliToolPlain.h @@ -3,10 +3,15 @@ #include "IntelliTool.h" #include "QColor" + +//for unit testing +class UnitTest; + /*! * \brief The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color. */ class IntelliToolPlainTool : public IntelliTool { + friend UnitTest; public: /*! * \brief A constructor setting the general paintingArea and colorPicker. diff --git a/src/Tool/IntelliToolPolygon.h b/src/Tool/IntelliToolPolygon.h index 920a556..cb6365a 100644 --- a/src/Tool/IntelliToolPolygon.h +++ b/src/Tool/IntelliToolPolygon.h @@ -5,11 +5,16 @@ #include "IntelliHelper/IntelliTriangulation.h" #include #include + +//for unit testing +class UnitTest; + /*! * \brief The IntelliToolPolygon managed the Drawing of Polygonforms */ class IntelliToolPolygon : public IntelliTool { + friend UnitTest; /*! * \brief Checks if the given Point lies near the starting Point. * \param x - x coordinate of a point. diff --git a/src/Tool/IntelliToolRectangle.h b/src/Tool/IntelliToolRectangle.h index 041e860..ba6694a 100644 --- a/src/Tool/IntelliToolRectangle.h +++ b/src/Tool/IntelliToolRectangle.h @@ -5,10 +5,15 @@ #include "QColor" #include "QPoint" + +//for unit testing +class UnitTest; + /*! * \brief The IntelliToolRectangle class represents a tool to draw a rectangle. */ class IntelliToolRectangle : public IntelliTool { + friend UnitTest; /*! * \brief A function that implements a rectagle drawing algorithm. * \param othercorner - The second corner point of the rectangle. diff --git a/src/UnitTest.pro b/src/UnitTest.pro index c61749e..0ac2ecf 100644 --- a/src/UnitTest.pro +++ b/src/UnitTest.pro @@ -2,6 +2,8 @@ QT += testlib QT += gui CONFIG += qt warn_on depend_includepath testcase +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + TEMPLATE = app SOURCES += \ @@ -14,7 +16,6 @@ SOURCES += \ IntelliHelper/IntelliToolsettings.cpp \ IntelliHelper/IntelliTriangulation.cpp \ Layer/PaintingArea.cpp \ - Tool/IntelliColorPicker.cpp \ Tool/IntelliTool.cpp \ Tool/IntelliToolCircle.cpp \ Tool/IntelliToolFloodFill.cpp \ diff --git a/src/mainUnitTest.cpp b/src/mainUnitTest.cpp index 0d27b36..ce7d13f 100644 --- a/src/mainUnitTest.cpp +++ b/src/mainUnitTest.cpp @@ -1,32 +1,17 @@ #include // add necessary includes here - +#include #include "GUI/IntelliPhotoGui.h" -#include "Image/IntelliImage.h" -#include "Image/IntelliRasterImage.h" -#include "Image/IntelliShapedImage.h" -#include "IntelliHelper/IntelliColorPicker.h" -#include "IntelliHelper/IntelliRenderSettings.h" -#include "IntelliHelper/IntelliToolsettings.h" -#include "IntelliHelper/IntelliTriangulation.h" -#include "Layer/PaintingArea.h" -#include "Tool/IntelliTool.h" -#include "Tool/IntelliToolCircle.h" -#include "Tool/IntelliToolFloodFill.h" -#include "Tool/IntelliToolLine.h" -#include "Tool/IntelliToolPen.h" -#include "Tool/IntelliToolPlain.h" -#include "Tool/IntelliToolPolygon.h" -#include "Tool/IntelliToolRectangle.h" + class UnitTest : public QObject { Q_OBJECT private: - PaintingArea* area; IntelliPhotoGui* gui; - QImage* image; + PaintingArea* area; + QApplication* app; public: UnitTest(); @@ -37,13 +22,87 @@ private slots: void cleanupTestCase(); void test_case1(); + //test painting area + void test_addLayer(); + void test_deleteLayer(); + void test_setActive(); + void test_setAlpha(); + void test_floodFill(); + void test_moveActive(); + void test_setPolygon(); + void test_setLayerUp(); + void test_setLayerDown(); + void test_createTools(); + //test Raster-Image operations + void test_RasterImage_drawPixel(); + void test_RasterImage_drawLine(); + void test_RasterImage_drawPoint(); + void test_RasterImage_getDisplayable(); + void test_RasterImage_setPolygon(); + void test_RasterImage_loadImage(); + void test_RasterImage_getPixelColor(); + void test_RasterImage_getImageData(); + void test_RasterImage_setImageData(); + + //test Shaped-Image operations + void test_ShapedImage_drawPixel(); + void test_ShapedImage_drawLine(); + void test_ShapedImage_drawPoint(); + void test_ShapedImage_getDisplayable(); + void test_ShapedImage_setPolygon(); + void test_ShapedImage_loadImage(); + void test_ShapedImage_getPixelColor(); + void test_ShapedImage_getImageData(); + void test_ShapedImage_setImageData(); + + //test painting-area tools + void test_createTool_Circle(); + void test_createTool_FloodFill(); + void test_createTool_Line(); + void test_createTool_Pen(); + void test_createTool_Plain(); + void test_createTool_Polygon(); + void test_createTool_Rectangle(); + + //test tools + void test_Circle_fullDraw(); + void test_Circle_interruptedDraw(); + + void test_FloodFill_fullDraw(); + void test_FloodFill_interruptedDraw(); + + void test_Line_fullDraw(); + void test_Line_interruptedDraw(); + + void test_Pen_fullDraw(); + void test_Pen_interruptedDraw(); + + void test_Plain_fullDraw(); + void test_Plain_interruptedDraw(); + + void test_Polygon_fullDraw(); + void test_Polygon_interruptedDraw(); + + void test_Rectangle_fullDraw(); + void test_Rectangle_interruptedDraw(); + + //test Triangulation + void test_Triangulation_Coverage(); }; UnitTest::UnitTest() { + char arg0[] = "programName"; + char arg1[] = "arg1"; + char arg2[] = "arg2"; + char *argv[] = {arg0, arg1, arg2, nullptr}; + int argc = sizeof(argv) / sizeof(char*) - 1; + app = new QApplication(argc,argv); + gui = new IntelliPhotoGui(); + area = gui->paintingArea; } UnitTest::~UnitTest() @@ -58,7 +117,8 @@ void UnitTest::initTestCase() void UnitTest::cleanupTestCase() { - + delete gui; + delete app; } void UnitTest::test_case1() From e1571c4bc806d41b6b60555a11bd9b569d94e84b Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 12 Jan 2020 22:14:29 +0100 Subject: [PATCH 12/97] working setup for unit tests --- src/{UnitTest.pro => IntelliUnitTest.pro} | 12 +- src/mainUnitTest.cpp | 83 +++++++++- src/tst_unittest.cpp | 191 ++++++++++++++++++++++ 3 files changed, 274 insertions(+), 12 deletions(-) rename src/{UnitTest.pro => IntelliUnitTest.pro} (90%) create mode 100644 src/tst_unittest.cpp diff --git a/src/UnitTest.pro b/src/IntelliUnitTest.pro similarity index 90% rename from src/UnitTest.pro rename to src/IntelliUnitTest.pro index 0ac2ecf..6e41ba3 100644 --- a/src/UnitTest.pro +++ b/src/IntelliUnitTest.pro @@ -1,12 +1,15 @@ QT += testlib -QT += gui -CONFIG += qt warn_on depend_includepath testcase +QT -= gui + +CONFIG += qt console warn_on depend_includepath testcase +CONFIG -= app_bundle greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + TEMPLATE = app -SOURCES += \ +SOURCES += tst_unittest.cpp \ GUI/IntelliPhotoGui.cpp \ Image/IntelliImage.cpp \ Image/IntelliRasterImage.cpp \ @@ -23,8 +26,7 @@ SOURCES += \ Tool/IntelliToolPen.cpp \ Tool/IntelliToolPlain.cpp \ Tool/IntelliToolPolygon.cpp \ - Tool/IntelliToolRectangle.cpp \ - mainUnitTest.cpp + Tool/IntelliToolRectangle.cpp DISTFILES += \ icons/Wechselpfeile.png \ diff --git a/src/mainUnitTest.cpp b/src/mainUnitTest.cpp index ce7d13f..4302e27 100644 --- a/src/mainUnitTest.cpp +++ b/src/mainUnitTest.cpp @@ -20,7 +20,7 @@ public: private slots: void initTestCase(); void cleanupTestCase(); - void test_case1(); + //void test_case1(); //test painting area void test_addLayer(); @@ -121,12 +121,81 @@ void UnitTest::cleanupTestCase() delete app; } -void UnitTest::test_case1() -{ - QBENCHMARK { - QVERIFY(1 == 1); - } -} +//void UnitTest::test_case1() +//{ +// QBENCHMARK { +// QVERIFY(1 == 1); +// } +//} + +//test painting area +void UnitTest::test_addLayer(){} +void UnitTest::test_deleteLayer(){} +void UnitTest::test_setActive(){} +void UnitTest::test_setAlpha(){} +void UnitTest::test_floodFill(){} +void UnitTest::test_moveActive(){} +void UnitTest::test_setPolygon(){} +void UnitTest::test_setLayerUp(){} +void UnitTest::test_setLayerDown(){} + +void UnitTest::test_createTools(){} + +//test Raster-Image operations +void UnitTest::test_RasterImage_drawPixel(){} +void UnitTest::test_RasterImage_drawLine(){} +void UnitTest::test_RasterImage_drawPoint(){} +void UnitTest::test_RasterImage_getDisplayable(){} +void UnitTest::test_RasterImage_setPolygon(){} +void UnitTest::test_RasterImage_loadImage(){} +void UnitTest::test_RasterImage_getPixelColor(){} +void UnitTest::test_RasterImage_getImageData(){} +void UnitTest::test_RasterImage_setImageData(){} + +//test Shaped-Image operations +void UnitTest::test_ShapedImage_drawPixel(){} +void UnitTest::test_ShapedImage_drawLine(){} +void UnitTest::test_ShapedImage_drawPoint(){} +void UnitTest::test_ShapedImage_getDisplayable(){} +void UnitTest::test_ShapedImage_setPolygon(){} +void UnitTest::test_ShapedImage_loadImage(){} +void UnitTest::test_ShapedImage_getPixelColor(){} +void UnitTest::test_ShapedImage_getImageData(){} +void UnitTest::test_ShapedImage_setImageData(){} + +//test painting-area tools +void UnitTest::test_createTool_Circle(){} +void UnitTest::test_createTool_FloodFill(){} +void UnitTest::test_createTool_Line(){} +void UnitTest::test_createTool_Pen(){} +void UnitTest::test_createTool_Plain(){} +void UnitTest::test_createTool_Polygon(){} +void UnitTest::test_createTool_Rectangle(){} + +//test tools +void UnitTest::test_Circle_fullDraw(){} +void UnitTest::test_Circle_interruptedDraw(){} + +void UnitTest::test_FloodFill_fullDraw(){} +void UnitTest::test_FloodFill_interruptedDraw(){} + +void UnitTest::test_Line_fullDraw(){} +void UnitTest::test_Line_interruptedDraw(){} + +void UnitTest::test_Pen_fullDraw(){} +void UnitTest::test_Pen_interruptedDraw(){} + +void UnitTest::test_Plain_fullDraw(){} +void UnitTest::test_Plain_interruptedDraw(){} + +void UnitTest::test_Polygon_fullDraw(){} +void UnitTest::test_Polygon_interruptedDraw(){} + +void UnitTest::test_Rectangle_fullDraw(){} +void UnitTest::test_Rectangle_interruptedDraw(){} + +//test Triangulation +void UnitTest::test_Triangulation_Coverage(){} QTEST_APPLESS_MAIN(UnitTest) diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp new file mode 100644 index 0000000..e320994 --- /dev/null +++ b/src/tst_unittest.cpp @@ -0,0 +1,191 @@ +#include +#include +// add necessary includes here +#include "GUI/IntelliPhotoGui.h" + +class UnitTest : public QObject +{ + Q_OBJECT +private: + IntelliPhotoGui* gui; + PaintingArea* area; + +public: + UnitTest(); + ~UnitTest(); + +private slots: + void initTestCase(); + void cleanupTestCase(); + //void test_case1(); + + //test painting area + void test_addLayer(); + void test_deleteLayer(); + void test_setActive(); + void test_setAlpha(); + void test_floodFill(); + void test_moveActive(); + void test_setPolygon(); + void test_setLayerUp(); + void test_setLayerDown(); + + void test_createTools(); + + //test Raster-Image operations + void test_RasterImage_drawPixel(); + void test_RasterImage_drawLine(); + void test_RasterImage_drawPoint(); + void test_RasterImage_getDisplayable(); + void test_RasterImage_setPolygon(); + void test_RasterImage_loadImage(); + void test_RasterImage_getPixelColor(); + void test_RasterImage_getImageData(); + void test_RasterImage_setImageData(); + + //test Shaped-Image operations + void test_ShapedImage_drawPixel(); + void test_ShapedImage_drawLine(); + void test_ShapedImage_drawPoint(); + void test_ShapedImage_getDisplayable(); + void test_ShapedImage_setPolygon(); + void test_ShapedImage_loadImage(); + void test_ShapedImage_getPixelColor(); + void test_ShapedImage_getImageData(); + void test_ShapedImage_setImageData(); + + //test painting-area tools + void test_createTool_Circle(); + void test_createTool_FloodFill(); + void test_createTool_Line(); + void test_createTool_Pen(); + void test_createTool_Plain(); + void test_createTool_Polygon(); + void test_createTool_Rectangle(); + + //test tools + void test_Circle_fullDraw(); + void test_Circle_interruptedDraw(); + + void test_FloodFill_fullDraw(); + void test_FloodFill_interruptedDraw(); + + void test_Line_fullDraw(); + void test_Line_interruptedDraw(); + + void test_Pen_fullDraw(); + void test_Pen_interruptedDraw(); + + void test_Plain_fullDraw(); + void test_Plain_interruptedDraw(); + + void test_Polygon_fullDraw(); + void test_Polygon_interruptedDraw(); + + void test_Rectangle_fullDraw(); + void test_Rectangle_interruptedDraw(); + + //test Triangulation + void test_Triangulation_Coverage(); +}; + +UnitTest::UnitTest() +{ + gui = new IntelliPhotoGui(); + area = gui->paintingArea; +} + +UnitTest::~UnitTest() +{ + +} + +void UnitTest::initTestCase() +{ + +} + +void UnitTest::cleanupTestCase() +{ + delete gui; +} + +//void UnitTest::test_case1() +//{ +// QBENCHMARK { +// QVERIFY(1 == 1); +// } +//} + +//test painting area +void UnitTest::test_addLayer(){} +void UnitTest::test_deleteLayer(){} +void UnitTest::test_setActive(){} +void UnitTest::test_setAlpha(){} +void UnitTest::test_floodFill(){} +void UnitTest::test_moveActive(){} +void UnitTest::test_setPolygon(){} +void UnitTest::test_setLayerUp(){} +void UnitTest::test_setLayerDown(){} + +void UnitTest::test_createTools(){} + +//test Raster-Image operations +void UnitTest::test_RasterImage_drawPixel(){} +void UnitTest::test_RasterImage_drawLine(){} +void UnitTest::test_RasterImage_drawPoint(){} +void UnitTest::test_RasterImage_getDisplayable(){} +void UnitTest::test_RasterImage_setPolygon(){} +void UnitTest::test_RasterImage_loadImage(){} +void UnitTest::test_RasterImage_getPixelColor(){} +void UnitTest::test_RasterImage_getImageData(){} +void UnitTest::test_RasterImage_setImageData(){} + +//test Shaped-Image operations +void UnitTest::test_ShapedImage_drawPixel(){} +void UnitTest::test_ShapedImage_drawLine(){} +void UnitTest::test_ShapedImage_drawPoint(){} +void UnitTest::test_ShapedImage_getDisplayable(){} +void UnitTest::test_ShapedImage_setPolygon(){} +void UnitTest::test_ShapedImage_loadImage(){} +void UnitTest::test_ShapedImage_getPixelColor(){} +void UnitTest::test_ShapedImage_getImageData(){} +void UnitTest::test_ShapedImage_setImageData(){} + +//test painting-area tools +void UnitTest::test_createTool_Circle(){} +void UnitTest::test_createTool_FloodFill(){} +void UnitTest::test_createTool_Line(){} +void UnitTest::test_createTool_Pen(){} +void UnitTest::test_createTool_Plain(){} +void UnitTest::test_createTool_Polygon(){} +void UnitTest::test_createTool_Rectangle(){} + +//test tools +void UnitTest::test_Circle_fullDraw(){} +void UnitTest::test_Circle_interruptedDraw(){} + +void UnitTest::test_FloodFill_fullDraw(){} +void UnitTest::test_FloodFill_interruptedDraw(){} + +void UnitTest::test_Line_fullDraw(){} +void UnitTest::test_Line_interruptedDraw(){} + +void UnitTest::test_Pen_fullDraw(){} +void UnitTest::test_Pen_interruptedDraw(){} + +void UnitTest::test_Plain_fullDraw(){} +void UnitTest::test_Plain_interruptedDraw(){} + +void UnitTest::test_Polygon_fullDraw(){} +void UnitTest::test_Polygon_interruptedDraw(){} + +void UnitTest::test_Rectangle_fullDraw(){} +void UnitTest::test_Rectangle_interruptedDraw(){} + +//test Triangulation +void UnitTest::test_Triangulation_Coverage(){} + +QTEST_MAIN(UnitTest) + +#include "tst_unittest.moc" From cc56f61247ad67709cf376022752d6f9fcedbacb Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 13 Jan 2020 19:37:22 +0100 Subject: [PATCH 13/97] Uncrustifyed Status --- src/GUI/IntelliInputDialog.cpp | 130 +++--- src/GUI/IntelliInputDialog.h | 42 +- src/GUI/IntelliPhotoGui.cpp | 414 ++++++++++---------- src/Image/IntelliImage.cpp | 136 +++---- src/Image/IntelliRasterImage.cpp | 18 +- src/Image/IntelliShapedImage.cpp | 36 +- src/IntelliHelper/IntelliRenderSettings.cpp | 4 +- src/Layer/PaintingArea.cpp | 62 +-- src/Layer/PaintingArea.h | 250 ++++++------ src/Tool/IntelliTool.cpp | 36 +- src/Tool/IntelliToolCircle.cpp | 14 +- src/Tool/IntelliToolLine.cpp | 2 +- src/Tool/IntelliToolRectangle.cpp | 4 +- src/main.cpp | 6 +- 14 files changed, 577 insertions(+), 577 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index 7afa6b1..e62b091 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -2,98 +2,98 @@ IntelliInputDialog::IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step) { - this->Dialog = Dialog; - createInputBox(Title, Label, value, minValue, maxValue, step); - createConnections(Loop); - setValuesOfPalette(); - setInputBoxStyle(); + this->Dialog = Dialog; + createInputBox(Title, Label, value, minValue, maxValue, step); + createConnections(Loop); + setValuesOfPalette(); + setInputBoxStyle(); } void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){ - this->Dialog = new QDialog(); - Dialog->setWindowFlags(Dialog->windowFlags() & ~Qt::WindowContextHelpButtonHint); - if(Title == nullptr){ - Dialog->setWindowTitle("Input Box"); - } - else{ - Dialog->setWindowTitle(Title); - } - Layout = new QGridLayout(); - ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + this->Dialog = new QDialog(); + Dialog->setWindowFlags(Dialog->windowFlags() & ~Qt::WindowContextHelpButtonHint); + if(Title == nullptr) { + Dialog->setWindowTitle("Input Box"); + } + else{ + Dialog->setWindowTitle(Title); + } + Layout = new QGridLayout(); + ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - InputLabel = new QLabel(); - if(Label == nullptr){ - InputLabel->setText("Width:"); - } - else{ - InputLabel->setText(Label); - } - InputLabel->setFixedSize(Linesize); + InputLabel = new QLabel(); + if(Label == nullptr) { + InputLabel->setText("Width:"); + } + else{ + InputLabel->setText(Label); + } + InputLabel->setFixedSize(Linesize); - Input = new QSpinBox(); - Input->setFixedSize(Linesize); - Input->setRange(minValue,maxValue); - Input->setValue(value); + Input = new QSpinBox(); + Input->setFixedSize(Linesize); + Input->setRange(minValue,maxValue); + Input->setValue(value); - okButton = ButtonBox->button(QDialogButtonBox::Ok); - okButton->setFixedSize(Buttonsize); - okButton->setAutoDefault(false); - okButton->setDefault(false); + okButton = ButtonBox->button(QDialogButtonBox::Ok); + okButton->setFixedSize(Buttonsize); + okButton->setAutoDefault(false); + okButton->setDefault(false); - cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); - cancelButton->setFixedSize(Buttonsize); - cancelButton->setAutoDefault(false); - cancelButton->setDefault(false); + cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); + cancelButton->setFixedSize(Buttonsize); + cancelButton->setAutoDefault(false); + cancelButton->setDefault(false); - Layout->addWidget(InputLabel,1,1,1,1); - Layout->addWidget(Input,2,1,1,1); - Layout->addWidget(ButtonBox,3,1,1,1); - Dialog->setLayout(Layout); - Dialog->resize(172,94); - Dialog->show(); + Layout->addWidget(InputLabel,1,1,1,1); + Layout->addWidget(Input,2,1,1,1); + Layout->addWidget(ButtonBox,3,1,1,1); + Dialog->setLayout(Layout); + Dialog->resize(172,94); + Dialog->show(); } void IntelliInputDialog::createConnections(QEventLoop* Loop){ - connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe(Speicher))); - connect(okButton, SIGNAL(clicked()), Loop, SLOT(quit())); - connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent())); - connect(cancelButton, SIGNAL(clicked()), Loop, SLOT(quit())); + connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe(Speicher))); + connect(okButton, SIGNAL(clicked()), Loop, SLOT(quit())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent())); + connect(cancelButton, SIGNAL(clicked()), Loop, SLOT(quit())); } void IntelliInputDialog::setInputBoxStyle(){ - InputLabel->setPalette(Palette); - Input->setPalette(Palette); - okButton->setPalette(Palette); - cancelButton->setPalette(Palette); - Dialog->setStyleSheet("background-color:rgb(64,64,64)"); + InputLabel->setPalette(Palette); + Input->setPalette(Palette); + okButton->setPalette(Palette); + cancelButton->setPalette(Palette); + Dialog->setStyleSheet("background-color:rgb(64,64,64)"); } void IntelliInputDialog::setValuesOfPalette(){ - Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); - Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); - Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); - Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); - Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); + Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); + Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); + Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); + Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); + Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); } void IntelliInputDialog::slotCloseEvent(){ - Dialog->close(); + Dialog->close(); } void IntelliInputDialog::slotEingabe(Speichereinheit &Speicher){ - qDebug() << Input->value(); - SetValueToGUI(); - Dialog->close(); + qDebug() << Input->value(); + SetValueToGUI(); + Dialog->close(); } void IntelliInputDialog::SetValueToGUI(){ - Input->value(); + Input->value(); } void IntelliInputDialog::getIntInput(Speichereinheit &Speicher, QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step){ - this->Dialog = new IntelliInputDialog(Speicher, Loop, Dialog, Title, Label, value, minValue, maxValue, step); + this->Dialog = new IntelliInputDialog(Speicher, Loop, Dialog, Title, Label, value, minValue, maxValue, step); } diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index bcc9a12..c78f63b 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -5,42 +5,42 @@ #include #include "IntelliPhotoGui.h" -class Speichereinheit{ - int value; +class Speichereinheit { +int value; }; class IntelliInputDialog : public QDialog { Q_OBJECT public: - IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); - void getIntInput(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = "InputBox", QString Label = "Weight:", int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +void getIntInput(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = "InputBox", QString Label = "Weight:", int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); public slots: - void slotCloseEvent(); - void slotEingabe(Speichereinheit &Speicher); +void slotCloseEvent(); +void slotEingabe(Speichereinheit &Speicher); private: - void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); - void createConnections(QEventLoop* Loop = nullptr); - void setValuesOfPalette(); - void setInputBoxStyle(); +void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +void createConnections(QEventLoop* Loop = nullptr); +void setValuesOfPalette(); +void setInputBoxStyle(); - void SetValueToGUI(); +void SetValueToGUI(); - QDialog* Dialog; +QDialog* Dialog; - QGridLayout* Layout; - QDialogButtonBox* ButtonBox; +QGridLayout* Layout; +QDialogButtonBox* ButtonBox; - const QSize Linesize = QSize(150,20); - const QSize Buttonsize = QSize(72,20); - QPalette Palette; - QLabel* InputLabel; - QSpinBox* Input; - QPushButton* okButton; - QPushButton* cancelButton; +const QSize Linesize = QSize(150,20); +const QSize Buttonsize = QSize(72,20); +QPalette Palette; +QLabel* InputLabel; +QSpinBox* Input; +QPushButton* okButton; +QPushButton* cancelButton; }; #endif // INTELLIINPUTDIALOG_H diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 7297c47..88b0a4f 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -5,7 +5,7 @@ // IntelliPhotoGui constructor IntelliPhotoGui::IntelliPhotoGui(IntelliInputDialog* InputDialog){ - //this->InputDialog = InputDialog; + //this->InputDialog = InputDialog; // create Gui elements and lay them out createGui(); // Create actions @@ -13,11 +13,11 @@ IntelliPhotoGui::IntelliPhotoGui(IntelliInputDialog* InputDialog){ // create Menus createMenus(); // set style of the gui - setIntelliStyle(); - // Size the app - resize(600,600); - //showMaximized(); - setDefaultToolValue(); + setIntelliStyle(); + // Size the app + resize(600,600); + //showMaximized(); + setDefaultToolValue(); } // User tried to close the app @@ -47,10 +47,10 @@ void IntelliPhotoGui::slotOpen(){ // If we have a file name load the image and place // it in the paintingArea - if (!fileName.isEmpty()){ + if (!fileName.isEmpty()) { paintingArea->open(fileName); - UpdateGui(); - } + UpdateGui(); + } } } @@ -73,18 +73,18 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - Speichereinheit Speicher; - this->InputDialog->getIntInput(Speicher, &Loop, this->InputDialog, "New Layer", "Width:", 5, 0, 5000, 1); + Speichereinheit Speicher; + this->InputDialog->getIntInput(Speicher, &Loop, this->InputDialog, "New Layer", "Width:", 5, 0, 5000, 1); - int width = returnValueOfInputDialog; + int width = returnValueOfInputDialog; - qDebug() << width; + qDebug() << width; - int height = 25;//QInputDialog::getInt(this, tr("New Layer"),tr("Height:"),200,1, 500, 1, &ok2); + int height = 25;//QInputDialog::getInt(this, tr("New Layer"),tr("Height:"),200,1, 500, 1, &ok2); // Create New Layer - paintingArea->addLayer(width,height,0,0); - UpdateGui(); + paintingArea->addLayer(width,height,0,0); + UpdateGui(); } // Opens a dialog that allows the user to delete a Layer @@ -97,10 +97,10 @@ void IntelliPhotoGui::slotDeleteLayer(){ // Define the standard Value, min, max, step and ok button int layerNumber = QInputDialog::getInt(this, tr("delete Layer"), tr("Number:"), - paintingArea->getNumberOfActiveLayer()+1,1, 501, 1, &ok); + paintingArea->getNumberOfActiveLayer()+1,1, 501, 1, &ok); // Create New Layer if (ok) { - paintingArea->deleteLayer(layerNumber-1); + paintingArea->deleteLayer(layerNumber-1); UpdateGui(); } } @@ -114,14 +114,14 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ // Define the standard Value, min, max, step and ok button int layer = QInputDialog::getInt(this, tr("Layer to set on"), tr("Layer:"), - 1,1,500,1, &ok1); + 1,1,500,1, &ok1); // "New Alpha" is the title of the window int alpha = QInputDialog::getInt(this, tr("New Alpha"), tr("Alpha:"), 255,0, 255, 1, &ok2); if (ok1&&ok2) { - paintingArea->setLayerAlpha(layer-1,alpha); + paintingArea->setLayerAlpha(layer-1,alpha); UpdateGui(); } } @@ -194,22 +194,22 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // Define the standard Value, min, max, step and ok button int layer = QInputDialog::getInt(this, tr("Layer to set on"), tr("Layer:"), - 1,1,500,1, &ok1); + 1,1,500,1, &ok1); if (ok1) { - paintingArea->setLayerActive(layer-1); + paintingArea->setLayerActive(layer-1); UpdateGui(); } } void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ - paintingArea->setRenderSettings(true); - UpdateGui(); + paintingArea->setRenderSettings(true); + UpdateGui(); } void IntelliPhotoGui::slotUpdateRenderSettingsOff(){ - paintingArea->setRenderSettings(false); - UpdateGui(); + paintingArea->setRenderSettings(false); + UpdateGui(); } void IntelliPhotoGui::slotSetFirstColor(){ @@ -266,7 +266,7 @@ void IntelliPhotoGui::slotCreateFloodFillTool(){ void IntelliPhotoGui::slotAboutDialog(){ // Window title and text to display QMessageBox::about(this, tr("About Painting"), - tr("

IntelliPhoto - A Pretty basic editor.


Developed by Team 7.")); + tr("

IntelliPhoto - A Pretty basic editor.


Developed by Team 7.")); } void IntelliPhotoGui::slotEnterPressed(){ @@ -293,13 +293,13 @@ void IntelliPhotoGui::slotResetTools(){ } void IntelliPhotoGui::slotSetWidth(){ - paintingArea->Toolsettings.setLineWidth(); - EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); + paintingArea->Toolsettings.setLineWidth(); + EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); } void IntelliPhotoGui::slotSetInnerAlpha(){ - paintingArea->Toolsettings.setInnerAlpha(); - EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); + paintingArea->Toolsettings.setInnerAlpha(); + EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); } // Define menu actions that call functions @@ -329,7 +329,7 @@ void IntelliPhotoGui::createActions(){ connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); // Attach each PNG in save Menu actionSaveAs.append(pngSaveAction); - pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S)); + pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S)); // Create exit action and tie to IntelliPhotoGui::close() actionExit = new QAction(tr("&Exit"), this); @@ -347,15 +347,15 @@ void IntelliPhotoGui::createActions(){ // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() actionDeleteLayer = new QAction(tr("&Delete Layer..."), this); - actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); + actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer())); actionSetActiveLayer = new QAction(tr("&set Active"), this); - actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); + actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer())); - actionSetActiveAlpha = new QAction(tr("&set Alpha"), this); - actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); + actionSetActiveAlpha = new QAction(tr("&set Alpha"), this); + actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha())); actionMovePositionUp = new QAction(tr("&move Up"), this); @@ -382,76 +382,76 @@ void IntelliPhotoGui::createActions(){ actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down)); connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown())); - //Create Update RenderSettings Actions here - actionUpdateRenderSettingsOn = new QAction(tr("&On"), this); - actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_A)); - connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn())); + //Create Update RenderSettings Actions here + actionUpdateRenderSettingsOn = new QAction(tr("&On"), this); + actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_A)); + connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn())); - actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this); - actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_D)); - connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff())); + actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this); + actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_D)); + connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff())); //Create Color Actions here actionColorPickerFirstColor = new QAction(tr("&Main"), this); - actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); + actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor())); connect(FirstColorButton, SIGNAL(clicked()), this, SLOT(slotSetFirstColor())); actionColorPickerSecondColor = new QAction(tr("&Secondary"), this); - actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M)); + actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M)); connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor())); connect(SecondColorButton, SIGNAL(clicked()), this, SLOT(slotSetSecondColor())); actionColorSwap = new QAction(tr("&Switch"), this); - actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S)); + actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S)); connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor())); connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor())); //Create Tool actions down here actionCreatePlainTool = new QAction(tr("&Plain"), this); - actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_P)); + actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_P)); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool())); actionCreatePenTool = new QAction(tr("&Pen"),this); - actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_S)); + actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_S)); connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool())); actionCreateLineTool = new QAction(tr("&Line"), this); - actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_L)); + actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_L)); connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool())); actionCreateCircleTool = new QAction(tr("&Circle"), this); - actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_C)); + actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_C)); connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool())); actionCreateRectangleTool = new QAction(tr("&Rectangle"), this); - actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_R)); + actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_R)); connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool())); actionCreatePolygonTool = new QAction(tr("&Polygon"), this); - actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_V)); + actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_V)); connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool())); actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this); - actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_F)); + actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_F)); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); // Create about action and tie to IntelliPhotoGui::about() actionAboutDialog = new QAction(tr("&About"), this); - actionAboutDialog->setShortcut(Qt::Key_F2); + actionAboutDialog->setShortcut(Qt::Key_F2); connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog())); // Create about Qt action and tie to IntelliPhotoGui::aboutQt() actionAboutQtDialog = new QAction(tr("About &Qt"), this); - actionAboutQtDialog->setShortcut(Qt::Key_F3); + actionAboutQtDialog->setShortcut(Qt::Key_F3); connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); @@ -478,13 +478,13 @@ void IntelliPhotoGui::createActions(){ connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool())); - actionSetWidth = new QAction(tr("&Set Width"),this); - actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W)); - connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth())); + actionSetWidth = new QAction(tr("&Set Width"),this); + actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W)); + connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth())); - actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this); - actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); - connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha())); + actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this); + actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); + connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha())); } // Create the menubar @@ -501,61 +501,61 @@ void IntelliPhotoGui::createMenus(){ fileMenu->addSeparator(); fileMenu->addAction(actionExit); - //Attach all actions to Render Settings - renderMenu = new QMenu(tr("&Fast Renderer"), this); - renderMenu->addAction(actionUpdateRenderSettingsOn); - renderMenu->addAction(actionUpdateRenderSettingsOff); + //Attach all actions to Render Settings + renderMenu = new QMenu(tr("&Fast Renderer"), this); + renderMenu->addAction(actionUpdateRenderSettingsOn); + renderMenu->addAction(actionUpdateRenderSettingsOff); - // Attach all actions to Layer - layerMenu = new QMenu(tr("&Layer"), this); - layerMenu->addAction(actionCreateNewLayer); - layerMenu->addSeparator(); - layerMenu->addAction(actionSetActiveAlpha); - layerMenu->addAction(actionSetActiveLayer); - layerMenu->addSeparator(); - layerMenu->addAction(actionMovePositionUp); - layerMenu->addAction(actionMovePositionDown); - layerMenu->addAction(actionMovePositionLeft); - layerMenu->addAction(actionMovePositionRight); - layerMenu->addAction(actionMoveLayerUp); - layerMenu->addAction(actionMoveLayerDown); - layerMenu->addSeparator(); - layerMenu->addAction(actionDeleteLayer); + // Attach all actions to Layer + layerMenu = new QMenu(tr("&Layer"), this); + layerMenu->addAction(actionCreateNewLayer); + layerMenu->addSeparator(); + layerMenu->addAction(actionSetActiveAlpha); + layerMenu->addAction(actionSetActiveLayer); + layerMenu->addSeparator(); + layerMenu->addAction(actionMovePositionUp); + layerMenu->addAction(actionMovePositionDown); + layerMenu->addAction(actionMovePositionLeft); + layerMenu->addAction(actionMovePositionRight); + layerMenu->addAction(actionMoveLayerUp); + layerMenu->addAction(actionMoveLayerDown); + layerMenu->addSeparator(); + layerMenu->addAction(actionDeleteLayer); - //Attach all Color Options - colorMenu = new QMenu(tr("&Color"), this); - colorMenu->addAction(actionColorPickerFirstColor); - colorMenu->addAction(actionColorPickerSecondColor); - colorMenu->addAction(actionColorSwap); + //Attach all Color Options + colorMenu = new QMenu(tr("&Color"), this); + colorMenu->addAction(actionColorPickerFirstColor); + colorMenu->addAction(actionColorPickerSecondColor); + colorMenu->addAction(actionColorSwap); - //Attach all Tool Creation Actions - toolCreationMenu = new QMenu(tr("&Drawingtools"), this); - toolCreationMenu->addAction(actionCreateCircleTool); - toolCreationMenu->addAction(actionCreateFloodFillTool); - toolCreationMenu->addAction(actionCreateLineTool); - toolCreationMenu->addAction(actionCreatePenTool); - toolCreationMenu->addAction(actionCreatePlainTool); - toolCreationMenu->addAction(actionCreatePolygonTool); - toolCreationMenu->addAction(actionCreateRectangleTool); + //Attach all Tool Creation Actions + toolCreationMenu = new QMenu(tr("&Drawingtools"), this); + toolCreationMenu->addAction(actionCreateCircleTool); + toolCreationMenu->addAction(actionCreateFloodFillTool); + toolCreationMenu->addAction(actionCreateLineTool); + toolCreationMenu->addAction(actionCreatePenTool); + toolCreationMenu->addAction(actionCreatePlainTool); + toolCreationMenu->addAction(actionCreatePolygonTool); + toolCreationMenu->addAction(actionCreateRectangleTool); - //Attach all Tool Setting Actions - toolSettingsMenu = new QMenu(tr("&Toolsettings"), this); - toolSettingsMenu->addAction(actionSetWidth); - toolSettingsMenu->addAction(actionSetInnerAlpha); + //Attach all Tool Setting Actions + toolSettingsMenu = new QMenu(tr("&Toolsettings"), this); + toolSettingsMenu->addAction(actionSetWidth); + toolSettingsMenu->addAction(actionSetInnerAlpha); - //Attach all Tool Options - toolMenu = new QMenu(tr("&Tools"), this); - toolMenu->addMenu(toolCreationMenu); - toolMenu->addMenu(toolSettingsMenu); - toolMenu->addSeparator(); - toolMenu->addMenu(colorMenu); + //Attach all Tool Options + toolMenu = new QMenu(tr("&Tools"), this); + toolMenu->addMenu(toolCreationMenu); + toolMenu->addMenu(toolSettingsMenu); + toolMenu->addSeparator(); + toolMenu->addMenu(colorMenu); // Attach all actions to Options optionMenu = new QMenu(tr("&Options"), this); - optionMenu->addMenu(layerMenu); - optionMenu->addMenu(toolMenu); - optionMenu->addSeparator(); - optionMenu->addMenu(renderMenu); + optionMenu->addMenu(layerMenu); + optionMenu->addMenu(toolMenu); + optionMenu->addSeparator(); + optionMenu->addMenu(renderMenu); // Attach all actions to Help helpMenu = new QMenu(tr("&Help"), this); @@ -579,63 +579,63 @@ void IntelliPhotoGui::createGui(){ // create Gui elements paintingArea = new PaintingArea(); - paintingArea->DummyGui = this; + paintingArea->DummyGui = this; - preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); CircleButton = new QPushButton(); - CircleButton->setFixedSize(Buttonsize); - CircleButton->setIcon(preview); - CircleButton->setIconSize(Buttonsize); + CircleButton->setFixedSize(Buttonsize); + CircleButton->setIcon(preview); + CircleButton->setIconSize(Buttonsize); CircleButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg"); FloodFillButton = new QPushButton(); FloodFillButton->setFixedSize(Buttonsize); - FloodFillButton->setIcon(preview); + FloodFillButton->setIcon(preview); FloodFillButton->setIconSize(Buttonsize); FloodFillButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); LineButton = new QPushButton(); LineButton->setFixedSize(Buttonsize); - LineButton->setIcon(preview); + LineButton->setIcon(preview); LineButton->setIconSize(Buttonsize); LineButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg"); PenButton = new QPushButton(); PenButton->setFixedSize(Buttonsize); - PenButton->setIcon(preview); + PenButton->setIcon(preview); PenButton->setIconSize(Buttonsize); PenButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg"); PlainButton = new QPushButton(); PlainButton->setFixedSize(Buttonsize); - PlainButton->setIcon(preview); + PlainButton->setIcon(preview); PlainButton->setIconSize(Buttonsize); PlainButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg"); PolygonButton = new QPushButton(); PolygonButton->setFixedSize(Buttonsize); - PolygonButton->setIcon(preview); + PolygonButton->setIcon(preview); PolygonButton->setIconSize(Buttonsize); PolygonButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg"); RectangleButton = new QPushButton(); RectangleButton->setFixedSize(Buttonsize); - RectangleButton->setIcon(preview); + RectangleButton->setIcon(preview); RectangleButton->setIconSize(Buttonsize); RectangleButton->setCheckable(true); WidthLine = new QLabel(); WidthLine->setText("Width"); - WidthLine->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); + WidthLine->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineWidth = new QLineEdit(); - EditLineWidth->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); + EditLineWidth->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineWidth->setText("5"); ValidatorLineWidth = new QIntValidator(); ValidatorLineWidth->setTop(99); @@ -644,10 +644,10 @@ void IntelliPhotoGui::createGui(){ innerAlphaLine = new QLabel(); innerAlphaLine->setText("Inner Alpha"); - innerAlphaLine->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); + innerAlphaLine->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineInnerAlpha = new QLineEdit(); - EditLineInnerAlpha->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); + EditLineInnerAlpha->setFixedSize(Buttonsize.width()*2,(Buttonsize.height()*2)/3); EditLineInnerAlpha->setText("255"); ValidatorInnerAlpha = new QIntValidator(); ValidatorInnerAlpha->setTop(999); @@ -655,87 +655,87 @@ void IntelliPhotoGui::createGui(){ EditLineInnerAlpha->setValidator(ValidatorInnerAlpha); FirstColorButton = new QPushButton(); - FirstColorButton->setFixedSize(Buttonsize); + FirstColorButton->setFixedSize(Buttonsize); SecondColorButton = new QPushButton(); - SecondColorButton->setFixedSize(Buttonsize); + SecondColorButton->setFixedSize(Buttonsize); - preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png"); + preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png"); SwitchColorButton = new QPushButton(); - SwitchColorButton->setFixedSize(Buttonsize.width()*2,Buttonsize.height()); - SwitchColorButton->setIcon(preview); - SwitchColorButton->setIconSize(QSize(Buttonsize.width()*2,Buttonsize.height())); + SwitchColorButton->setFixedSize(Buttonsize.width()*2,Buttonsize.height()); + SwitchColorButton->setIcon(preview); + SwitchColorButton->setIconSize(QSize(Buttonsize.width()*2,Buttonsize.height())); ActiveLayerLine = new QLabel(); - QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); + QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); - ActiveLayerLine->setFixedSize(Buttonsize.width()*2+10,(Buttonsize.height()*2)/3); + ActiveLayerLine->setFixedSize(Buttonsize.width()*2+10,(Buttonsize.height()*2)/3); - IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); - if(activePicture){ - preview = preview.fromImage(activePicture->getImageData()); - }else{ - QImage tmp(1,1,QImage::Format_ARGB32); - tmp.fill(Qt::transparent); - preview = preview.fromImage(tmp); - } + IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); + if(activePicture) { + preview = preview.fromImage(activePicture->getImageData()); + }else{ + QImage tmp(1,1,QImage::Format_ARGB32); + tmp.fill(Qt::transparent); + preview = preview.fromImage(tmp); + } - ActiveLayerImageLabel = new QLabel(); - ActiveLayerImageLabel->setFixedSize(Buttonsize*2); - ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); + ActiveLayerImageLabel = new QLabel(); + ActiveLayerImageLabel->setFixedSize(Buttonsize*2); + ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); // set gui elements mainLayout->addWidget(paintingArea,1,1,20,1); - mainLayout->addWidget(CircleButton,1,2,1,1); - mainLayout->addWidget(FloodFillButton,1,3,1,1); - mainLayout->addWidget(LineButton,2,2,1,1); - mainLayout->addWidget(PenButton,2,3,1,1); - mainLayout->addWidget(PlainButton,3,2,1,1); - mainLayout->addWidget(PolygonButton,3,3,1,1); - mainLayout->addWidget(RectangleButton,4,2,1,1); - mainLayout->addWidget(WidthLine,5,2,1,2); - mainLayout->addWidget(EditLineWidth,6,2,1,2); - mainLayout->addWidget(innerAlphaLine,7,2,1,2); - mainLayout->addWidget(EditLineInnerAlpha,8,2,1,2); - mainLayout->addWidget(FirstColorButton,9,2,1,1); - mainLayout->addWidget(SecondColorButton,9,3,1,1); - mainLayout->addWidget(SwitchColorButton,10,2,1,2); - mainLayout->addWidget(ActiveLayerLine,11,2,1,2); - mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2); - mainLayout->setHorizontalSpacing(0); + mainLayout->addWidget(CircleButton,1,2,1,1); + mainLayout->addWidget(FloodFillButton,1,3,1,1); + mainLayout->addWidget(LineButton,2,2,1,1); + mainLayout->addWidget(PenButton,2,3,1,1); + mainLayout->addWidget(PlainButton,3,2,1,1); + mainLayout->addWidget(PolygonButton,3,3,1,1); + mainLayout->addWidget(RectangleButton,4,2,1,1); + mainLayout->addWidget(WidthLine,5,2,1,2); + mainLayout->addWidget(EditLineWidth,6,2,1,2); + mainLayout->addWidget(innerAlphaLine,7,2,1,2); + mainLayout->addWidget(EditLineInnerAlpha,8,2,1,2); + mainLayout->addWidget(FirstColorButton,9,2,1,1); + mainLayout->addWidget(SecondColorButton,9,3,1,1); + mainLayout->addWidget(SwitchColorButton,10,2,1,2); + mainLayout->addWidget(ActiveLayerLine,11,2,1,2); + mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2); + mainLayout->setHorizontalSpacing(0); } void IntelliPhotoGui::setIntelliStyle(){ // Set the title setWindowTitle("IntelliPhoto Prototype"); - Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); - Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); - Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); - Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); - Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); + Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); + Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); + Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); + Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); + Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); // Set style sheet - this->setStyleSheet("background-color:rgb(64,64,64)"); - this->menuBar()->setPalette(Palette); - this->fileMenu->setPalette(Palette); - this->saveAsMenu->setPalette(Palette); - this->optionMenu->setPalette(Palette); - this->helpMenu->setPalette(Palette); - this->renderMenu->setPalette(Palette); - this->toolMenu->setPalette(Palette); - this->layerMenu->setPalette(Palette); - this->colorMenu->setPalette(Palette); - this->toolCreationMenu->setPalette(Palette); - this->toolSettingsMenu->setPalette(Palette); + this->setStyleSheet("background-color:rgb(64,64,64)"); + this->menuBar()->setPalette(Palette); + this->fileMenu->setPalette(Palette); + this->saveAsMenu->setPalette(Palette); + this->optionMenu->setPalette(Palette); + this->helpMenu->setPalette(Palette); + this->renderMenu->setPalette(Palette); + this->toolMenu->setPalette(Palette); + this->layerMenu->setPalette(Palette); + this->colorMenu->setPalette(Palette); + this->toolCreationMenu->setPalette(Palette); + this->toolSettingsMenu->setPalette(Palette); - this->WidthLine->setPalette(Palette); - this->EditLineWidth->setPalette(Palette); - this->innerAlphaLine->setPalette(Palette); - this->EditLineInnerAlpha->setPalette(Palette); - this->ActiveLayerLine->setPalette(Palette); + this->WidthLine->setPalette(Palette); + this->EditLineWidth->setPalette(Palette); + this->innerAlphaLine->setPalette(Palette); + this->EditLineInnerAlpha->setPalette(Palette); + this->ActiveLayerLine->setPalette(Palette); QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); @@ -796,27 +796,27 @@ void IntelliPhotoGui::setDefaultToolValue(){ } void IntelliPhotoGui::setToolWidth(int value){ - if(value < 1){ - value = 1; - }else if(value > 50){ - value = 50; - } - EditLineWidth->setText(QString("%1").arg(value)); + if(value < 1) { + value = 1; + }else if(value > 50) { + value = 50; + } + EditLineWidth->setText(QString("%1").arg(value)); } void IntelliPhotoGui::UpdateGui(){ - QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); + QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); - IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); - if(activePicture){ - preview = preview.fromImage(activePicture->getImageData()); - }else{ - QImage tmp(1,1,QImage::Format_ARGB32); - tmp.fill(Qt::transparent); - preview = preview.fromImage(tmp); - } - ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); + IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); + if(activePicture) { + preview = preview.fromImage(activePicture->getImageData()); + }else{ + QImage tmp(1,1,QImage::Format_ARGB32); + tmp.fill(Qt::transparent); + preview = preview.fromImage(tmp); + } + ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize*2)); string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); diff --git a/src/Image/IntelliImage.cpp b/src/Image/IntelliImage.cpp index 0fa97b2..aa12450 100644 --- a/src/Image/IntelliImage.cpp +++ b/src/Image/IntelliImage.cpp @@ -3,15 +3,15 @@ #include IntelliImage::IntelliImage(int width, int height, bool fastRendererOn) - : imageData(QSize(width, height), fastRendererOn ? QImage::Format_Indexed8 : QImage::Format_ARGB32){ - if(fastRendererOn){ - imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } - imageData.fill(QColor(255,255,255,255)); - if(fastRendererOn){ - imageData = imageData.convertToFormat(QImage::Format_Indexed8); - } - this->fastRenderering = fastRendererOn; + : imageData(QSize(width, height), fastRendererOn ? QImage::Format_Indexed8 : QImage::Format_ARGB32){ + if(fastRendererOn) { + imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } + imageData.fill(QColor(255,255,255,255)); + if(fastRendererOn) { + imageData = imageData.convertToFormat(QImage::Format_Indexed8); + } + this->fastRenderering = fastRendererOn; } @@ -30,7 +30,7 @@ bool IntelliImage::loadImage(const QString &filePath){ // scaled Image to size of Layer loadedImage = loadedImage.scaled(imageData.size(),Qt::IgnoreAspectRatio); - imageData = loadedImage.convertToFormat(fastRenderering ? QImage::Format_Indexed8 : QImage::Format_ARGB32); + imageData = loadedImage.convertToFormat(fastRenderering ? QImage::Format_Indexed8 : QImage::Format_ARGB32); return true; } @@ -46,19 +46,19 @@ void IntelliImage::resizeImage(QImage*image, const QSize &newSize){ // Draw the image QPainter painter(&newImage); painter.drawImage(QPoint(0, 0), *image); - if(fastRenderering){ - *image = newImage.convertToFormat(QImage::Format_Indexed8); - } - else{ - *image = newImage; - } + if(fastRenderering) { + *image = newImage.convertToFormat(QImage::Format_Indexed8); + } + else{ + *image = newImage; + } } void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - // Used to draw on the widget + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + // Used to draw on the widget QPainter painter(&imageData); // Set the current settings for the pen @@ -66,32 +66,32 @@ void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){ // Draw a line from the last registered point to the current painter.drawPoint(p1); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& penWidth){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - // Used to draw on the widget + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + // Used to draw on the widget QPainter painter(&imageData); // Set the current settings for the pen painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); // Draw a line from the last registered point to the current painter.drawPoint(p1); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - // Used to draw on the widget + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + // Used to draw on the widget QPainter painter(&imageData); // Set the current settings for the pen @@ -99,53 +99,53 @@ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& co // Draw a line from the last registered point to the current painter.drawLine(p1, p2); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } void IntelliImage::drawPlain(const QColor& color){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - imageData.fill(color); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + imageData.fill(color); + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } QColor IntelliImage::getPixelColor(QPoint& point){ - if(fastRenderering){ - QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32); - return copy.pixelColor(point); - } - return imageData.pixelColor(point); + if(fastRenderering) { + QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32); + return copy.pixelColor(point); + } + return imageData.pixelColor(point); } QImage IntelliImage::getImageData(){ - QImage copy = imageData; - if(fastRenderering){ - copy = copy.convertToFormat(QImage::Format_ARGB32); - } - return copy; + QImage copy = imageData; + if(fastRenderering) { + copy = copy.convertToFormat(QImage::Format_ARGB32); + } + return copy; } void IntelliImage::setImageData(const QImage& newData){ - imageData = newData; - if(fastRenderering){ - this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); - } - else { - this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } + imageData = newData; + if(fastRenderering) { + this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); + } + else { + this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } } void IntelliImage::updateRendererSetting(bool fastRendererOn){ - this->fastRenderering = fastRendererOn; - if(fastRenderering){ - this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); - } - else { - this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } + this->fastRenderering = fastRendererOn; + if(fastRenderering) { + this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); + } + else { + this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } } diff --git a/src/Image/IntelliRasterImage.cpp b/src/Image/IntelliRasterImage.cpp index 8872cff..b055f3f 100644 --- a/src/Image/IntelliRasterImage.cpp +++ b/src/Image/IntelliRasterImage.cpp @@ -4,9 +4,9 @@ #include IntelliRasterImage::IntelliRasterImage(int width, int height, bool fastRendererOn) - : IntelliImage(width, height, fastRendererOn){ - TypeOfImage = IntelliImage::ImageType::RASTERIMAGE; - this->fastRenderering = fastRendererOn; + : IntelliImage(width, height, fastRendererOn){ + TypeOfImage = IntelliImage::ImageType::RASTERIMAGE; + this->fastRenderering = fastRendererOn; } IntelliRasterImage::~IntelliRasterImage(){ @@ -30,9 +30,9 @@ QImage IntelliRasterImage::getDisplayable(int alpha){ QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){ QImage copy = imageData; - if(fastRenderering){ - copy = copy.convertToFormat(QImage::Format_ARGB32); - } + if(fastRenderering) { + copy = copy.convertToFormat(QImage::Format_ARGB32); + } for(int y = 0; y IntelliShapedImage::IntelliShapedImage(int width, int height, bool fastRendererOn) - : IntelliRasterImage(width, height, fastRendererOn){ - TypeOfImage = IntelliImage::ImageType::SHAPEDIMAGE; - this->fastRenderering = fastRendererOn; + : IntelliRasterImage(width, height, fastRendererOn){ + TypeOfImage = IntelliImage::ImageType::SHAPEDIMAGE; + this->fastRenderering = fastRendererOn; } IntelliShapedImage::~IntelliShapedImage(){ @@ -27,9 +27,9 @@ IntelliImage* IntelliShapedImage::getDeepCopy(){ } void IntelliShapedImage::calculateVisiblity(){ - if(fastRenderering){ - this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } + if(fastRenderering) { + this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } if(polygonData.size()<=2) { QColor clr; @@ -40,9 +40,9 @@ void IntelliShapedImage::calculateVisiblity(){ imageData.setPixelColor(x,y,clr); } } - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } return; } QColor clr; @@ -59,16 +59,16 @@ void IntelliShapedImage::calculateVisiblity(){ imageData.setPixelColor(x,y,clr); } } - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){ QImage copy = imageData; - if(fastRenderering){ - copy = copy.convertToFormat(QImage::Format_ARGB32); - } + if(fastRenderering) { + copy = copy.convertToFormat(QImage::Format_ARGB32); + } for(int y = 0; yfastRenderering = Updatedsetting; + this->fastRenderering = Updatedsetting; } bool IntelliRenderSettings::isFastRenderering(){ - return fastRenderering; + return fastRenderering; } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 779c2bb..7b93abc 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -43,12 +43,12 @@ PaintingArea::~PaintingArea(){ } void PaintingArea::setRenderSettings(bool isFastRenderingOn){ - if(isFastRenderingOn != renderSettings.isFastRenderering()){ - renderSettings.setFastRendering(isFastRenderingOn); - for(auto& layer : layerBundle){ - layer.image->updateRendererSetting(isFastRenderingOn); - } - } + if(isFastRenderingOn != renderSettings.isFastRenderering()) { + renderSettings.setFastRendering(isFastRenderingOn); + for(auto& layer : layerBundle) { + layer.image->updateRendererSetting(isFastRenderingOn); + } + } } void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){ @@ -68,10 +68,10 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff newLayer.height = height; newLayer.widthOffset = widthOffset; newLayer.heightOffset = heightOffset; - if(type==IntelliImage::ImageType::RASTERIMAGE) { - newLayer.image = new IntelliRasterImage(width,height,renderSettings.isFastRenderering()); - }else if(type==IntelliImage::ImageType::SHAPEDIMAGE) { - newLayer.image = new IntelliShapedImage(width, height, renderSettings.isFastRenderering()); + if(type==IntelliImage::ImageType::RASTERIMAGE) { + newLayer.image = new IntelliRasterImage(width,height,renderSettings.isFastRenderering()); + }else if(type==IntelliImage::ImageType::SHAPEDIMAGE) { + newLayer.image = new IntelliShapedImage(width, height, renderSettings.isFastRenderering()); } newLayer.alpha = 255; this->layerBundle.push_back(newLayer); @@ -83,12 +83,12 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff void PaintingArea::deleteLayer(int idx){ if(idx(layerBundle.size())) { this->layerBundle.erase(layerBundle.begin()+idx); - if(activeLayer>=idx) { + if(activeLayer>=idx) { activeLayer--; } - if(activeLayer < 0 && layerBundle.size()){ - activeLayer=0; - } + if(activeLayer < 0 && layerBundle.size()) { + activeLayer=0; + } } } @@ -265,9 +265,9 @@ std::vector PaintingArea::getPolygonDataOfRealLayer(){ // left button and if so store the current position // Set that we are currently drawing void PaintingArea::mousePressEvent(QMouseEvent*event){ - if(this->activeLayer < 0){ - return; - } + if(this->activeLayer < 0) { + return; + } if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; @@ -284,9 +284,9 @@ void PaintingArea::mousePressEvent(QMouseEvent*event){ // we call the drawline function which draws a line // from the last position to the current void PaintingArea::mouseMoveEvent(QMouseEvent*event){ - if(this->activeLayer < 0){ - return; - } + if(this->activeLayer < 0) { + return; + } if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; @@ -297,9 +297,9 @@ void PaintingArea::mouseMoveEvent(QMouseEvent*event){ // If the button is released we set variables to stop drawing void PaintingArea::mouseReleaseEvent(QMouseEvent*event){ - if(this->activeLayer < 0) - return; - if(Tool == nullptr) + if(this->activeLayer < 0) + return; + if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; int y = event->y()-layerBundle[static_cast(activeLayer)].heightOffset; @@ -312,9 +312,9 @@ void PaintingArea::mouseReleaseEvent(QMouseEvent*event){ } void PaintingArea::wheelEvent(QWheelEvent*event){ - if(this->activeLayer < 0) - return; - if(this->Tool != nullptr) { + if(this->activeLayer < 0) + return; + if(this->Tool != nullptr) { QPoint numDegrees = event->angleDelta() / 8; if(!numDegrees.isNull()) { QPoint numSteps = numDegrees / 15; @@ -405,9 +405,9 @@ bool PaintingArea::createTempTopLayer(int idx){ newLayer.widthOffset = layerBundle[static_cast(idx)].widthOffset; newLayer.image = layerBundle[static_cast(idx)].image->getDeepCopy(); layerBundle.insert(layerBundle.begin()+idx+1,newLayer); - return true; + return true; } - return false; + return false; } IntelliTool* PaintingArea::copyActiveTool(){ @@ -428,8 +428,8 @@ int PaintingArea::getNumberOfActiveLayer(){ } IntelliImage* PaintingArea::getImageOfActiveLayer(){ - if(activeLayer<0){ - return nullptr; - } + if(activeLayer<0) { + return nullptr; + } return layerBundle[activeLayer].image; } diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index fad58dd..95eef55 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -43,142 +43,142 @@ Q_OBJECT friend IntelliTool; friend IntelliPhotoGui; public: - /*! - * \brief PaintingArea is the constructor of the PaintingArea class, which initiates the working environment - * \param maxWidth - The maximum amount of pixles that are inside painting area from left to right (default=600px) - * \param maxHeight - The maximum amount of pixles that are inside painting area from top to bottom (default=600px) - * \param parent - The parent window of the main window (default=nullptr) - */ - PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent = nullptr); +/*! + * \brief PaintingArea is the constructor of the PaintingArea class, which initiates the working environment + * \param maxWidth - The maximum amount of pixles that are inside painting area from left to right (default=600px) + * \param maxHeight - The maximum amount of pixles that are inside painting area from top to bottom (default=600px) + * \param parent - The parent window of the main window (default=nullptr) + */ +PaintingArea(int maxWidth=600, int maxHeight=600, QWidget*parent = nullptr); - /*! - * \brief This deconstructor is used to clear up the memory and remove the currently active window - */ - ~PaintingArea() override; +/*! + * \brief This deconstructor is used to clear up the memory and remove the currently active window + */ +~PaintingArea() override; - // Handles all events +// Handles all events - /*! - * \brief setRenderSettings updates all Images to the new Rendersetting. - * \param isFastRenderingOn is the new given flag for the FastRenderer. - */ - void setRenderSettings(bool isFastRenderingOn); +/*! + * \brief setRenderSettings updates all Images to the new Rendersetting. + * \param isFastRenderingOn is the new given flag for the FastRenderer. + */ +void setRenderSettings(bool isFastRenderingOn); - /*! - * \brief The open method is used for loading a picture into the current layer - * \param fileName - Path and filename which are used to determine where the to-be-opened file is stored - * \return Returns a boolean variable whether the file was successfully opened or not - */ - bool open(const QString &filePath); - /*! - * \brief The save method is used for exporting the current project as one picture - * \param fileName - * \param fileFormat - * \return Returns a boolean variable, true if the file was saved successfully, false if not - */ - bool save(const QString &filePath, const char *fileFormat); +/*! + * \brief The open method is used for loading a picture into the current layer + * \param fileName - Path and filename which are used to determine where the to-be-opened file is stored + * \return Returns a boolean variable whether the file was successfully opened or not + */ +bool open(const QString &filePath); +/*! + * \brief The save method is used for exporting the current project as one picture + * \param fileName + * \param fileFormat + * \return Returns a boolean variable, true if the file was saved successfully, false if not + */ +bool save(const QString &filePath, const char*fileFormat); - /*! - * \brief The addLayer adds a layer to the current project/ painting area - * \param width - Width of the layer in pixles - * \param height - Height of the layer in pixles - * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles - * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles - * \param type - Defining the ImageType of the new layer - * \return Returns the number of layers in the project - */ - int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); - /*! - * \brief The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer stack - * \param idx - Index of the position the new layer should be added - * \param width - Width of the layer in pixles - * \param height - Height of the layer in pixles - * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles - * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles - * \param type - Defining the ImageType of the new layer - * \return Returns the id of the layer position - */ - int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); - /*! - * \brief The deleteLayer method removes a layer at a given idx - * \param idx - The index of the layer to be removed - */ - void deleteLayer(int idx); - /*! - * \brief The setLayerToActive method marks a specific layer as active - * \param idx - The index of the layer to be active - */ - void setLayerActive(int idx); - /*! - * \brief The setAlphaOfLayer method sets the alpha value of a specific layer - * \param idx - The index of the layer where the change should be applied - * \param alpha - New alpha value of the layer - */ - void setLayerAlpha(int idx, int alpha); - /*! - * \brief The floodFill method fills a the active layer with a given color - * \param r - Red value of the color the layer should be filled with - * \param g - Green value of the color the layer should be filled with - * \param b - Blue value of the color the layer should be filled with - * \param a - Alpha value of the color the layer should be filled with - */ - void floodFill(int r, int g, int b, int a); - /*! - * \brief The movePositionActive method moves the active layer to certain position - * \param x - The x value the new center of the layer should be at - * \param y - The y value the new center of the layer should be at - */ - void movePositionActive(int x, int y); - /*! - * \brief The moveActiveLayer moves the active layer to a specific position in the layer stack - * \param idx - The index of the new position the layer should be in - */ - void moveActiveLayer(int idx); +/*! + * \brief The addLayer adds a layer to the current project/ painting area + * \param width - Width of the layer in pixles + * \param height - Height of the layer in pixles + * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles + * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles + * \param type - Defining the ImageType of the new layer + * \return Returns the number of layers in the project + */ +int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); +/*! + * \brief The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer stack + * \param idx - Index of the position the new layer should be added + * \param width - Width of the layer in pixles + * \param height - Height of the layer in pixles + * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles + * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles + * \param type - Defining the ImageType of the new layer + * \return Returns the id of the layer position + */ +int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); +/*! + * \brief The deleteLayer method removes a layer at a given idx + * \param idx - The index of the layer to be removed + */ +void deleteLayer(int idx); +/*! + * \brief The setLayerToActive method marks a specific layer as active + * \param idx - The index of the layer to be active + */ +void setLayerActive(int idx); +/*! + * \brief The setAlphaOfLayer method sets the alpha value of a specific layer + * \param idx - The index of the layer where the change should be applied + * \param alpha - New alpha value of the layer + */ +void setLayerAlpha(int idx, int alpha); +/*! + * \brief The floodFill method fills a the active layer with a given color + * \param r - Red value of the color the layer should be filled with + * \param g - Green value of the color the layer should be filled with + * \param b - Blue value of the color the layer should be filled with + * \param a - Alpha value of the color the layer should be filled with + */ +void floodFill(int r, int g, int b, int a); +/*! + * \brief The movePositionActive method moves the active layer to certain position + * \param x - The x value the new center of the layer should be at + * \param y - The y value the new center of the layer should be at + */ +void movePositionActive(int x, int y); +/*! + * \brief The moveActiveLayer moves the active layer to a specific position in the layer stack + * \param idx - The index of the new position the layer should be in + */ +void moveActiveLayer(int idx); - //change properties of colorPicker - /*! - * \brief The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color - */ - void colorPickerSetFirstColor(); - /*! - * \brief The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color - */ - void colorPickerSetSecondColor(); - /*! - * \brief The colorPickerSwitchColor swaps the primary color with the secondary drawing color - */ - void colorPickerSwapColors(); +//change properties of colorPicker +/*! + * \brief The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color + */ +void colorPickerSetFirstColor(); +/*! + * \brief The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color + */ +void colorPickerSetSecondColor(); +/*! + * \brief The colorPickerSwitchColor swaps the primary color with the secondary drawing color + */ +void colorPickerSwapColors(); - // Create tools - void createPenTool(); - void createPlainTool(); - void createLineTool(); - void createRectangleTool(); - void createCircleTool(); - void createPolygonTool(); - void createFloodFillTool(); +// Create tools +void createPenTool(); +void createPlainTool(); +void createLineTool(); +void createRectangleTool(); +void createCircleTool(); +void createPolygonTool(); +void createFloodFillTool(); - /*! - * \brief The getWidthOfActive gets the horizontal dimensions of the active layer - * \return Returns the horizontal pixle count of the active layer - */ - int getWidthOfActive(); - /*! - * \brief The getHeightOfActive gets the vertical dimensions of the active layer - * \return Returns the vertical pixle count of the active layer - */ - int getHeightOfActive(); +/*! + * \brief The getWidthOfActive gets the horizontal dimensions of the active layer + * \return Returns the horizontal pixle count of the active layer + */ +int getWidthOfActive(); +/*! + * \brief The getHeightOfActive gets the vertical dimensions of the active layer + * \return Returns the vertical pixle count of the active layer + */ +int getHeightOfActive(); - IntelliImage::ImageType getTypeOfImageRealLayer(); +IntelliImage::ImageType getTypeOfImageRealLayer(); - std::vector getPolygonDataOfRealLayer(); +std::vector getPolygonDataOfRealLayer(); - int getNumberOfActiveLayer(); +int getNumberOfActiveLayer(); - IntelliImage* getImageOfActiveLayer(); +IntelliImage* getImageOfActiveLayer(); - IntelliToolsettings Toolsettings; - IntelliColorPicker colorPicker; +IntelliToolsettings Toolsettings; +IntelliColorPicker colorPicker; public slots: // Events to handle @@ -226,8 +226,8 @@ void drawLayers(bool forSaving=false); void resizeLayer(QImage*image_res, const QSize &newSize); - // Helper for Tool - bool createTempTopLayer(int idx); +// Helper for Tool +bool createTempTopLayer(int idx); }; #endif diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 520ad1c..a9178e0 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -24,10 +24,10 @@ void IntelliTool::onMouseRightReleased(int x, int y){ } void IntelliTool::onMouseLeftPressed(int x, int y){ - this->isDrawing=this->createToolLayer(); - if(isDrawing){ - Canvas->image->calculateVisiblity(); - } + this->isDrawing=this->createToolLayer(); + if(isDrawing) { + Canvas->image->calculateVisiblity(); + } } void IntelliTool::onMouseLeftReleased(int x, int y){ @@ -45,27 +45,27 @@ 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()); + //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(Area->activeLayer)]; - this->Canvas=&Area->layerBundle[static_cast(Area->activeLayer+1)]; - return true; - } - return false; + if(Area->createTempTopLayer(Area->activeLayer)) { + this->activeLayer=&Area->layerBundle[static_cast(Area->activeLayer)]; + this->Canvas=&Area->layerBundle[static_cast(Area->activeLayer+1)]; + return true; + } + return false; } void IntelliTool::mergeToolLayer(){ QColor clr_0; QColor clr_1; - QImage updatedImage = activeLayer->image->getImageData(); + QImage updatedImage = activeLayer->image->getImageData(); for(int y=0; yheight; y++) { - for(int x=0; xwidth; x++) { - clr_0=updatedImage.pixelColor(x,y); + for(int x=0; xwidth; x++) { + clr_0=updatedImage.pixelColor(x,y); clr_1=Canvas->image->imageData.pixelColor(x,y); float t = static_cast(clr_1.alpha())/255.f; int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); @@ -77,11 +77,11 @@ void IntelliTool::mergeToolLayer(){ clr_0.setBlue(b); clr_0.setAlpha(a); - updatedImage.setPixelColor(x, y, clr_0); + updatedImage.setPixelColor(x, y, clr_0); } } - activeLayer->image->setImageData(updatedImage); - Area->DummyGui->UpdateGui(); + activeLayer->image->setImageData(updatedImage); + Area->DummyGui->UpdateGui(); } void IntelliTool::deleteToolLayer(){ diff --git a/src/Tool/IntelliToolCircle.cpp b/src/Tool/IntelliToolCircle.cpp index cde5da6..d2a09d1 100644 --- a/src/Tool/IntelliToolCircle.cpp +++ b/src/Tool/IntelliToolCircle.cpp @@ -26,7 +26,7 @@ void IntelliToolCircle::drawCircle(int radius){ } //TODO implement circle drawing algorithm bresenham - radius = static_cast(radius +(Toolsettings->getLineWidth()/2.)); + radius = static_cast(radius +(Toolsettings->getLineWidth()/2.)); yMin = (centerPoint.y()-radius); yMax = (centerPoint.y()+radius); for(int i=yMin; i<=yMax; i++) { @@ -56,12 +56,12 @@ 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); - int radius = 1; - drawCircle(radius); - Canvas->image->calculateVisiblity(); - } + if(this->isDrawing) { + this->centerPoint=QPoint(x,y); + int radius = 1; + drawCircle(radius); + Canvas->image->calculateVisiblity(); + } } void IntelliToolCircle::onMouseLeftReleased(int x, int y){ diff --git a/src/Tool/IntelliToolLine.cpp b/src/Tool/IntelliToolLine.cpp index 45194de..120d3a2 100644 --- a/src/Tool/IntelliToolLine.cpp +++ b/src/Tool/IntelliToolLine.cpp @@ -49,7 +49,7 @@ void IntelliToolLine::onMouseMoved(int x, int y){ QPoint p2 =lineStartingPoint.x() < next.x() ? next : lineStartingPoint; int m = static_cast(static_cast(p2.y()-p1.y())/static_cast(p2.x()-p1.x())+0.5f); int c = lineStartingPoint.y()-lineStartingPoint.x()*m; - //TODO implement dotted algorithm + //TODO implement dotted algorithm break; } } diff --git a/src/Tool/IntelliToolRectangle.cpp b/src/Tool/IntelliToolRectangle.cpp index 4fe86f7..29fa038 100644 --- a/src/Tool/IntelliToolRectangle.cpp +++ b/src/Tool/IntelliToolRectangle.cpp @@ -58,6 +58,6 @@ void IntelliToolRectangle::onMouseMoved(int x, int y){ } void IntelliToolRectangle::onWheelScrolled(int value){ - IntelliTool::onWheelScrolled(value); - Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value); + IntelliTool::onWheelScrolled(value); + Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value); } diff --git a/src/main.cpp b/src/main.cpp index d6a8dd3..913370c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,11 +8,11 @@ int main(int argc, char*argv[]){ // The main application QApplication app(argc, argv); - IntelliInputDialog* InputDialog; + IntelliInputDialog* InputDialog; // Create and open the main window - IntelliPhotoGui window(InputDialog); - window.show(); + IntelliPhotoGui window(InputDialog); + window.show(); return app.exec(); } From 6fec7c26bf8b3c8bad3b1aeddefe2ce3d68b15d2 Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 13 Jan 2020 19:59:30 +0100 Subject: [PATCH 14/97] Uncrustified Files --- src/GUI/IntelliPhotoGui.cpp | 344 ++++++++++---------- src/Image/IntelliImage.cpp | 136 ++++---- src/Image/IntelliRasterImage.cpp | 18 +- src/Image/IntelliShapedImage.cpp | 36 +- src/IntelliHelper/IntelliRenderSettings.cpp | 4 +- src/Layer/PaintingArea.cpp | 62 ++-- src/Layer/PaintingArea.h | 250 +++++++------- src/Tool/IntelliTool.cpp | 32 +- src/Tool/IntelliToolCircle.cpp | 14 +- src/Tool/IntelliToolLine.cpp | 2 +- 10 files changed, 449 insertions(+), 449 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 1c4e009..4e506da 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -46,10 +46,10 @@ void IntelliPhotoGui::slotOpen(){ // If we have a file name load the image and place // it in the paintingArea - if (!fileName.isEmpty()){ + if (!fileName.isEmpty()) { paintingArea->open(fileName); - UpdateGui(); - } + UpdateGui(); + } } } @@ -73,19 +73,19 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - QInputDialog Input; - Input.setPalette(Palette); + QInputDialog Input; + Input.setPalette(Palette); - int width = Input.getInt(this, tr("New Layer"), - tr("Width:"), - 200,1, 500, 1, &ok1); + int width = Input.getInt(this, tr("New Layer"), + tr("Width:"), + 200,1, 500, 1, &ok1); int height = QInputDialog::getInt(this, tr("New Layer"), tr("Height:"), 200,1, 500, 1, &ok2); // Create New Layer - if (ok1&&ok2){ - paintingArea->addLayer(width,height,0,0); + if (ok1&&ok2) { + paintingArea->addLayer(width,height,0,0); UpdateGui(); } } @@ -100,10 +100,10 @@ void IntelliPhotoGui::slotDeleteLayer(){ // Define the standard Value, min, max, step and ok button int layerNumber = QInputDialog::getInt(this, tr("delete Layer"), tr("Number:"), - paintingArea->getNumberOfActiveLayer()+1,1, 501, 1, &ok); + paintingArea->getNumberOfActiveLayer()+1,1, 501, 1, &ok); // Create New Layer if (ok) { - paintingArea->deleteLayer(layerNumber-1); + paintingArea->deleteLayer(layerNumber-1); UpdateGui(); } } @@ -117,14 +117,14 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ // Define the standard Value, min, max, step and ok button int layer = QInputDialog::getInt(this, tr("Layer to set on"), tr("Layer:"), - 1,1,500,1, &ok1); + 1,1,500,1, &ok1); // "New Alpha" is the title of the window int alpha = QInputDialog::getInt(this, tr("New Alpha"), tr("Alpha:"), 255,0, 255, 1, &ok2); if (ok1&&ok2) { - paintingArea->setLayerAlpha(layer-1,alpha); + paintingArea->setLayerAlpha(layer-1,alpha); UpdateGui(); } } @@ -194,25 +194,25 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // "Layer to set on" is the title of the window // the next tr is the text to display - // Define the standard Value, min, max, step and ok button - int layer = QInputDialog::getInt(this, tr("Layer to set on"), - tr("Layer:"), - 1,1,500,1, &ok1); - if (ok1) + // Define the standard Value, min, max, step and ok button + int layer = QInputDialog::getInt(this, tr("Layer to set on"), + tr("Layer:"), + 1,1,500,1, &ok1); + if (ok1) { - paintingArea->setLayerActive(layer-1); + paintingArea->setLayerActive(layer-1); UpdateGui(); } } void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ - paintingArea->setRenderSettings(true); - UpdateGui(); + paintingArea->setRenderSettings(true); + UpdateGui(); } void IntelliPhotoGui::slotUpdateRenderSettingsOff(){ - paintingArea->setRenderSettings(false); - UpdateGui(); + paintingArea->setRenderSettings(false); + UpdateGui(); } void IntelliPhotoGui::slotSetFirstColor(){ @@ -269,7 +269,7 @@ void IntelliPhotoGui::slotCreateFloodFillTool(){ void IntelliPhotoGui::slotAboutDialog(){ // Window title and text to display QMessageBox::about(this, tr("About Painting"), - tr("

IntelliPhoto - A Pretty basic editor.


Developed by Team 7.")); + tr("

IntelliPhoto - A Pretty basic editor.


Developed by Team 7.")); } void IntelliPhotoGui::slotEnterPressed(){ @@ -296,13 +296,13 @@ void IntelliPhotoGui::slotResetTools(){ } void IntelliPhotoGui::slotSetWidth(){ - paintingArea->Toolsettings.setLineWidth(); - EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); + paintingArea->Toolsettings.setLineWidth(); + EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); } void IntelliPhotoGui::slotSetInnerAlpha(){ - paintingArea->Toolsettings.setInnerAlpha(); - EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); + paintingArea->Toolsettings.setInnerAlpha(); + EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); } // Define menu actions that call functions @@ -332,7 +332,7 @@ void IntelliPhotoGui::createActions(){ connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); // Attach each PNG in save Menu actionSaveAs.append(pngSaveAction); - pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S)); + pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S)); // Create exit action and tie to IntelliPhotoGui::close() actionExit = new QAction(tr("&Exit"), this); @@ -350,15 +350,15 @@ void IntelliPhotoGui::createActions(){ // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() actionDeleteLayer = new QAction(tr("&Delete Layer..."), this); - actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); + actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer())); actionSetActiveLayer = new QAction(tr("&set Active"), this); - actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); + actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer())); - actionSetActiveAlpha = new QAction(tr("&set Alpha"), this); - actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); + actionSetActiveAlpha = new QAction(tr("&set Alpha"), this); + actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha())); actionMovePositionUp = new QAction(tr("&move Up"), this); @@ -385,76 +385,76 @@ void IntelliPhotoGui::createActions(){ actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down)); connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown())); - //Create Update RenderSettings Actions here - actionUpdateRenderSettingsOn = new QAction(tr("&On"), this); - actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_A)); - connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn())); + //Create Update RenderSettings Actions here + actionUpdateRenderSettingsOn = new QAction(tr("&On"), this); + actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_A)); + connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn())); - actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this); - actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_D)); - connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff())); + actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this); + actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_D)); + connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff())); //Create Color Actions here actionColorPickerFirstColor = new QAction(tr("&Main"), this); - actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); + actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor())); connect(FirstColorButton, SIGNAL(clicked()), this, SLOT(slotSetFirstColor())); actionColorPickerSecondColor = new QAction(tr("&Secondary"), this); - actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M)); + actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M)); connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor())); connect(SecondColorButton, SIGNAL(clicked()), this, SLOT(slotSetSecondColor())); actionColorSwap = new QAction(tr("&Switch"), this); - actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S)); + actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S)); connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor())); connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor())); //Create Tool actions down here actionCreatePlainTool = new QAction(tr("&Plain"), this); - actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_P)); + actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_P)); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool())); actionCreatePenTool = new QAction(tr("&Pen"),this); - actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_S)); + actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_S)); connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool())); actionCreateLineTool = new QAction(tr("&Line"), this); - actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_L)); + actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_L)); connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool())); actionCreateCircleTool = new QAction(tr("&Circle"), this); - actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_C)); + actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_C)); connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool())); actionCreateRectangleTool = new QAction(tr("&Rectangle"), this); - actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_R)); + actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_R)); connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool())); actionCreatePolygonTool = new QAction(tr("&Polygon"), this); - actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_V)); + actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_V)); connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool())); actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this); - actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_F)); + actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_F)); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); // Create about action and tie to IntelliPhotoGui::about() actionAboutDialog = new QAction(tr("&About"), this); - actionAboutDialog->setShortcut(Qt::Key_F2); + actionAboutDialog->setShortcut(Qt::Key_F2); connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog())); // Create about Qt action and tie to IntelliPhotoGui::aboutQt() actionAboutQtDialog = new QAction(tr("About &Qt"), this); - actionAboutQtDialog->setShortcut(Qt::Key_F3); + actionAboutQtDialog->setShortcut(Qt::Key_F3); connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); @@ -481,13 +481,13 @@ void IntelliPhotoGui::createActions(){ connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool())); - actionSetWidth = new QAction(tr("&Set Width"),this); - actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W)); - connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth())); + actionSetWidth = new QAction(tr("&Set Width"),this); + actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W)); + connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth())); - actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this); - actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); - connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha())); + actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this); + actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); + connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha())); } // Create the menubar @@ -505,61 +505,61 @@ void IntelliPhotoGui::createMenus(){ fileMenu->addSeparator(); fileMenu->addAction(actionExit); - //Attach all actions to Render Settings - renderMenu = new QMenu(tr("&Fast Renderer"), this); - renderMenu->addAction(actionUpdateRenderSettingsOn); - renderMenu->addAction(actionUpdateRenderSettingsOff); + //Attach all actions to Render Settings + renderMenu = new QMenu(tr("&Fast Renderer"), this); + renderMenu->addAction(actionUpdateRenderSettingsOn); + renderMenu->addAction(actionUpdateRenderSettingsOff); - // Attach all actions to Layer - layerMenu = new QMenu(tr("&Layer"), this); - layerMenu->addAction(actionCreateNewLayer); - layerMenu->addSeparator(); - layerMenu->addAction(actionSetActiveAlpha); - layerMenu->addAction(actionSetActiveLayer); - layerMenu->addSeparator(); - layerMenu->addAction(actionMovePositionUp); - layerMenu->addAction(actionMovePositionDown); - layerMenu->addAction(actionMovePositionLeft); - layerMenu->addAction(actionMovePositionRight); - layerMenu->addAction(actionMoveLayerUp); - layerMenu->addAction(actionMoveLayerDown); - layerMenu->addSeparator(); - layerMenu->addAction(actionDeleteLayer); + // Attach all actions to Layer + layerMenu = new QMenu(tr("&Layer"), this); + layerMenu->addAction(actionCreateNewLayer); + layerMenu->addSeparator(); + layerMenu->addAction(actionSetActiveAlpha); + layerMenu->addAction(actionSetActiveLayer); + layerMenu->addSeparator(); + layerMenu->addAction(actionMovePositionUp); + layerMenu->addAction(actionMovePositionDown); + layerMenu->addAction(actionMovePositionLeft); + layerMenu->addAction(actionMovePositionRight); + layerMenu->addAction(actionMoveLayerUp); + layerMenu->addAction(actionMoveLayerDown); + layerMenu->addSeparator(); + layerMenu->addAction(actionDeleteLayer); - //Attach all Color Options - colorMenu = new QMenu(tr("&Color"), this); - colorMenu->addAction(actionColorPickerFirstColor); - colorMenu->addAction(actionColorPickerSecondColor); - colorMenu->addAction(actionColorSwap); + //Attach all Color Options + colorMenu = new QMenu(tr("&Color"), this); + colorMenu->addAction(actionColorPickerFirstColor); + colorMenu->addAction(actionColorPickerSecondColor); + colorMenu->addAction(actionColorSwap); - //Attach all Tool Creation Actions - toolCreationMenu = new QMenu(tr("&Drawingtools"), this); - toolCreationMenu->addAction(actionCreateCircleTool); - toolCreationMenu->addAction(actionCreateFloodFillTool); - toolCreationMenu->addAction(actionCreateLineTool); - toolCreationMenu->addAction(actionCreatePenTool); - toolCreationMenu->addAction(actionCreatePlainTool); - toolCreationMenu->addAction(actionCreatePolygonTool); - toolCreationMenu->addAction(actionCreateRectangleTool); + //Attach all Tool Creation Actions + toolCreationMenu = new QMenu(tr("&Drawingtools"), this); + toolCreationMenu->addAction(actionCreateCircleTool); + toolCreationMenu->addAction(actionCreateFloodFillTool); + toolCreationMenu->addAction(actionCreateLineTool); + toolCreationMenu->addAction(actionCreatePenTool); + toolCreationMenu->addAction(actionCreatePlainTool); + toolCreationMenu->addAction(actionCreatePolygonTool); + toolCreationMenu->addAction(actionCreateRectangleTool); - //Attach all Tool Setting Actions - toolSettingsMenu = new QMenu(tr("&Toolsettings"), this); - toolSettingsMenu->addAction(actionSetWidth); - toolSettingsMenu->addAction(actionSetInnerAlpha); + //Attach all Tool Setting Actions + toolSettingsMenu = new QMenu(tr("&Toolsettings"), this); + toolSettingsMenu->addAction(actionSetWidth); + toolSettingsMenu->addAction(actionSetInnerAlpha); - //Attach all Tool Options - toolMenu = new QMenu(tr("&Tools"), this); - toolMenu->addMenu(toolCreationMenu); - toolMenu->addMenu(toolSettingsMenu); - toolMenu->addSeparator(); - toolMenu->addMenu(colorMenu); + //Attach all Tool Options + toolMenu = new QMenu(tr("&Tools"), this); + toolMenu->addMenu(toolCreationMenu); + toolMenu->addMenu(toolSettingsMenu); + toolMenu->addSeparator(); + toolMenu->addMenu(colorMenu); // Attach all actions to Options optionMenu = new QMenu(tr("&Options"), this); - optionMenu->addMenu(layerMenu); - optionMenu->addMenu(toolMenu); - optionMenu->addSeparator(); - optionMenu->addMenu(renderMenu); + optionMenu->addMenu(layerMenu); + optionMenu->addMenu(toolMenu); + optionMenu->addSeparator(); + optionMenu->addMenu(renderMenu); // Attach all actions to Help helpMenu = new QMenu(tr("&Help"), this); @@ -583,54 +583,54 @@ void IntelliPhotoGui::createGui(){ // create Gui elements paintingArea = new PaintingArea(); - paintingArea->DummyGui = this; + paintingArea->DummyGui = this; - preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); CircleButton = new QPushButton(); CircleButton->setFixedSize(Buttonsize); - CircleButton->setIcon(preview); + CircleButton->setIcon(preview); CircleButton->setIconSize(Buttonsize); CircleButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg"); FloodFillButton = new QPushButton(); FloodFillButton->setFixedSize(Buttonsize); - FloodFillButton->setIcon(preview); + FloodFillButton->setIcon(preview); FloodFillButton->setIconSize(Buttonsize); FloodFillButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); LineButton = new QPushButton(); LineButton->setFixedSize(Buttonsize); - LineButton->setIcon(preview); + LineButton->setIcon(preview); LineButton->setIconSize(Buttonsize); LineButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg"); PenButton = new QPushButton(); PenButton->setFixedSize(Buttonsize); - PenButton->setIcon(preview); + PenButton->setIcon(preview); PenButton->setIconSize(Buttonsize); PenButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg"); PlainButton = new QPushButton(); PlainButton->setFixedSize(Buttonsize); - PlainButton->setIcon(preview); + PlainButton->setIcon(preview); PlainButton->setIconSize(Buttonsize); PlainButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg"); PolygonButton = new QPushButton(); PolygonButton->setFixedSize(Buttonsize); - PolygonButton->setIcon(preview); + PolygonButton->setIcon(preview); PolygonButton->setIconSize(Buttonsize); PolygonButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg"); + preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg"); RectangleButton = new QPushButton(); RectangleButton->setFixedSize(Buttonsize); - RectangleButton->setIcon(preview); + RectangleButton->setIcon(preview); RectangleButton->setIconSize(Buttonsize); RectangleButton->setCheckable(true); @@ -664,29 +664,29 @@ void IntelliPhotoGui::createGui(){ SecondColorButton = new QPushButton(); SecondColorButton->setFixedSize(Buttonsize/2); - preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png"); + preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png"); SwitchColorButton = new QPushButton(); SwitchColorButton->setFixedSize(Buttonsize.width(),Buttonsize.height()/2); - SwitchColorButton->setIcon(preview); + SwitchColorButton->setIcon(preview); SwitchColorButton->setIconSize(QSize(Buttonsize.width(),Buttonsize.height()/2)); ActiveLayerLine = new QLabel(); - QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); + QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); ActiveLayerLine->setFixedSize(Buttonsize.width()+10,Buttonsize.height()/3); - IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); - if(activePicture){ - preview = preview.fromImage(activePicture->getImageData()); - }else{ - QImage tmp(1,1,QImage::Format_ARGB32); - tmp.fill(Qt::transparent); - preview = preview.fromImage(tmp); - } + IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); + if(activePicture) { + preview = preview.fromImage(activePicture->getImageData()); + }else{ + QImage tmp(1,1,QImage::Format_ARGB32); + tmp.fill(Qt::transparent); + preview = preview.fromImage(tmp); + } - ActiveLayerImageLine = new QLabel(); - ActiveLayerImageLine->setFixedSize(Buttonsize); - ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); + ActiveLayerImageLine = new QLabel(); + ActiveLayerImageLine->setFixedSize(Buttonsize); + ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); // set gui elements @@ -706,40 +706,40 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(SecondColorButton,12,3,1,1); mainLayout->addWidget(SwitchColorButton,13,2,1,2); mainLayout->addWidget(ActiveLayerLine,14,2,1,2); - mainLayout->addWidget(ActiveLayerImageLine,15,2,1,2); + mainLayout->addWidget(ActiveLayerImageLine,15,2,1,2); } void IntelliPhotoGui::setIntelliStyle(){ // Set the title setWindowTitle("IntelliPhoto Prototype"); - Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); - Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); - Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); - Palette.setBrush(QPalette::Window, QColor(0, 0, 0)); - Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); + Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); + Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); + Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); + Palette.setBrush(QPalette::Window, QColor(0, 0, 0)); + Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); + Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); // Set style sheet - this->setStyleSheet("background-color:rgb(64,64,64)"); - this->menuBar()->setPalette(Palette); - this->fileMenu->setPalette(Palette); - this->saveAsMenu->setPalette(Palette); - this->optionMenu->setPalette(Palette); - this->helpMenu->setPalette(Palette); - this->renderMenu->setPalette(Palette); - this->toolMenu->setPalette(Palette); - this->layerMenu->setPalette(Palette); - this->colorMenu->setPalette(Palette); - this->toolCreationMenu->setPalette(Palette); - this->toolSettingsMenu->setPalette(Palette); + this->setStyleSheet("background-color:rgb(64,64,64)"); + this->menuBar()->setPalette(Palette); + this->fileMenu->setPalette(Palette); + this->saveAsMenu->setPalette(Palette); + this->optionMenu->setPalette(Palette); + this->helpMenu->setPalette(Palette); + this->renderMenu->setPalette(Palette); + this->toolMenu->setPalette(Palette); + this->layerMenu->setPalette(Palette); + this->colorMenu->setPalette(Palette); + this->toolCreationMenu->setPalette(Palette); + this->toolSettingsMenu->setPalette(Palette); - this->WidthLine->setPalette(Palette); - this->EditLineWidth->setPalette(Palette); - this->innerAlphaLine->setPalette(Palette); - this->EditLineInnerAlpha->setPalette(Palette); - this->ActiveLayerLine->setPalette(Palette); + this->WidthLine->setPalette(Palette); + this->EditLineWidth->setPalette(Palette); + this->innerAlphaLine->setPalette(Palette); + this->EditLineInnerAlpha->setPalette(Palette); + this->ActiveLayerLine->setPalette(Palette); QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); @@ -800,18 +800,18 @@ void IntelliPhotoGui::setDefaultToolValue(){ } void IntelliPhotoGui::UpdateGui(){ - QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); + QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); - IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); - if(activePicture){ - preview = preview.fromImage(activePicture->getImageData()); - }else{ - QImage tmp(1,1,QImage::Format_ARGB32); - tmp.fill(Qt::transparent); - preview = preview.fromImage(tmp); - } - ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); + IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); + if(activePicture) { + preview = preview.fromImage(activePicture->getImageData()); + }else{ + QImage tmp(1,1,QImage::Format_ARGB32); + tmp.fill(Qt::transparent); + preview = preview.fromImage(tmp); + } + ActiveLayerImageLine->setPixmap(preview.scaled(Buttonsize)); string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); diff --git a/src/Image/IntelliImage.cpp b/src/Image/IntelliImage.cpp index 0fa97b2..aa12450 100644 --- a/src/Image/IntelliImage.cpp +++ b/src/Image/IntelliImage.cpp @@ -3,15 +3,15 @@ #include IntelliImage::IntelliImage(int width, int height, bool fastRendererOn) - : imageData(QSize(width, height), fastRendererOn ? QImage::Format_Indexed8 : QImage::Format_ARGB32){ - if(fastRendererOn){ - imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } - imageData.fill(QColor(255,255,255,255)); - if(fastRendererOn){ - imageData = imageData.convertToFormat(QImage::Format_Indexed8); - } - this->fastRenderering = fastRendererOn; + : imageData(QSize(width, height), fastRendererOn ? QImage::Format_Indexed8 : QImage::Format_ARGB32){ + if(fastRendererOn) { + imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } + imageData.fill(QColor(255,255,255,255)); + if(fastRendererOn) { + imageData = imageData.convertToFormat(QImage::Format_Indexed8); + } + this->fastRenderering = fastRendererOn; } @@ -30,7 +30,7 @@ bool IntelliImage::loadImage(const QString &filePath){ // scaled Image to size of Layer loadedImage = loadedImage.scaled(imageData.size(),Qt::IgnoreAspectRatio); - imageData = loadedImage.convertToFormat(fastRenderering ? QImage::Format_Indexed8 : QImage::Format_ARGB32); + imageData = loadedImage.convertToFormat(fastRenderering ? QImage::Format_Indexed8 : QImage::Format_ARGB32); return true; } @@ -46,19 +46,19 @@ void IntelliImage::resizeImage(QImage*image, const QSize &newSize){ // Draw the image QPainter painter(&newImage); painter.drawImage(QPoint(0, 0), *image); - if(fastRenderering){ - *image = newImage.convertToFormat(QImage::Format_Indexed8); - } - else{ - *image = newImage; - } + if(fastRenderering) { + *image = newImage.convertToFormat(QImage::Format_Indexed8); + } + else{ + *image = newImage; + } } void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - // Used to draw on the widget + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + // Used to draw on the widget QPainter painter(&imageData); // Set the current settings for the pen @@ -66,32 +66,32 @@ void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){ // Draw a line from the last registered point to the current painter.drawPoint(p1); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& penWidth){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - // Used to draw on the widget + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + // Used to draw on the widget QPainter painter(&imageData); // Set the current settings for the pen painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); // Draw a line from the last registered point to the current painter.drawPoint(p1); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - // Used to draw on the widget + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + // Used to draw on the widget QPainter painter(&imageData); // Set the current settings for the pen @@ -99,53 +99,53 @@ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& co // Draw a line from the last registered point to the current painter.drawLine(p1, p2); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } void IntelliImage::drawPlain(const QColor& color){ - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } - imageData.fill(color); - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); + } + imageData.fill(color); + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } QColor IntelliImage::getPixelColor(QPoint& point){ - if(fastRenderering){ - QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32); - return copy.pixelColor(point); - } - return imageData.pixelColor(point); + if(fastRenderering) { + QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32); + return copy.pixelColor(point); + } + return imageData.pixelColor(point); } QImage IntelliImage::getImageData(){ - QImage copy = imageData; - if(fastRenderering){ - copy = copy.convertToFormat(QImage::Format_ARGB32); - } - return copy; + QImage copy = imageData; + if(fastRenderering) { + copy = copy.convertToFormat(QImage::Format_ARGB32); + } + return copy; } void IntelliImage::setImageData(const QImage& newData){ - imageData = newData; - if(fastRenderering){ - this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); - } - else { - this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } + imageData = newData; + if(fastRenderering) { + this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); + } + else { + this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } } void IntelliImage::updateRendererSetting(bool fastRendererOn){ - this->fastRenderering = fastRendererOn; - if(fastRenderering){ - this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); - } - else { - this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } + this->fastRenderering = fastRendererOn; + if(fastRenderering) { + this->imageData = imageData.convertToFormat(QImage::Format_Indexed8); + } + else { + this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } } diff --git a/src/Image/IntelliRasterImage.cpp b/src/Image/IntelliRasterImage.cpp index 8872cff..b055f3f 100644 --- a/src/Image/IntelliRasterImage.cpp +++ b/src/Image/IntelliRasterImage.cpp @@ -4,9 +4,9 @@ #include IntelliRasterImage::IntelliRasterImage(int width, int height, bool fastRendererOn) - : IntelliImage(width, height, fastRendererOn){ - TypeOfImage = IntelliImage::ImageType::RASTERIMAGE; - this->fastRenderering = fastRendererOn; + : IntelliImage(width, height, fastRendererOn){ + TypeOfImage = IntelliImage::ImageType::RASTERIMAGE; + this->fastRenderering = fastRendererOn; } IntelliRasterImage::~IntelliRasterImage(){ @@ -30,9 +30,9 @@ QImage IntelliRasterImage::getDisplayable(int alpha){ QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){ QImage copy = imageData; - if(fastRenderering){ - copy = copy.convertToFormat(QImage::Format_ARGB32); - } + if(fastRenderering) { + copy = copy.convertToFormat(QImage::Format_ARGB32); + } for(int y = 0; y IntelliShapedImage::IntelliShapedImage(int width, int height, bool fastRendererOn) - : IntelliRasterImage(width, height, fastRendererOn){ - TypeOfImage = IntelliImage::ImageType::SHAPEDIMAGE; - this->fastRenderering = fastRendererOn; + : IntelliRasterImage(width, height, fastRendererOn){ + TypeOfImage = IntelliImage::ImageType::SHAPEDIMAGE; + this->fastRenderering = fastRendererOn; } IntelliShapedImage::~IntelliShapedImage(){ @@ -27,9 +27,9 @@ IntelliImage* IntelliShapedImage::getDeepCopy(){ } void IntelliShapedImage::calculateVisiblity(){ - if(fastRenderering){ - this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } + if(fastRenderering) { + this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } if(polygonData.size()<=2) { QColor clr; @@ -40,9 +40,9 @@ void IntelliShapedImage::calculateVisiblity(){ imageData.setPixelColor(x,y,clr); } } - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } return; } QColor clr; @@ -59,16 +59,16 @@ void IntelliShapedImage::calculateVisiblity(){ imageData.setPixelColor(x,y,clr); } } - if(fastRenderering){ - this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); - } + if(fastRenderering) { + this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); + } } QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){ QImage copy = imageData; - if(fastRenderering){ - copy = copy.convertToFormat(QImage::Format_ARGB32); - } + if(fastRenderering) { + copy = copy.convertToFormat(QImage::Format_ARGB32); + } for(int y = 0; yfastRenderering = Updatedsetting; + this->fastRenderering = Updatedsetting; } bool IntelliRenderSettings::isFastRenderering(){ - return fastRenderering; + return fastRenderering; } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 779c2bb..7b93abc 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -43,12 +43,12 @@ PaintingArea::~PaintingArea(){ } void PaintingArea::setRenderSettings(bool isFastRenderingOn){ - if(isFastRenderingOn != renderSettings.isFastRenderering()){ - renderSettings.setFastRendering(isFastRenderingOn); - for(auto& layer : layerBundle){ - layer.image->updateRendererSetting(isFastRenderingOn); - } - } + if(isFastRenderingOn != renderSettings.isFastRenderering()) { + renderSettings.setFastRendering(isFastRenderingOn); + for(auto& layer : layerBundle) { + layer.image->updateRendererSetting(isFastRenderingOn); + } + } } void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){ @@ -68,10 +68,10 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff newLayer.height = height; newLayer.widthOffset = widthOffset; newLayer.heightOffset = heightOffset; - if(type==IntelliImage::ImageType::RASTERIMAGE) { - newLayer.image = new IntelliRasterImage(width,height,renderSettings.isFastRenderering()); - }else if(type==IntelliImage::ImageType::SHAPEDIMAGE) { - newLayer.image = new IntelliShapedImage(width, height, renderSettings.isFastRenderering()); + if(type==IntelliImage::ImageType::RASTERIMAGE) { + newLayer.image = new IntelliRasterImage(width,height,renderSettings.isFastRenderering()); + }else if(type==IntelliImage::ImageType::SHAPEDIMAGE) { + newLayer.image = new IntelliShapedImage(width, height, renderSettings.isFastRenderering()); } newLayer.alpha = 255; this->layerBundle.push_back(newLayer); @@ -83,12 +83,12 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff void PaintingArea::deleteLayer(int idx){ if(idx(layerBundle.size())) { this->layerBundle.erase(layerBundle.begin()+idx); - if(activeLayer>=idx) { + if(activeLayer>=idx) { activeLayer--; } - if(activeLayer < 0 && layerBundle.size()){ - activeLayer=0; - } + if(activeLayer < 0 && layerBundle.size()) { + activeLayer=0; + } } } @@ -265,9 +265,9 @@ std::vector PaintingArea::getPolygonDataOfRealLayer(){ // left button and if so store the current position // Set that we are currently drawing void PaintingArea::mousePressEvent(QMouseEvent*event){ - if(this->activeLayer < 0){ - return; - } + if(this->activeLayer < 0) { + return; + } if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; @@ -284,9 +284,9 @@ void PaintingArea::mousePressEvent(QMouseEvent*event){ // we call the drawline function which draws a line // from the last position to the current void PaintingArea::mouseMoveEvent(QMouseEvent*event){ - if(this->activeLayer < 0){ - return; - } + if(this->activeLayer < 0) { + return; + } if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; @@ -297,9 +297,9 @@ void PaintingArea::mouseMoveEvent(QMouseEvent*event){ // If the button is released we set variables to stop drawing void PaintingArea::mouseReleaseEvent(QMouseEvent*event){ - if(this->activeLayer < 0) - return; - if(Tool == nullptr) + if(this->activeLayer < 0) + return; + if(Tool == nullptr) return; int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; int y = event->y()-layerBundle[static_cast(activeLayer)].heightOffset; @@ -312,9 +312,9 @@ void PaintingArea::mouseReleaseEvent(QMouseEvent*event){ } void PaintingArea::wheelEvent(QWheelEvent*event){ - if(this->activeLayer < 0) - return; - if(this->Tool != nullptr) { + if(this->activeLayer < 0) + return; + if(this->Tool != nullptr) { QPoint numDegrees = event->angleDelta() / 8; if(!numDegrees.isNull()) { QPoint numSteps = numDegrees / 15; @@ -405,9 +405,9 @@ bool PaintingArea::createTempTopLayer(int idx){ newLayer.widthOffset = layerBundle[static_cast(idx)].widthOffset; newLayer.image = layerBundle[static_cast(idx)].image->getDeepCopy(); layerBundle.insert(layerBundle.begin()+idx+1,newLayer); - return true; + return true; } - return false; + return false; } IntelliTool* PaintingArea::copyActiveTool(){ @@ -428,8 +428,8 @@ int PaintingArea::getNumberOfActiveLayer(){ } IntelliImage* PaintingArea::getImageOfActiveLayer(){ - if(activeLayer<0){ - return nullptr; - } + if(activeLayer<0) { + return nullptr; + } return layerBundle[activeLayer].image; } diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index fad58dd..95eef55 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -43,142 +43,142 @@ Q_OBJECT friend IntelliTool; friend IntelliPhotoGui; public: - /*! - * \brief PaintingArea is the constructor of the PaintingArea class, which initiates the working environment - * \param maxWidth - The maximum amount of pixles that are inside painting area from left to right (default=600px) - * \param maxHeight - The maximum amount of pixles that are inside painting area from top to bottom (default=600px) - * \param parent - The parent window of the main window (default=nullptr) - */ - PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent = nullptr); +/*! + * \brief PaintingArea is the constructor of the PaintingArea class, which initiates the working environment + * \param maxWidth - The maximum amount of pixles that are inside painting area from left to right (default=600px) + * \param maxHeight - The maximum amount of pixles that are inside painting area from top to bottom (default=600px) + * \param parent - The parent window of the main window (default=nullptr) + */ +PaintingArea(int maxWidth=600, int maxHeight=600, QWidget*parent = nullptr); - /*! - * \brief This deconstructor is used to clear up the memory and remove the currently active window - */ - ~PaintingArea() override; +/*! + * \brief This deconstructor is used to clear up the memory and remove the currently active window + */ +~PaintingArea() override; - // Handles all events +// Handles all events - /*! - * \brief setRenderSettings updates all Images to the new Rendersetting. - * \param isFastRenderingOn is the new given flag for the FastRenderer. - */ - void setRenderSettings(bool isFastRenderingOn); +/*! + * \brief setRenderSettings updates all Images to the new Rendersetting. + * \param isFastRenderingOn is the new given flag for the FastRenderer. + */ +void setRenderSettings(bool isFastRenderingOn); - /*! - * \brief The open method is used for loading a picture into the current layer - * \param fileName - Path and filename which are used to determine where the to-be-opened file is stored - * \return Returns a boolean variable whether the file was successfully opened or not - */ - bool open(const QString &filePath); - /*! - * \brief The save method is used for exporting the current project as one picture - * \param fileName - * \param fileFormat - * \return Returns a boolean variable, true if the file was saved successfully, false if not - */ - bool save(const QString &filePath, const char *fileFormat); +/*! + * \brief The open method is used for loading a picture into the current layer + * \param fileName - Path and filename which are used to determine where the to-be-opened file is stored + * \return Returns a boolean variable whether the file was successfully opened or not + */ +bool open(const QString &filePath); +/*! + * \brief The save method is used for exporting the current project as one picture + * \param fileName + * \param fileFormat + * \return Returns a boolean variable, true if the file was saved successfully, false if not + */ +bool save(const QString &filePath, const char*fileFormat); - /*! - * \brief The addLayer adds a layer to the current project/ painting area - * \param width - Width of the layer in pixles - * \param height - Height of the layer in pixles - * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles - * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles - * \param type - Defining the ImageType of the new layer - * \return Returns the number of layers in the project - */ - int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); - /*! - * \brief The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer stack - * \param idx - Index of the position the new layer should be added - * \param width - Width of the layer in pixles - * \param height - Height of the layer in pixles - * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles - * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles - * \param type - Defining the ImageType of the new layer - * \return Returns the id of the layer position - */ - int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); - /*! - * \brief The deleteLayer method removes a layer at a given idx - * \param idx - The index of the layer to be removed - */ - void deleteLayer(int idx); - /*! - * \brief The setLayerToActive method marks a specific layer as active - * \param idx - The index of the layer to be active - */ - void setLayerActive(int idx); - /*! - * \brief The setAlphaOfLayer method sets the alpha value of a specific layer - * \param idx - The index of the layer where the change should be applied - * \param alpha - New alpha value of the layer - */ - void setLayerAlpha(int idx, int alpha); - /*! - * \brief The floodFill method fills a the active layer with a given color - * \param r - Red value of the color the layer should be filled with - * \param g - Green value of the color the layer should be filled with - * \param b - Blue value of the color the layer should be filled with - * \param a - Alpha value of the color the layer should be filled with - */ - void floodFill(int r, int g, int b, int a); - /*! - * \brief The movePositionActive method moves the active layer to certain position - * \param x - The x value the new center of the layer should be at - * \param y - The y value the new center of the layer should be at - */ - void movePositionActive(int x, int y); - /*! - * \brief The moveActiveLayer moves the active layer to a specific position in the layer stack - * \param idx - The index of the new position the layer should be in - */ - void moveActiveLayer(int idx); +/*! + * \brief The addLayer adds a layer to the current project/ painting area + * \param width - Width of the layer in pixles + * \param height - Height of the layer in pixles + * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles + * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles + * \param type - Defining the ImageType of the new layer + * \return Returns the number of layers in the project + */ +int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); +/*! + * \brief The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer stack + * \param idx - Index of the position the new layer should be added + * \param width - Width of the layer in pixles + * \param height - Height of the layer in pixles + * \param widthOffset - Offset of the layer measured to the left border of the painting area in pixles + * \param heightOffset - Offset of the layer measured to the top border of the painting area in pixles + * \param type - Defining the ImageType of the new layer + * \return Returns the id of the layer position + */ +int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); +/*! + * \brief The deleteLayer method removes a layer at a given idx + * \param idx - The index of the layer to be removed + */ +void deleteLayer(int idx); +/*! + * \brief The setLayerToActive method marks a specific layer as active + * \param idx - The index of the layer to be active + */ +void setLayerActive(int idx); +/*! + * \brief The setAlphaOfLayer method sets the alpha value of a specific layer + * \param idx - The index of the layer where the change should be applied + * \param alpha - New alpha value of the layer + */ +void setLayerAlpha(int idx, int alpha); +/*! + * \brief The floodFill method fills a the active layer with a given color + * \param r - Red value of the color the layer should be filled with + * \param g - Green value of the color the layer should be filled with + * \param b - Blue value of the color the layer should be filled with + * \param a - Alpha value of the color the layer should be filled with + */ +void floodFill(int r, int g, int b, int a); +/*! + * \brief The movePositionActive method moves the active layer to certain position + * \param x - The x value the new center of the layer should be at + * \param y - The y value the new center of the layer should be at + */ +void movePositionActive(int x, int y); +/*! + * \brief The moveActiveLayer moves the active layer to a specific position in the layer stack + * \param idx - The index of the new position the layer should be in + */ +void moveActiveLayer(int idx); - //change properties of colorPicker - /*! - * \brief The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color - */ - void colorPickerSetFirstColor(); - /*! - * \brief The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color - */ - void colorPickerSetSecondColor(); - /*! - * \brief The colorPickerSwitchColor swaps the primary color with the secondary drawing color - */ - void colorPickerSwapColors(); +//change properties of colorPicker +/*! + * \brief The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color + */ +void colorPickerSetFirstColor(); +/*! + * \brief The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color + */ +void colorPickerSetSecondColor(); +/*! + * \brief The colorPickerSwitchColor swaps the primary color with the secondary drawing color + */ +void colorPickerSwapColors(); - // Create tools - void createPenTool(); - void createPlainTool(); - void createLineTool(); - void createRectangleTool(); - void createCircleTool(); - void createPolygonTool(); - void createFloodFillTool(); +// Create tools +void createPenTool(); +void createPlainTool(); +void createLineTool(); +void createRectangleTool(); +void createCircleTool(); +void createPolygonTool(); +void createFloodFillTool(); - /*! - * \brief The getWidthOfActive gets the horizontal dimensions of the active layer - * \return Returns the horizontal pixle count of the active layer - */ - int getWidthOfActive(); - /*! - * \brief The getHeightOfActive gets the vertical dimensions of the active layer - * \return Returns the vertical pixle count of the active layer - */ - int getHeightOfActive(); +/*! + * \brief The getWidthOfActive gets the horizontal dimensions of the active layer + * \return Returns the horizontal pixle count of the active layer + */ +int getWidthOfActive(); +/*! + * \brief The getHeightOfActive gets the vertical dimensions of the active layer + * \return Returns the vertical pixle count of the active layer + */ +int getHeightOfActive(); - IntelliImage::ImageType getTypeOfImageRealLayer(); +IntelliImage::ImageType getTypeOfImageRealLayer(); - std::vector getPolygonDataOfRealLayer(); +std::vector getPolygonDataOfRealLayer(); - int getNumberOfActiveLayer(); +int getNumberOfActiveLayer(); - IntelliImage* getImageOfActiveLayer(); +IntelliImage* getImageOfActiveLayer(); - IntelliToolsettings Toolsettings; - IntelliColorPicker colorPicker; +IntelliToolsettings Toolsettings; +IntelliColorPicker colorPicker; public slots: // Events to handle @@ -226,8 +226,8 @@ void drawLayers(bool forSaving=false); void resizeLayer(QImage*image_res, const QSize &newSize); - // Helper for Tool - bool createTempTopLayer(int idx); +// Helper for Tool +bool createTempTopLayer(int idx); }; #endif diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 2dd2272..7d85547 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -24,10 +24,10 @@ void IntelliTool::onMouseRightReleased(int x, int y){ } void IntelliTool::onMouseLeftPressed(int x, int y){ - this->isDrawing=this->createToolLayer(); - if(isDrawing){ - Canvas->image->calculateVisiblity(); - } + this->isDrawing=this->createToolLayer(); + if(isDrawing) { + Canvas->image->calculateVisiblity(); + } } void IntelliTool::onMouseLeftReleased(int x, int y){ @@ -49,22 +49,22 @@ void IntelliTool::onWheelScrolled(int value){ } bool IntelliTool::createToolLayer(){ - if(Area->createTempTopLayer(Area->activeLayer)){ - this->activeLayer=&Area->layerBundle[static_cast(Area->activeLayer)]; - this->Canvas=&Area->layerBundle[static_cast(Area->activeLayer+1)]; - return true; - } - return false; + if(Area->createTempTopLayer(Area->activeLayer)) { + this->activeLayer=&Area->layerBundle[static_cast(Area->activeLayer)]; + this->Canvas=&Area->layerBundle[static_cast(Area->activeLayer+1)]; + return true; + } + return false; } void IntelliTool::mergeToolLayer(){ QColor clr_0; QColor clr_1; - QImage updatedImage = activeLayer->image->getImageData(); + QImage updatedImage = activeLayer->image->getImageData(); for(int y=0; yheight; y++) { - for(int x=0; xwidth; x++) { - clr_0=updatedImage.pixelColor(x,y); + for(int x=0; xwidth; x++) { + clr_0=updatedImage.pixelColor(x,y); clr_1=Canvas->image->imageData.pixelColor(x,y); float t = static_cast(clr_1.alpha())/255.f; int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); @@ -76,11 +76,11 @@ void IntelliTool::mergeToolLayer(){ clr_0.setBlue(b); clr_0.setAlpha(a); - updatedImage.setPixelColor(x, y, clr_0); + updatedImage.setPixelColor(x, y, clr_0); } } - activeLayer->image->setImageData(updatedImage); - Area->DummyGui->UpdateGui(); + activeLayer->image->setImageData(updatedImage); + Area->DummyGui->UpdateGui(); } void IntelliTool::deleteToolLayer(){ diff --git a/src/Tool/IntelliToolCircle.cpp b/src/Tool/IntelliToolCircle.cpp index cde5da6..d2a09d1 100644 --- a/src/Tool/IntelliToolCircle.cpp +++ b/src/Tool/IntelliToolCircle.cpp @@ -26,7 +26,7 @@ void IntelliToolCircle::drawCircle(int radius){ } //TODO implement circle drawing algorithm bresenham - radius = static_cast(radius +(Toolsettings->getLineWidth()/2.)); + radius = static_cast(radius +(Toolsettings->getLineWidth()/2.)); yMin = (centerPoint.y()-radius); yMax = (centerPoint.y()+radius); for(int i=yMin; i<=yMax; i++) { @@ -56,12 +56,12 @@ 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); - int radius = 1; - drawCircle(radius); - Canvas->image->calculateVisiblity(); - } + if(this->isDrawing) { + this->centerPoint=QPoint(x,y); + int radius = 1; + drawCircle(radius); + Canvas->image->calculateVisiblity(); + } } void IntelliToolCircle::onMouseLeftReleased(int x, int y){ diff --git a/src/Tool/IntelliToolLine.cpp b/src/Tool/IntelliToolLine.cpp index 45194de..120d3a2 100644 --- a/src/Tool/IntelliToolLine.cpp +++ b/src/Tool/IntelliToolLine.cpp @@ -49,7 +49,7 @@ void IntelliToolLine::onMouseMoved(int x, int y){ QPoint p2 =lineStartingPoint.x() < next.x() ? next : lineStartingPoint; int m = static_cast(static_cast(p2.y()-p1.y())/static_cast(p2.x()-p1.x())+0.5f); int c = lineStartingPoint.y()-lineStartingPoint.x()*m; - //TODO implement dotted algorithm + //TODO implement dotted algorithm break; } } From d8f6f0f8f7e3999db493acb033471f509fd517a6 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Tue, 14 Jan 2020 21:02:03 +0100 Subject: [PATCH 15/97] implemented creation of certain image type and alo button for setting poylgon data TODO implement setPolygon function --- src/GUI/IntelliPhotoGui.cpp | 74 +++++++++++++++++++++++++++++++++---- src/GUI/IntelliPhotoGui.h | 11 ++++-- src/Layer/PaintingArea.cpp | 7 ++++ src/Layer/PaintingArea.h | 5 +++ 4 files changed, 86 insertions(+), 11 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 4e506da..01913b4 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -65,8 +65,8 @@ void IntelliPhotoGui::slotSave(){ saveFile(fileFormat); } -// Opens a dialog that allows the user to create a New Layer -void IntelliPhotoGui::slotCreateNewLayer(){ +// Opens a dialog that allows the user to create a New RASTER Layer +void IntelliPhotoGui::slotCreateNewRasterLayer(){ // Stores button value bool ok1, ok2; @@ -85,11 +85,36 @@ void IntelliPhotoGui::slotCreateNewLayer(){ 200,1, 500, 1, &ok2); // Create New Layer if (ok1&&ok2) { - paintingArea->addLayer(width,height,0,0); + paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::RASTERIMAGE); UpdateGui(); } } +// Opens a dialog that allows the user to create a New SHAPED Layer +void IntelliPhotoGui::slotCreateNewShapedLayer(){ + // Stores button value + bool ok1, ok2; + + // "New Layer" is the title of the window + // the next tr is the text to display + // Define the standard Value, min, max, step and ok button + QInputDialog Input; + Input.setPalette(Palette); + + int width = Input.getInt(this, tr("New Layer"), + tr("Width:"), + 200,1, 500, 1, &ok1); + + int height = QInputDialog::getInt(this, tr("New Layer"), + tr("Height:"), + 200,1, 500, 1, &ok2); + // Create New Layer + if (ok1&&ok2) { + paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::SHAPEDIMAGE); + UpdateGui(); + } +} + // Opens a dialog that allows the user to delete a Layer void IntelliPhotoGui::slotDeleteLayer(){ // Stores button value @@ -129,6 +154,24 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ } } +void IntelliPhotoGui::slotSetPolygon(){ + // Stores button value + bool ok1; + + // "Layer to set on" is the title of the window + // the next tr is the text to display + // Define the standard Value, min, max, step and ok button + int layer = QInputDialog::getInt(this, tr("Layer to set on"), + tr("Layer:"), + 1,1,500,1, &ok1); + + if (ok1) + { + paintingArea->setPolygon(layer-1); + UpdateGui(); + } +} + void IntelliPhotoGui::slotPositionMoveUp(){ paintingArea->movePositionActive(0,-20); update(); @@ -343,10 +386,16 @@ void IntelliPhotoGui::createActions(){ actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen())); - // Create New Layer action and tie to IntelliPhotoGui::newLayer() - actionCreateNewLayer = new QAction(tr("&New Layer..."), this); - actionCreateNewLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); - connect(actionCreateNewLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewLayer())); + // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer() + actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this); + actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); + connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer())); + + + // Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer() + actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this); + actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT)); + connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer())); // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() actionDeleteLayer = new QAction(tr("&Delete Layer..."), this); @@ -361,6 +410,10 @@ void IntelliPhotoGui::createActions(){ actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha())); + actionSetPolygon = new QAction(tr("&set new Polygondata"), this); + actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P)); + connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon())); + actionMovePositionUp = new QAction(tr("&move Up"), this); actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up)); connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp())); @@ -510,12 +563,17 @@ void IntelliPhotoGui::createMenus(){ renderMenu->addAction(actionUpdateRenderSettingsOn); renderMenu->addAction(actionUpdateRenderSettingsOff); + //Attach all Layer Creations to Menu + layerCreationMenu = new QMenu(tr("&Create new Layer"), this); + layerCreationMenu->addAction(actionCreateNewRasterLayer); + layerCreationMenu->addAction(actionCreateNewShapedLayer); // Attach all actions to Layer layerMenu = new QMenu(tr("&Layer"), this); - layerMenu->addAction(actionCreateNewLayer); + layerMenu->addMenu(layerCreationMenu); layerMenu->addSeparator(); layerMenu->addAction(actionSetActiveAlpha); layerMenu->addAction(actionSetActiveLayer); + layerMenu->addAction(actionSetPolygon); layerMenu->addSeparator(); layerMenu->addAction(actionMovePositionUp); layerMenu->addAction(actionMovePositionDown); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 43aa03e..6d32933 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -44,11 +44,13 @@ void slotOpen(); void slotSave(); // layer slots here -void slotCreateNewLayer(); +void slotCreateNewRasterLayer(); +void slotCreateNewShapedLayer(); void slotDeleteLayer(); void slotClearActiveLayer(); void slotSetActiveLayer(); void slotSetActiveAlpha(); +void slotSetPolygon(); void slotPositionMoveUp(); void slotPositionMoveDown(); void slotPositionMoveLeft(); @@ -133,6 +135,7 @@ QMenu*saveAsMenu; QMenu*fileMenu; QMenu*renderMenu; QMenu*optionMenu; +QMenu*layerCreationMenu; QMenu*layerMenu; QMenu*colorMenu; QMenu*toolCreationMenu; @@ -168,10 +171,12 @@ QAction*actionAboutDialog; QAction*actionAboutQtDialog; // layer change actions -QAction*actionCreateNewLayer; -QAction*actionDeleteLayer; +QAction* actionCreateNewRasterLayer; +QAction* actionCreateNewShapedLayer; +QAction* actionDeleteLayer; QAction* actionSetActiveLayer; QAction* actionSetActiveAlpha; +QAction* actionSetPolygon; QAction* actionMovePositionUp; QAction* actionMovePositionDown; QAction* actionMovePositionLeft; diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 7b93abc..d16aace 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -110,6 +110,13 @@ void PaintingArea::setLayerAlpha(int idx, int alpha){ layerBundle[static_cast(idx)].alpha=alpha; } } +void PaintingArea::setPolygon(int idx){ + if(idx>=0&&idx(layerBundle.size())) { + if(layerBundle[static_cast(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE){ + qDebug() << "Todo Implement here set Polygon"; + } + } +} // Used to load the image and place it in the widget bool PaintingArea::open(const QString &filePath){ diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 95eef55..5e3d03a 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -115,6 +115,11 @@ void setLayerActive(int idx); * \param alpha - New alpha value of the layer */ void setLayerAlpha(int idx, int alpha); +/*! + * \brief setPolygon is used for setting polygondata, it only works on RASTER images + * \param idx - represents the number of the layer with should be transformed + */ +void setPolygon(int idx); /*! * \brief The floodFill method fills a the active layer with a given color * \param r - Red value of the color the layer should be filled with From 371869308383b41bac5db5de9b129b4d613dd155 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Tue, 14 Jan 2020 21:49:14 +0100 Subject: [PATCH 16/97] nearly all tests but without benchmark --- src/Image/IntelliImage.cpp | 27 +- src/Layer/PaintingArea.cpp | 12 +- src/Layer/PaintingArea.h | 2 +- src/Tool/IntelliToolFloodFill.cpp | 17 +- src/tst_unittest.cpp | 979 +++++++++++++++++++++++++++--- 5 files changed, 947 insertions(+), 90 deletions(-) diff --git a/src/Image/IntelliImage.cpp b/src/Image/IntelliImage.cpp index 0fa97b2..042e01f 100644 --- a/src/Image/IntelliImage.cpp +++ b/src/Image/IntelliImage.cpp @@ -59,13 +59,16 @@ void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){ this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); } // Used to draw on the widget - QPainter painter(&imageData); + QPainter* painter = new QPainter(&imageData); // Set the current settings for the pen - painter.setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter->setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); // Draw a line from the last registered point to the current - painter.drawPoint(p1); + painter->drawPoint(p1); + delete painter; + painter = nullptr; + if(fastRenderering){ this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); } @@ -76,12 +79,15 @@ void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& p this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); } // Used to draw on the widget - QPainter painter(&imageData); + QPainter* painter = new QPainter(&imageData); // Set the current settings for the pen - painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter->setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); // Draw a line from the last registered point to the current - painter.drawPoint(p1); + painter->drawPoint(p1); + delete painter; + + painter = nullptr; if(fastRenderering){ this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); } @@ -92,13 +98,16 @@ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& co this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); } // Used to draw on the widget - QPainter painter(&imageData); + QPainter* painter = new QPainter(&imageData); // Set the current settings for the pen - painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter->setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); // Draw a line from the last registered point to the current - painter.drawLine(p1, p2); + painter->drawLine(p1, p2); + delete painter; + painter = nullptr; + if(fastRenderering){ this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8); } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index e2df40d..224cf80 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -67,7 +67,7 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff void PaintingArea::deleteLayer(int idx){ - if(idx(layerBundle.size())) { + if(idx < static_cast(layerBundle.size())&&idx>=0) { this->layerBundle.erase(layerBundle.begin()+idx); if(activeLayer>=idx) { activeLayer--; @@ -93,7 +93,9 @@ void PaintingArea::setLayerActive(int idx){ void PaintingArea::setLayerAlpha(int idx, int alpha){ if(idx>=0&&idx(layerBundle.size())) { - layerBundle[static_cast(idx)].alpha=alpha; + if(alpha>=0 && alpha<=255) { + layerBundle[static_cast(idx)].alpha=alpha; + } } } @@ -138,6 +140,12 @@ void PaintingArea::floodFill(int r, int g, int b, int a){ if(this->activeLayer==-1) { return; } + if(r >255 || g>255|| b>255 || a>255){ + return; + } + if(r < 0 || g < 0|| b < 0 || a < 0){ + return; + } IntelliImage* active = layerBundle[static_cast(activeLayer)].image; active->drawPlain(QColor(r, g, b, a)); update(); diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 666a6a7..72c6b59 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -135,7 +135,7 @@ public: void movePositionActive(int x, int y); /*! * \brief The moveActiveLayer moves the active layer to a specific position in the layer stack - * \param idx - The index of the new position the layer should be in + * \param idx - The direction the layer should move */ void moveActiveLayer(int idx); diff --git a/src/Tool/IntelliToolFloodFill.cpp b/src/Tool/IntelliToolFloodFill.cpp index cb135f8..b4d49c2 100644 --- a/src/Tool/IntelliToolFloodFill.cpp +++ b/src/Tool/IntelliToolFloodFill.cpp @@ -25,7 +25,7 @@ void IntelliToolFloodFill::onMouseRightReleased(int x, int y){ void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){ if(!(x>=0 && xgetWidthOfActive() && y>=0 && ygetHeightOfActive())) { return; - } + } IntelliTool::onMouseLeftPressed(x,y); QPoint start(x,y); @@ -33,7 +33,10 @@ void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){ Q.push(start); QColor oldColor = this->activeLayer->image->getPixelColor(start); - QColor newColor = this->colorPicker->getFirstColor(); + QColor newColor = this->colorPicker->getFirstColor(); + if(newColor == oldColor){ + return; + } Canvas->image->drawPixel(start,newColor); QPoint left, right, top, down; @@ -45,20 +48,20 @@ void IntelliToolFloodFill::onMouseLeftPressed(int x, int 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)) { + 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); } } diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp index e320994..dd3bc01 100644 --- a/src/tst_unittest.cpp +++ b/src/tst_unittest.cpp @@ -2,6 +2,22 @@ #include // add necessary includes here #include "GUI/IntelliPhotoGui.h" +#include "Image/IntelliImage.h" +#include "Image/IntelliRasterImage.h" +#include "Image/IntelliShapedImage.h" +#include "IntelliHelper/IntelliColorPicker.h" +#include "IntelliHelper/IntelliRenderSettings.h" +#include "IntelliHelper/IntelliToolsettings.h" +#include "IntelliHelper/IntelliTriangulation.h" +#include "Layer/PaintingArea.h" +#include "Tool/IntelliTool.h" +#include "Tool/IntelliToolCircle.h" +#include "Tool/IntelliToolFloodFill.h" +#include "Tool/IntelliToolLine.h" +#include "Tool/IntelliToolPen.h" +#include "Tool/IntelliToolPlain.h" +#include "Tool/IntelliToolPolygon.h" +#include "Tool/IntelliToolRectangle.h" class UnitTest : public QObject { @@ -37,8 +53,6 @@ private slots: void test_RasterImage_drawLine(); void test_RasterImage_drawPoint(); void test_RasterImage_getDisplayable(); - void test_RasterImage_setPolygon(); - void test_RasterImage_loadImage(); void test_RasterImage_getPixelColor(); void test_RasterImage_getImageData(); void test_RasterImage_setImageData(); @@ -48,21 +62,10 @@ private slots: void test_ShapedImage_drawLine(); void test_ShapedImage_drawPoint(); void test_ShapedImage_getDisplayable(); - void test_ShapedImage_setPolygon(); - void test_ShapedImage_loadImage(); void test_ShapedImage_getPixelColor(); void test_ShapedImage_getImageData(); void test_ShapedImage_setImageData(); - //test painting-area tools - void test_createTool_Circle(); - void test_createTool_FloodFill(); - void test_createTool_Line(); - void test_createTool_Pen(); - void test_createTool_Plain(); - void test_createTool_Polygon(); - void test_createTool_Rectangle(); - //test tools void test_Circle_fullDraw(); void test_Circle_interruptedDraw(); @@ -110,81 +113,915 @@ void UnitTest::cleanupTestCase() delete gui; } -//void UnitTest::test_case1() -//{ -// QBENCHMARK { -// QVERIFY(1 == 1); -// } -//} - //test painting area -void UnitTest::test_addLayer(){} -void UnitTest::test_deleteLayer(){} -void UnitTest::test_setActive(){} -void UnitTest::test_setAlpha(){} -void UnitTest::test_floodFill(){} -void UnitTest::test_moveActive(){} -void UnitTest::test_setPolygon(){} -void UnitTest::test_setLayerUp(){} -void UnitTest::test_setLayerDown(){} +void UnitTest::test_addLayer(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); -void UnitTest::test_createTools(){} + QCOMPARE(area->layerBundle.size(), 1); + QCOMPARE(area->activeLayer, 0); + + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].width, 200); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].widthOffset, 10); + + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].height, 400); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].heightOffset, 20); + + area->deleteLayer(0); +} + +void UnitTest::test_deleteLayer(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->deleteLayer(3); + QCOMPARE(area->layerBundle.size(), 2); + QCOMPARE(area->activeLayer, 1); + + area->deleteLayer(-1); + QCOMPARE(area->layerBundle.size(), 2); + QCOMPARE(area->activeLayer, 1); + + area->deleteLayer(1); + QCOMPARE(area->layerBundle.size(), 1); + QCOMPARE(area->activeLayer, 0); + + area->deleteLayer(0); + QCOMPARE(area->layerBundle.size(), 0); + QCOMPARE(area->activeLayer, -1); + +} + +void UnitTest::test_setActive(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->setLayerActive(0); + QCOMPARE(area->activeLayer, 0); + area->setLayerActive(1); + QCOMPARE(area->activeLayer, 1); + area->setLayerActive(-1); + QCOMPARE(area->activeLayer, 1); + area->setLayerActive(3); + QCOMPARE(area->activeLayer, 1); + + area->deleteLayer(0); + area->deleteLayer(0); +} + +void UnitTest::test_setAlpha(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->setLayerAlpha(0,0); + QCOMPARE(area->layerBundle[0].alpha, 0); + + area->setLayerAlpha(0,255); + QCOMPARE(area->layerBundle[0].alpha, 255); + + area->setLayerAlpha(1,123); + QCOMPARE(area->layerBundle[1].alpha, 123); + + area->setLayerAlpha(1,-12); + QCOMPARE(area->layerBundle[1].alpha, 123); + + area->setLayerAlpha(1,300); + QCOMPARE(area->layerBundle[1].alpha, 123); + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::test_floodFill(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->floodFill(255,255,255,255); + QPoint point; + for(size_t i = 0; i<200; i++){ + point.setX(static_cast(i)); + for(size_t j = 0; i<400; i++){ + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(255,255,255,255)); + } + } + + area->floodFill(0,0,0,0); + for(size_t i = 0; i<200; i++){ + point.setX(static_cast(i)); + for(size_t j = 0; i<400; i++){ + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); + } + } + + area->floodFill(-1,-1,-1,-1); + for(size_t i = 0; i<200; i++){ + point.setX(static_cast(i)); + for(size_t j = 0; i<400; i++){ + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); + } + } + + area->floodFill(256,256,256,256); + for(size_t i = 0; i<200; i++){ + point.setX(static_cast(i)); + for(size_t j = 0; i<400; i++){ + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); + } + } + + area->deleteLayer(0); +} + +void UnitTest::test_moveActive(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->floodFill(0,0,0,255); + QPoint point(0,0); + + area->moveActiveLayer(-1); + QCOMPARE(area->activeLayer, 0); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + + area->moveActiveLayer(-1); + QCOMPARE(area->activeLayer, 0); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + + area->moveActiveLayer(1); + QCOMPARE(area->activeLayer, 1); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + + area->moveActiveLayer(1); + QCOMPARE(area->activeLayer, 1); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::test_setPolygon(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + std::vector polygon{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,10), + QPoint(00,10) + }; + + area->layerBundle[1].image->setPolygon(polygon); + IntelliShapedImage* image = dynamic_cast(area->layerBundle[1].image); + QCOMPARE(image->polygonData[0], polygon[0]); + QCOMPARE(image->polygonData[1], polygon[1]); + QCOMPARE(image->polygonData[2], polygon[2]); + QCOMPARE(image->polygonData[3], polygon[3]); + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::test_setLayerUp(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->selectLayerUp(); + QCOMPARE(area->activeLayer, 1); + + area->setLayerActive(0); + QCOMPARE(area->activeLayer, 0); + + area->selectLayerUp(); + QCOMPARE(area->activeLayer, 1); + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::test_setLayerDown(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + area->selectLayerDown(); + QCOMPARE(area->activeLayer, 0); + + area->selectLayerDown(); + QCOMPARE(area->activeLayer, 0); + + area->deleteLayer(1); + area->deleteLayer(0); + +} + +void UnitTest::test_createTools(){ + QVERIFY(area->Tool == nullptr); + + area->createPenTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); + + area->createLineTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); + + area->createPlainTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); + + area->createCircleTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); + + area->createPolygonTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); + + area->createFloodFillTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); + + area->createRectangleTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); +} //test Raster-Image operations -void UnitTest::test_RasterImage_drawPixel(){} -void UnitTest::test_RasterImage_drawLine(){} -void UnitTest::test_RasterImage_drawPoint(){} -void UnitTest::test_RasterImage_getDisplayable(){} -void UnitTest::test_RasterImage_setPolygon(){} -void UnitTest::test_RasterImage_loadImage(){} -void UnitTest::test_RasterImage_getPixelColor(){} -void UnitTest::test_RasterImage_getImageData(){} -void UnitTest::test_RasterImage_setImageData(){} +void UnitTest::test_RasterImage_drawPixel(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point(0,0); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + + QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_RasterImage_drawLine(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point1(0,0); + QPoint point2(10,10); + QPoint point3(5,5); + QPoint point4(6,5); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255)); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_RasterImage_drawPoint(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point1(5,5); + QPoint point2(5,6); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255)); + + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_RasterImage_getDisplayable(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + area->floodFill(255,255,255,255); + QImage img = area->layerBundle[0].image->getDisplayable(QSize(200,400),255); + QPoint point; + for(size_t i=0; i<200; i++){ + point.setX(static_cast(i)); + for(size_t j=0; j<400; j++){ + point.setY(static_cast(j)); + QVERIFY(img.pixelColor(point) == QColor(255,255,255,255)); + } + } + + area->deleteLayer(0); +} + +void UnitTest::test_RasterImage_getPixelColor(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point(0,0); + area->floodFill(0,0,0,255); + QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_RasterImage_getImageData(){ + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); + + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); + QImage cpy = area->layerBundle[0].image->getImageData(); + + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1)); + QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2)); + QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3)); + QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4)); + + area->deleteLayer(0); +} + +void UnitTest::test_RasterImage_setImageData(){ + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); + + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); + + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4)); + + area->deleteLayer(0); +} //test Shaped-Image operations -void UnitTest::test_ShapedImage_drawPixel(){} -void UnitTest::test_ShapedImage_drawLine(){} -void UnitTest::test_ShapedImage_drawPoint(){} -void UnitTest::test_ShapedImage_getDisplayable(){} -void UnitTest::test_ShapedImage_setPolygon(){} -void UnitTest::test_ShapedImage_loadImage(){} -void UnitTest::test_ShapedImage_getPixelColor(){} -void UnitTest::test_ShapedImage_getImageData(){} -void UnitTest::test_ShapedImage_setImageData(){} +void UnitTest::test_ShapedImage_drawPixel(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); -//test painting-area tools -void UnitTest::test_createTool_Circle(){} -void UnitTest::test_createTool_FloodFill(){} -void UnitTest::test_createTool_Line(){} -void UnitTest::test_createTool_Pen(){} -void UnitTest::test_createTool_Plain(){} -void UnitTest::test_createTool_Polygon(){} -void UnitTest::test_createTool_Rectangle(){} + QPoint point(0,0); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + + QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_ShapedImage_drawLine(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point1(0,0); + QPoint point2(10,10); + QPoint point3(5,5); + QPoint point4(6,5); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255)); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_ShapedImage_drawPoint(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point1(5,5); + QPoint point2(5,6); + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255)); + + + area->floodFill(255,255,255,255); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_ShapedImage_getDisplayable(){ + area->addLayer(21,21,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + area->floodFill(255,255,255,255); + area->layerBundle[0].image->setPolygon(points); + QSize size(21,21); + QImage img = area->layerBundle[0].image->getDisplayable(size,255); + + QCOMPARE(img.pixelColor(points[0]).alpha(), 255); + QCOMPARE(img.pixelColor(points[1]).alpha(), 255); + QCOMPARE(img.pixelColor(points[2]).alpha(), 255); + QCOMPARE(img.pixelColor(points[3]).alpha(), 255); + + QCOMPARE(img.pixelColor(test[4]).alpha(), 255); + QCOMPARE(img.pixelColor(test[0]).alpha(), 0); + QCOMPARE(img.pixelColor(test[1]).alpha(), 0); + QCOMPARE(img.pixelColor(test[2]).alpha(), 0); + QCOMPARE(img.pixelColor(test[3]).alpha(), 0); + + area->deleteLayer(0); +} + +void UnitTest::test_ShapedImage_getPixelColor(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point(0,0); + area->floodFill(0,0,0,255); + QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_ShapedImage_getImageData(){ + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); + + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); + QImage cpy = area->layerBundle[0].image->getImageData(); + + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1)); + QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2)); + QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3)); + QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4)); + + area->deleteLayer(0); +} + +void UnitTest::test_ShapedImage_setImageData(){ + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); + + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); + + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4)); + + area->deleteLayer(0); +} //test tools -void UnitTest::test_Circle_fullDraw(){} -void UnitTest::test_Circle_interruptedDraw(){} +void UnitTest::test_Circle_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->floodFill(255,0,0,255); -void UnitTest::test_FloodFill_fullDraw(){} -void UnitTest::test_FloodFill_interruptedDraw(){} + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); -void UnitTest::test_Line_fullDraw(){} -void UnitTest::test_Line_interruptedDraw(){} -void UnitTest::test_Pen_fullDraw(){} -void UnitTest::test_Pen_interruptedDraw(){} + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getSecondColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); -void UnitTest::test_Plain_fullDraw(){} -void UnitTest::test_Plain_interruptedDraw(){} + area->deleteLayer(0); +} -void UnitTest::test_Polygon_fullDraw(){} -void UnitTest::test_Polygon_interruptedDraw(){} +void UnitTest::test_Circle_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->floodFill(255,0,0,255); -void UnitTest::test_Rectangle_fullDraw(){} -void UnitTest::test_Rectangle_interruptedDraw(){} + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + + area->deleteLayer(0); + +} + +void UnitTest::test_FloodFill_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + + area->deleteLayer(0); +} + +void UnitTest::test_FloodFill_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_Line_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + + area->deleteLayer(0); +} + +void UnitTest::test_Line_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_Pen_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + + area->deleteLayer(0); +} + +void UnitTest::test_Pen_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_Plain_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + + area->deleteLayer(0); +} + +void UnitTest::test_Plain_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_Polygon_fullDraw(){ + area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->floodFill(255,0,0,255); + + area->Tool->onMouseLeftPressed(points[0].x(), points[0].x()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].x()); + area->Tool->onMouseMoved(points[1].x(), points[1].x()); + + area->Tool->onMouseLeftPressed(points[1].x(), points[1].x()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].x()); + area->Tool->onMouseMoved(points[2].x(), points[2].x()); + + area->Tool->onMouseLeftPressed(points[2].x(), points[2].x()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].x()); + area->Tool->onMouseMoved(points[3].x(), points[3].x()); + + area->Tool->onMouseLeftPressed(points[3].x(), points[3].x()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].x()); + area->Tool->onMouseMoved(points[0].x(), points[0].x()); + + area->Tool->onMouseLeftPressed(points[0].x(), points[0].x()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].x()); + + QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==area->colorPicker.getFirstColor()); + + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==area->colorPicker.getSecondColor()); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_Polygon_interruptedDraw(){ + area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->floodFill(255,0,0,255); + + area->Tool->onMouseLeftPressed(points[0].x(), points[0].x()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].x()); + area->Tool->onMouseMoved(points[1].x(), points[1].x()); + + area->Tool->onMouseLeftPressed(points[1].x(), points[1].x()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].x()); + area->Tool->onMouseMoved(points[2].x(), points[2].x()); + + area->Tool->onMouseLeftPressed(points[2].x(), points[2].x()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].x()); + area->Tool->onMouseMoved(points[3].x(), points[3].x()); + + area->Tool->onMouseLeftPressed(points[3].x(), points[3].x()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].x()); + area->Tool->onMouseMoved(points[0].x(), points[0].x()); + + area->Tool->onMouseRightPressed(points[0].x(), points[0].x()); + area->Tool->onMouseRightReleased(points[0].x(), points[0].x()); + + //QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==QColor(255,0,0,255)); + + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); + //QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); + + area->deleteLayer(0); +} + +void UnitTest::test_Rectangle_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,150); + QPoint point3(125,125); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==area->colorPicker.getSecondColor()); + + area->deleteLayer(0); +} + +void UnitTest::test_Rectangle_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,150); + QPoint point3(125,125); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(255,0,0,255)); + + area->deleteLayer(0); +} //test Triangulation -void UnitTest::test_Triangulation_Coverage(){} +void UnitTest::test_Triangulation_Coverage(){ + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + std::vector tria = IntelliTriangulation::calculateTriangles(points); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[0]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[1]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[2]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[3]), true); + + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[4]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[0]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[1]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[2]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false); +} QTEST_MAIN(UnitTest) From 84f6bc84da3d50c485b3ac55c61d6a25ab727e95 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Tue, 14 Jan 2020 22:32:17 +0100 Subject: [PATCH 17/97] all unitTest but withouzt benchmarking --- src/Tool/IntelliToolPolygon.cpp | 5 +- src/tst_unittest.cpp | 111 ++++++++++++++++---------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 452c2bc..4cc5fa7 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -19,12 +19,12 @@ IntelliToolPolygon::~IntelliToolPolygon(){ } void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ - if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); QPoint Point(x,y); isInside = IntelliTriangulation::isInPolygon(Triangles,Point); } - else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { isInside = true; } @@ -62,7 +62,6 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ void IntelliToolPolygon::onMouseRightPressed(int x, int y){ isInside = false; - isDrawing = false; isPointNearStart = false; QPointList.clear(); IntelliTool::onMouseRightPressed(x,y); diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp index dd3bc01..7432d16 100644 --- a/src/tst_unittest.cpp +++ b/src/tst_unittest.cpp @@ -859,93 +859,94 @@ void UnitTest::test_Polygon_fullDraw(){ area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPlainTool(); + area->createPolygonTool(); area->floodFill(255,0,0,255); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].x()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].x()); - area->Tool->onMouseMoved(points[1].x(), points[1].x()); + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); - area->Tool->onMouseLeftPressed(points[1].x(), points[1].x()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].x()); - area->Tool->onMouseMoved(points[2].x(), points[2].x()); + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); - area->Tool->onMouseLeftPressed(points[2].x(), points[2].x()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].x()); - area->Tool->onMouseMoved(points[3].x(), points[3].x()); + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); - area->Tool->onMouseLeftPressed(points[3].x(), points[3].x()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].x()); - area->Tool->onMouseMoved(points[0].x(), points[0].x()); + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + area->Tool->onMouseMoved(points[0].x(), points[0].y()); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].x()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].x()); + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==area->colorPicker.getFirstColor()); QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==area->colorPicker.getFirstColor()); QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==area->colorPicker.getFirstColor()); QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==area->colorPicker.getFirstColor()); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==area->colorPicker.getSecondColor()); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); + + QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==area->colorPicker.getSecondColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); area->deleteLayer(0); } void UnitTest::test_Polygon_interruptedDraw(){ - area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) + QPoint(100,000), + QPoint(000,100), + QPoint(100,200), + QPoint(200,100) }; std::vector test{ - QPoint(00,00), - QPoint(00,20), - QPoint(20,00), - QPoint(20,20), - QPoint(10,10) + QPoint(000,000), + QPoint(000,200), + QPoint(200,000), + QPoint(200,200), + QPoint(100,100) }; area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPlainTool(); + area->createPolygonTool(); area->floodFill(255,0,0,255); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].x()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].x()); - area->Tool->onMouseMoved(points[1].x(), points[1].x()); + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); - area->Tool->onMouseLeftPressed(points[1].x(), points[1].x()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].x()); - area->Tool->onMouseMoved(points[2].x(), points[2].x()); + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); - area->Tool->onMouseLeftPressed(points[2].x(), points[2].x()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].x()); - area->Tool->onMouseMoved(points[3].x(), points[3].x()); + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); - area->Tool->onMouseLeftPressed(points[3].x(), points[3].x()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].x()); - area->Tool->onMouseMoved(points[0].x(), points[0].x()); + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); - area->Tool->onMouseRightPressed(points[0].x(), points[0].x()); - area->Tool->onMouseRightReleased(points[0].x(), points[0].x()); + area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); + area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); - //QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); - //QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==QColor(255,0,0,255)); + + QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); area->deleteLayer(0); } @@ -976,7 +977,7 @@ void UnitTest::test_Rectangle_interruptedDraw(){ area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPenTool(); + area->createRectangleTool(); area->floodFill(255,0,0,255); QPoint point1(100,100); From 2a1561ecfb071e3c0dcebd24813db5494605ebac Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Wed, 15 Jan 2020 11:14:01 +0100 Subject: [PATCH 18/97] updated functionality and set true to test. Todo: Cleanub and make it activalable --- src/Tool/IntelliTool.cpp | 5 +++- src/Tool/IntelliToolPolygon.cpp | 42 +++++++++++++++++++-------------- src/Tool/IntelliToolPolygon.h | 1 - 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 7d85547..995c37e 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -79,7 +79,10 @@ void IntelliTool::mergeToolLayer(){ updatedImage.setPixelColor(x, y, clr_0); } } - activeLayer->image->setImageData(updatedImage); + activeLayer->image->setImageData(updatedImage); + if(Canvas->image->getPolygonData().size() != 0){ + activeLayer->image->setPolygon(Canvas->image->getPolygonData()); + } Area->DummyGui->UpdateGui(); } diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 452c2bc..84923c3 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -73,24 +73,30 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ isInside = false; isPointNearStart = false; isDrawing = false; - std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); - QPoint Point; - QColor colorTwo(colorPicker->getSecondColor()); - colorTwo.setAlpha(Toolsettings->getInnerAlpha()); - for(int i = 0; i < activeLayer->width; i++) { - for(int j = 0; j < activeLayer->height; j++) { - Point = QPoint(i,j); - if(IntelliTriangulation::isInPolygon(Triangles,Point)) { - this->Canvas->image->drawPixel(Point, colorTwo); - } - } - } - for(int i=0; i(QPointList.size()); i++) { - int next = static_cast((i+static_cast(1))%static_cast(QPointList.size())); - this->Canvas->image->drawLine(QPointList[static_cast(i)], QPointList[static_cast(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - } - QPointList.clear(); - IntelliTool::onMouseLeftReleased(x,y); + if(false){ + std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); + QPoint Point; + QColor colorTwo(colorPicker->getSecondColor()); + colorTwo.setAlpha(Toolsettings->getInnerAlpha()); + for(int i = 0; i < activeLayer->width; i++) { + for(int j = 0; j < activeLayer->height; j++) { + Point = QPoint(i,j); + if(IntelliTriangulation::isInPolygon(Triangles,Point)) { + this->Canvas->image->drawPixel(Point, colorTwo); + } + } + } + for(int i=0; i(QPointList.size()); i++) { + int next = static_cast((i+static_cast(1))%static_cast(QPointList.size())); + this->Canvas->image->drawLine(QPointList[static_cast(i)], QPointList[static_cast(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); + } + + } + else{ + Canvas->image->setPolygon(QPointList); + } + IntelliTool::onMouseLeftReleased(x,y); + QPointList.clear(); } } diff --git a/src/Tool/IntelliToolPolygon.h b/src/Tool/IntelliToolPolygon.h index 920a556..d4a7561 100644 --- a/src/Tool/IntelliToolPolygon.h +++ b/src/Tool/IntelliToolPolygon.h @@ -91,7 +91,6 @@ virtual void onWheelScrolled(int value) override; */ virtual void onMouseMoved(int x, int y) override; - }; #endif // INTELLITOOLPOLYGON_H From 9d1159a08ee9b3f022f9dea55c9b8bf3dbfa3e55 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 11:45:57 +0100 Subject: [PATCH 19/97] Removed First Part of the // comments in headers - TODO: IntelliPhotoGui --- src/GUI/IntelliPhotoGui.h | 20 +++++--------------- src/IntelliHelper/IntelliColorPicker.h | 2 +- src/IntelliHelper/IntelliRenderSettings.h | 2 +- src/IntelliHelper/IntelliToolsettings.h | 2 +- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 43aa03e..b3fdaf8 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -11,7 +11,6 @@ #include #include -// PaintingArea used to paint the image class PaintingArea; class IntelliTool; @@ -19,12 +18,9 @@ class IntelliTool; class IntelliColorPicker; /*! - * \brief The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program + * \brief The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program */ class IntelliPhotoGui : public QMainWindow { -// Declares our class as a QObject which is the base class -// for all Qt objects -// QObjects handle events Q_OBJECT public: /*! @@ -35,15 +31,15 @@ IntelliPhotoGui(); void UpdateGui(); protected: -// Function used to close an event +/*! + * \brief The closeEvent function handles closing events +*/ void closeEvent(QCloseEvent*event) override; private slots: -// meta slots here (need further ) void slotOpen(); void slotSave(); -// layer slots here void slotCreateNewLayer(); void slotDeleteLayer(); void slotClearActiveLayer(); @@ -56,16 +52,13 @@ void slotPositionMoveRight(); void slotMoveLayerUp(); void slotMoveLayerDown(); -//Rendersetting slots here void slotUpdateRenderSettingsOn(); void slotUpdateRenderSettingsOff(); -// color Picker slots here void slotSetFirstColor(); void slotSetSecondColor(); void slotSwapColor(); -// tool slots here void slotCreatePenTool(); void slotCreatePlainTool(); void slotCreateLineTool(); @@ -74,7 +67,6 @@ void slotCreateCircleTool(); void slotCreatePolygonTool(); void slotCreateFloodFillTool(); -// slots for dialogs void slotAboutDialog(); void slotEnterPressed(); @@ -85,12 +77,10 @@ void slotSetInnerAlpha(); void slotResetTools(); private: -// Will tie user actions to functions void createActions(); void createMenus(); -// setup GUI elements void createGui(); -// set style of the GUI +// Set the style of the GUI void setIntelliStyle(); // Will check if changes have occurred since last save diff --git a/src/IntelliHelper/IntelliColorPicker.h b/src/IntelliHelper/IntelliColorPicker.h index 4ea686b..8a8416a 100644 --- a/src/IntelliHelper/IntelliColorPicker.h +++ b/src/IntelliHelper/IntelliColorPicker.h @@ -61,4 +61,4 @@ QColor firstColor; QColor secondColor; }; -#endif // INTELLITOOLSETCOLORTOOL_H +#endif diff --git a/src/IntelliHelper/IntelliRenderSettings.h b/src/IntelliHelper/IntelliRenderSettings.h index a0be040..2ad627d 100644 --- a/src/IntelliHelper/IntelliRenderSettings.h +++ b/src/IntelliHelper/IntelliRenderSettings.h @@ -22,4 +22,4 @@ private: bool fastRenderering = true; }; -#endif // INTELLIRENDERSETTINGS_H +#endif diff --git a/src/IntelliHelper/IntelliToolsettings.h b/src/IntelliHelper/IntelliToolsettings.h index 1a63bbc..cc637e6 100644 --- a/src/IntelliHelper/IntelliToolsettings.h +++ b/src/IntelliHelper/IntelliToolsettings.h @@ -26,4 +26,4 @@ int innerAlpha; LineStyle Linestyle; }; -#endif // INTELLITOOLSETTINGS_H +#endif From c4467b70b81b70011d56b1c3fba0f0e911efb3c4 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 11:47:51 +0100 Subject: [PATCH 20/97] Removed Rest of the // comments in headers --- src/Layer/PaintingArea.h | 9 +-------- src/Tool/IntelliToolCircle.h | 2 +- src/Tool/IntelliToolFloodFill.h | 2 +- src/Tool/IntelliToolLine.h | 2 +- src/Tool/IntelliToolPen.h | 2 +- src/Tool/IntelliToolPlain.h | 2 +- src/Tool/IntelliToolPolygon.h | 2 +- src/Tool/IntelliToolRectangle.h | 2 +- 8 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 95eef55..528f605 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -36,9 +36,6 @@ struct LayerObject { */ class PaintingArea : public QWidget { -// Declares our class as a QObject which is the base class -// for all Qt objects -// QObjects handle events Q_OBJECT friend IntelliTool; friend IntelliPhotoGui; @@ -181,7 +178,6 @@ IntelliToolsettings Toolsettings; IntelliColorPicker colorPicker; public slots: -// Events to handle /*! * \brief The slotActivateLayer method handles the event of selecting one layer as active * \param a - idx of the layer to be active @@ -198,11 +194,9 @@ void mouseMoveEvent(QMouseEvent*event) override; void mouseReleaseEvent(QMouseEvent*event) override; void wheelEvent(QWheelEvent*event) override; -// Updates the painting area where we are painting + void paintEvent(QPaintEvent*event) override; -// Makes sure the area we are drawing on remains -// as large as the widget void resizeEvent(QResizeEvent*event) override; private: @@ -226,7 +220,6 @@ void drawLayers(bool forSaving=false); void resizeLayer(QImage*image_res, const QSize &newSize); -// Helper for Tool bool createTempTopLayer(int idx); }; diff --git a/src/Tool/IntelliToolCircle.h b/src/Tool/IntelliToolCircle.h index d75665d..46a4340 100644 --- a/src/Tool/IntelliToolCircle.h +++ b/src/Tool/IntelliToolCircle.h @@ -74,4 +74,4 @@ virtual void onWheelScrolled(int value) override; virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLITOOLCIRCLE_H +#endif diff --git a/src/Tool/IntelliToolFloodFill.h b/src/Tool/IntelliToolFloodFill.h index 3e93699..21b7c94 100644 --- a/src/Tool/IntelliToolFloodFill.h +++ b/src/Tool/IntelliToolFloodFill.h @@ -64,4 +64,4 @@ virtual void onWheelScrolled(int value) override; virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLITOOLFLOODFILL_H +#endif diff --git a/src/Tool/IntelliToolLine.h b/src/Tool/IntelliToolLine.h index 1bae946..69ca304 100644 --- a/src/Tool/IntelliToolLine.h +++ b/src/Tool/IntelliToolLine.h @@ -69,4 +69,4 @@ virtual void onWheelScrolled(int value) override; virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLITOOLLINE_H +#endif diff --git a/src/Tool/IntelliToolPen.h b/src/Tool/IntelliToolPen.h index 39aab9e..cee28ed 100644 --- a/src/Tool/IntelliToolPen.h +++ b/src/Tool/IntelliToolPen.h @@ -67,4 +67,4 @@ virtual void onWheelScrolled(int value) override; virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLITOOLPEN_H +#endif diff --git a/src/Tool/IntelliToolPlain.h b/src/Tool/IntelliToolPlain.h index c4b294c..8baca3c 100644 --- a/src/Tool/IntelliToolPlain.h +++ b/src/Tool/IntelliToolPlain.h @@ -62,4 +62,4 @@ virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLITOOLFLOODFILLTOOL_H +#endif diff --git a/src/Tool/IntelliToolPolygon.h b/src/Tool/IntelliToolPolygon.h index 920a556..707e98d 100644 --- a/src/Tool/IntelliToolPolygon.h +++ b/src/Tool/IntelliToolPolygon.h @@ -94,4 +94,4 @@ virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLITOOLPOLYGON_H +#endif diff --git a/src/Tool/IntelliToolRectangle.h b/src/Tool/IntelliToolRectangle.h index 041e860..2ead165 100644 --- a/src/Tool/IntelliToolRectangle.h +++ b/src/Tool/IntelliToolRectangle.h @@ -73,4 +73,4 @@ virtual void onWheelScrolled(int value) override; virtual void onMouseMoved(int x, int y) override; }; -#endif // INTELLIRECTANGLETOOL_H +#endif From af5a05faf865becd48da3dc2c0f859ff299795c1 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 12:01:17 +0100 Subject: [PATCH 21/97] Removed Linestyle from the project --- src/IntelliHelper/IntelliToolsettings.cpp | 7 +------ src/IntelliHelper/IntelliToolsettings.h | 9 --------- src/Tool/IntelliToolLine.cpp | 13 +------------ src/Tool/IntelliToolLine.h | 2 +- 4 files changed, 3 insertions(+), 28 deletions(-) diff --git a/src/IntelliHelper/IntelliToolsettings.cpp b/src/IntelliHelper/IntelliToolsettings.cpp index 7a4219c..f973d66 100644 --- a/src/IntelliHelper/IntelliToolsettings.cpp +++ b/src/IntelliHelper/IntelliToolsettings.cpp @@ -4,8 +4,7 @@ IntelliToolsettings::IntelliToolsettings() { lineWidth = 1; - innerAlpha = 255; - Linestyle = LineStyle::SOLID_LINE; + innerAlpha = 255; } IntelliToolsettings::~IntelliToolsettings(){ @@ -47,7 +46,3 @@ void IntelliToolsettings::setInnerAlpha(int innerAlpha){ } this->innerAlpha = innerAlpha; } - -IntelliToolsettings::LineStyle IntelliToolsettings::getLinestyle(){ - return Linestyle; -} diff --git a/src/IntelliHelper/IntelliToolsettings.h b/src/IntelliHelper/IntelliToolsettings.h index cc637e6..4238945 100644 --- a/src/IntelliHelper/IntelliToolsettings.h +++ b/src/IntelliHelper/IntelliToolsettings.h @@ -3,13 +3,6 @@ class IntelliToolsettings { public: -/*! - * \brief The LineStyle enum classifing all ways of drawing a line. - */ -enum class LineStyle { - SOLID_LINE, - DOTTED_LINE -}; IntelliToolsettings(); virtual ~IntelliToolsettings(); int getLineWidth(); @@ -18,12 +11,10 @@ void setLineWidth(int LineWidth); int getInnerAlpha(); void setInnerAlpha(); void setInnerAlpha(int innerAlpha); -LineStyle getLinestyle(); private: int lineWidth; int innerAlpha; -LineStyle Linestyle; }; #endif diff --git a/src/Tool/IntelliToolLine.cpp b/src/Tool/IntelliToolLine.cpp index 120d3a2..8ce3c6f 100644 --- a/src/Tool/IntelliToolLine.cpp +++ b/src/Tool/IntelliToolLine.cpp @@ -40,18 +40,7 @@ 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(static_cast(p2.y()-p1.y())/static_cast(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); } diff --git a/src/Tool/IntelliToolLine.h b/src/Tool/IntelliToolLine.h index 69ca304..f5e7e34 100644 --- a/src/Tool/IntelliToolLine.h +++ b/src/Tool/IntelliToolLine.h @@ -16,7 +16,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. */ From 70ed416dc6f2c25a90088306b3bd47ce49ad9937 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 12:02:36 +0100 Subject: [PATCH 22/97] Uncrustified Files --- src/GUI/IntelliPhotoGui.h | 4 ++-- src/IntelliHelper/IntelliToolsettings.cpp | 2 +- src/Tool/IntelliToolLine.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index b3fdaf8..dda03e0 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -32,8 +32,8 @@ void UpdateGui(); protected: /*! - * \brief The closeEvent function handles closing events -*/ + * \brief The closeEvent function handles closing events + */ void closeEvent(QCloseEvent*event) override; private slots: diff --git a/src/IntelliHelper/IntelliToolsettings.cpp b/src/IntelliHelper/IntelliToolsettings.cpp index f973d66..fd67d5b 100644 --- a/src/IntelliHelper/IntelliToolsettings.cpp +++ b/src/IntelliHelper/IntelliToolsettings.cpp @@ -4,7 +4,7 @@ IntelliToolsettings::IntelliToolsettings() { lineWidth = 1; - innerAlpha = 255; + innerAlpha = 255; } IntelliToolsettings::~IntelliToolsettings(){ diff --git a/src/Tool/IntelliToolLine.cpp b/src/Tool/IntelliToolLine.cpp index 8ce3c6f..c7c7340 100644 --- a/src/Tool/IntelliToolLine.cpp +++ b/src/Tool/IntelliToolLine.cpp @@ -40,7 +40,7 @@ void IntelliToolLine::onMouseMoved(int x, int y){ if(this->isDrawing) { this->Canvas->image->drawPlain(Qt::transparent); QPoint next(x,y); - this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),Toolsettings->getLineWidth()); + this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),Toolsettings->getLineWidth()); } IntelliTool::onMouseMoved(x,y); } From 94dc3720463dd1a7f85b5ae9872e76d634a3b432 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 12:17:03 +0100 Subject: [PATCH 23/97] Update cppcheck_errors.txt --- cppcheck_errors.txt | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index edc41a2..a11d70c 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -1,6 +1,3 @@ -src/GUI/IntelliPhotoGui.cpp:83:15: style: Variable 'layer' is assigned a value that is never used. [unreadVariable] - int layer = paintingArea->addLayer(width,height,0,0); - ^ src/IntelliHelper/IntelliColorPicker.cpp:4:3: performance: Variable 'firstColor' is assigned in constructor body. Consider performing initialization in initialization list. [useInitializationList] firstColor = {255,0,0,255}; ^ @@ -10,7 +7,7 @@ src/IntelliHelper/IntelliColorPicker.cpp:5:3: performance: Variable 'secondColor src/IntelliHelper/IntelliTriangulation.cpp:116:63: style: Parameter 'triangles' can be declared with const [constParameter] bool IntelliTriangulation::isInPolygon(std::vector &triangles, QPoint &point){ ^ -src/Layer/PaintingArea.cpp:335:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] +src/Layer/PaintingArea.cpp:357:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] if(activeLayer!=-1 && activeLayer>0) { ^ src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::ActiveType' is not initialized in the constructor. [uninitMemberVar] @@ -22,34 +19,28 @@ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, In src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::Canvas' is not initialized in the constructor. [uninitMemberVar] IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ ^ -src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMin' shadows outer variable [shadowVariable] +src/Tool/IntelliToolCircle.cpp:42:9: style: Local variable 'yMin' shadows outer variable [shadowVariable] int yMin = static_cast(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:19:7: note: Shadowed declaration +src/Tool/IntelliToolCircle.cpp:18:7: note: Shadowed declaration int yMin, yMax, xMin, xMax; ^ -src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable +src/Tool/IntelliToolCircle.cpp:42:9: note: Shadow variable int yMin = static_cast(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:44:9: style: Local variable 'yMax' shadows outer variable [shadowVariable] +src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMax' shadows outer variable [shadowVariable] int yMax = static_cast(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:19:13: note: Shadowed declaration +src/Tool/IntelliToolCircle.cpp:18:13: note: Shadowed declaration int yMin, yMax, xMin, xMax; ^ -src/Tool/IntelliToolCircle.cpp:44:9: note: Shadow variable +src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable int yMax = static_cast(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:16:13: style: Variable 'outer' is assigned a value that is never used. [unreadVariable] - int outer = radius+20; - ^ -src/Tool/IntelliToolLine.cpp:51:13: style: Variable 'c' is assigned a value that is never used. [unreadVariable] - int c = lineStartingPoint.y()-lineStartingPoint.x()*m; - ^ src/Tool/IntelliToolPolygon.h:25:6: warning: The class 'IntelliToolPolygon' defines member variable with name 'isDrawing' also defined in its parent class 'IntelliTool'. [duplInheritedMember] bool isDrawing; ^ -src/Tool/IntelliTool.h:68:6: note: Parent variable 'IntelliTool::isDrawing' +src/Tool/IntelliTool.h:69:6: note: Parent variable 'IntelliTool::isDrawing' bool isDrawing = false; ^ src/Tool/IntelliToolPolygon.h:25:6: note: Derived variable 'IntelliToolPolygon::isDrawing' @@ -58,34 +49,34 @@ bool isDrawing; src/GUI/IntelliPhotoGui.cpp:23:0: style: The function 'closeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:271:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:286:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:255:0: style: The function 'mousePressEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:267:0: style: The function 'mousePressEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:281:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:299:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:307:0: style: The function 'paintEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:329:0: style: The function 'paintEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:318:0: style: The function 'resizeEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:340:0: style: The function 'resizeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:323:0: style: The function 'resizeLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:345:0: style: The function 'resizeLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:175:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:187:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] ^ -src/GUI/IntelliPhotoGui.cpp:157:0: style: The function 'slotClearActiveLayer' is never used. [unusedFunction] +src/GUI/IntelliPhotoGui.cpp:162:0: style: The function 'slotClearActiveLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:83:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:95:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:294:0: style: The function 'wheelEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:314:0: style: The function 'wheelEvent' is never used. [unusedFunction] ^ nofile:0:0: information: Cppcheck cannot find all the include files (use --check-config for details) [missingInclude] From 8b8b6965c36569e2a0d404653bf5afb7f4b0d218 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 12:33:00 +0100 Subject: [PATCH 24/97] Added Release Script Draft --- release.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 release.sh diff --git a/release.sh b/release.sh new file mode 100644 index 0000000..465d442 --- /dev/null +++ b/release.sh @@ -0,0 +1,14 @@ +# Run CPP Check +cppcheck --enable=all --output-file=cppcheck_errors.txt src/ +# Uncrustify Files +find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} +# Run Unit Tests + +# Remove Overhead Folders/ Files +rm -r src/build-* +rm -r build-*/ +rm -r Examples/ +rm src/IntelliPhoto.pro.user + +# Run Doxygen +doxygen conf/intelliphoto_dox From f575da20d7b93b1b45055863b9462f58a21cfc52 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Wed, 15 Jan 2020 12:35:29 +0100 Subject: [PATCH 25/97] Updated it works kinda TOdo: fix BUGS --- src/Image/IntelliShapedImage.cpp | 22 ++++++++++++++++--- src/Layer/PaintingArea.cpp | 20 ++++++++++++++++-- src/Layer/PaintingArea.h | 6 ++++++ src/Tool/IntelliTool.cpp | 36 ++++++++++++++++---------------- src/Tool/IntelliToolPolygon.cpp | 25 +++++++++++++++------- src/Tool/IntelliToolPolygon.h | 8 ++++++- 6 files changed, 86 insertions(+), 31 deletions(-) diff --git a/src/Image/IntelliShapedImage.cpp b/src/Image/IntelliShapedImage.cpp index 359768e..0911288 100644 --- a/src/Image/IntelliShapedImage.cpp +++ b/src/Image/IntelliShapedImage.cpp @@ -27,14 +27,17 @@ IntelliImage* IntelliShapedImage::getDeepCopy(){ } void IntelliShapedImage::calculateVisiblity(){ - if(fastRenderering) { + if(polygonData.size()<2){ + return; + } + if(fastRenderering) { this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); } if(polygonData.size()<=2) { QColor clr; for(int y=0; y& polygonData){ this->polygonData.push_back(QPoint(element.x(), element.y())); } triangles = IntelliTriangulation::calculateTriangles(polygonData); + if(fastRenderering){ + imageData = imageData.convertToFormat(QImage::Format_ARGB32); + } + for(int y = 0; y=0&&idx(layerBundle.size())) { if(layerBundle[static_cast(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE){ - qDebug() << "Todo Implement here set Polygon"; + delete this->Tool; + this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true); } } } @@ -438,5 +439,20 @@ IntelliImage* PaintingArea::getImageOfActiveLayer(){ if(activeLayer<0) { return nullptr; } - return layerBundle[activeLayer].image; + return layerBundle[static_cast(activeLayer)].image; +} + +QImage PaintingArea::getImageDataOfActiveLayer(){ + QImage returnImage; + if(activeLayer<0) { + returnImage = QImage(QSize(10,10),QImage::Format_ARGB32); + returnImage.fill(QColor(255,255,255,255)); + } + else{ + returnImage = layerBundle[static_cast(activeLayer)].image->getImageData(); + if(renderSettings.isFastRenderering()){ + returnImage = returnImage.convertToFormat(QImage::Format_ARGB32); + } + } + return returnImage; } diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 5e3d03a..ac394f5 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -182,6 +182,12 @@ int getNumberOfActiveLayer(); IntelliImage* getImageOfActiveLayer(); +/*! + * \brief getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer it return a 10*10 white picture) + * \return return the image as an rgba32bit qImage + */ +QImage getImageDataOfActiveLayer(); + IntelliToolsettings Toolsettings; IntelliColorPicker colorPicker; diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 995c37e..1ec2d0c 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -33,7 +33,7 @@ void IntelliTool::onMouseLeftPressed(int x, int y){ void IntelliTool::onMouseLeftReleased(int x, int y){ if(isDrawing) { isDrawing=false; - this->mergeToolLayer(); + this->mergeToolLayer(); this->deleteToolLayer(); activeLayer->image->calculateVisiblity(); } @@ -62,25 +62,25 @@ void IntelliTool::mergeToolLayer(){ QColor clr_1; QImage updatedImage = activeLayer->image->getImageData(); - for(int y=0; yheight; y++) { - for(int x=0; xwidth; x++) { - clr_0=updatedImage.pixelColor(x,y); - clr_1=Canvas->image->imageData.pixelColor(x,y); - float t = static_cast(clr_1.alpha())/255.f; - int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); - int g =static_cast(static_cast(clr_1.green())*(t)+static_cast(clr_0.green())*(1.f-t)+0.5f); - int b =static_cast(static_cast(clr_1.blue())*(t)+static_cast(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); - clr_0.setAlpha(a); + for(int y=0; yheight; y++) { + for(int x=0; xwidth; x++) { + clr_0=updatedImage.pixelColor(x,y); + clr_1=Canvas->image->imageData.pixelColor(x,y); + float t = static_cast(clr_1.alpha())/255.f; + int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); + int g =static_cast(static_cast(clr_1.green())*(t)+static_cast(clr_0.green())*(1.f-t)+0.5f); + int b =static_cast(static_cast(clr_1.blue())*(t)+static_cast(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); + clr_0.setAlpha(a); - updatedImage.setPixelColor(x, y, clr_0); - } - } + updatedImage.setPixelColor(x, y, clr_0); + } + } activeLayer->image->setImageData(updatedImage); - if(Canvas->image->getPolygonData().size() != 0){ + if(Canvas->image->getPolygonData().size() > 0){ activeLayer->image->setPolygon(Canvas->image->getPolygonData()); } Area->DummyGui->UpdateGui(); diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 84923c3..32c416f 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -4,11 +4,12 @@ #include #include -IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) +IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon) : IntelliTool(Area, colorPicker, Toolsettings){ isPointNearStart = false; isDrawing = false; isInside = false; + this->isSettingPolygon = isSettingPolygon; this->ActiveType = Tooltype::POLYGON; } @@ -19,10 +20,13 @@ IntelliToolPolygon::~IntelliToolPolygon(){ } void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ - if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); QPoint Point(x,y); isInside = IntelliTriangulation::isInPolygon(Triangles,Point); + if(isSettingPolygon){ + isInside = true; + } } else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { isInside = true; @@ -36,14 +40,18 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ QPointList.push_back(drawingPoint); this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - this->Canvas->image->calculateVisiblity(); + if(!isSettingPolygon){ + this->Canvas->image->calculateVisiblity(); + } } else if(isDrawing && isNearStart(x,y,QPointList.front())) { if(QPointList.size() > 2) { isPointNearStart = true; this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - this->Canvas->image->calculateVisiblity(); - } + if(!isSettingPolygon){ + this->Canvas->image->calculateVisiblity(); + } + } else{ isInside = false; isDrawing = false; @@ -56,7 +64,9 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ QPoint drawingPoint(x,y); QPointList.push_back(drawingPoint); this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - this->Canvas->image->calculateVisiblity(); + if(!isSettingPolygon){ + this->Canvas->image->calculateVisiblity(); + } } } @@ -73,7 +83,7 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ isInside = false; isPointNearStart = false; isDrawing = false; - if(false){ + if(!isSettingPolygon){ std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); QPoint Point; QColor colorTwo(colorPicker->getSecondColor()); @@ -94,6 +104,7 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ } else{ Canvas->image->setPolygon(QPointList); + Canvas->image->setImageData(Area->getImageDataOfActiveLayer()); } IntelliTool::onMouseLeftReleased(x,y); QPointList.clear(); diff --git a/src/Tool/IntelliToolPolygon.h b/src/Tool/IntelliToolPolygon.h index d4a7561..d50adc4 100644 --- a/src/Tool/IntelliToolPolygon.h +++ b/src/Tool/IntelliToolPolygon.h @@ -29,6 +29,11 @@ bool isDrawing; */ bool isInside; +/*! + * \brief isSettingPolygon is the flag for calling the setPolygon method. + */ +bool isSettingPolygon; + /*! * \brief PointIsNearStart true, when last click near startpoint, else false. */ @@ -43,8 +48,9 @@ public: * \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. + * \param isSettingPolygon - The flag for the set polygon method, standart is false */ -IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); +IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon = false); /*! * \brief A Destructor. */ From 5773f62feddcd4f3f52ae5b7df0bc0fa0d86f663 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:04:52 +0100 Subject: [PATCH 26/97] Added Doxyfile --- conf/intelliphoto_dox | 382 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 382 insertions(+) create mode 100644 conf/intelliphoto_dox diff --git a/conf/intelliphoto_dox b/conf/intelliphoto_dox new file mode 100644 index 0000000..1326066 --- /dev/null +++ b/conf/intelliphoto_dox @@ -0,0 +1,382 @@ +# Doxyfile 1.8.16 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = IntelliPhoto +PROJECT_NUMBER = 0.5 +PROJECT_BRIEF = +PROJECT_LOGO = +OUTPUT_DIRECTORY = docs +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +OUTPUT_TEXT_DIRECTION = None +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +JAVADOC_BANNER = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 +ALIASES = +TCL_SUBST = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 5 +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = NO +LOOKUP_CACHE_SIZE = 0 +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = NO +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +HIDE_COMPOUND_REFERENCE= NO +SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = src +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +CLANG_ASSISTED_PARSING = NO +CLANG_OPTIONS = +CLANG_DATABASE_PATH = +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 187 +HTML_COLORSTYLE_SAT = 5 +HTML_COLORSTYLE_GAMMA = 150 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = NO +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = +MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +RTF_SOURCE_CODE = NO +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES From 4ca64ff8600c2ef35294984b3f6f8a95ddb5a849 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:08:19 +0100 Subject: [PATCH 27/97] Update release.sh --- release.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/release.sh b/release.sh index 465d442..97e40f0 100644 --- a/release.sh +++ b/release.sh @@ -1,14 +1,21 @@ # Run CPP Check +echo "Running CPPCheck..." cppcheck --enable=all --output-file=cppcheck_errors.txt src/ +echo "CPPCheck finished" # Uncrustify Files +echo "Running Uncrustify..." find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} +echo "Uncrustify finished." # Run Unit Tests # Remove Overhead Folders/ Files +echo "Cleaning directory..." rm -r src/build-* rm -r build-*/ rm -r Examples/ rm src/IntelliPhoto.pro.user - +echo "Directory cleaned." # Run Doxygen +echo "Running Doxygen..." doxygen conf/intelliphoto_dox +echo "Doxygen finished." From b198d0303ca023eed40dd5c5830f7be2f655e800 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:09:44 +0100 Subject: [PATCH 28/97] Added executing rights for release script --- release.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 release.sh diff --git a/release.sh b/release.sh old mode 100644 new mode 100755 From 5ef800fdd5ca02ade455a931aabb2cb5c7097173 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:16:59 +0100 Subject: [PATCH 29/97] Update release.sh --- release.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/release.sh b/release.sh index 97e40f0..9aa0f5c 100755 --- a/release.sh +++ b/release.sh @@ -7,7 +7,9 @@ echo "Running Uncrustify..." find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} echo "Uncrustify finished." # Run Unit Tests +echo "Running unit tests..." +echo "Finished unit testing." # Remove Overhead Folders/ Files echo "Cleaning directory..." rm -r src/build-* @@ -19,3 +21,6 @@ echo "Directory cleaned." echo "Running Doxygen..." doxygen conf/intelliphoto_dox echo "Doxygen finished." +# Building +qmake src/IntelliPhoto.pro -spec macx-clang CONFIG+=x86_64 CONFIG+=qtquickcompiler && make qmake_all +make clean -j4 build-IntelliPhoto-Desktop_Qt_5_14_0_clang_64bit-Release From 1f0b856079353fd638cd47aa73136720953ffcb2 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Wed, 15 Jan 2020 14:23:14 +0100 Subject: [PATCH 30/97] FIxed all bugs and removed dead code my job is done here ready to be merge --- src/GUI/IntelliPhotoGui.cpp | 30 +----------- src/GUI/IntelliPhotoGui.h | 1 - src/Layer/PaintingArea.cpp | 84 +++++++++++++-------------------- src/Layer/PaintingArea.h | 16 +++---- src/Tool/IntelliTool.cpp | 5 +- src/Tool/IntelliToolPolygon.cpp | 11 +++-- 6 files changed, 53 insertions(+), 94 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 01913b4..d7b207b 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -202,35 +202,6 @@ void IntelliPhotoGui::slotMoveLayerDown(){ update(); } -void IntelliPhotoGui::slotClearActiveLayer(){ - // Stores button value - bool ok1, ok2, ok3, ok4; - - // "Red Input" is the title of the window - // the next tr is the text to display - // Define the standard Value, min, max, step and ok button - int red = QInputDialog::getInt(this, tr("Red Input"), - tr("Red:"), - 255,0, 255,1, &ok1); - // "Green Input" is the title of the window - int green = QInputDialog::getInt(this, tr("Green Input"), - tr("Green:"), - 255,0, 255, 1, &ok2); - // "Blue Input" is the title of the window - int blue = QInputDialog::getInt(this, tr("Blue Input"), - tr("Blue:"), - 255,0, 255, 1, &ok3); - // "Alpha Input" is the title of the window - int alpha = QInputDialog::getInt(this, tr("Alpha Input"), - tr("Alpha:"), - 255,0, 255, 1, &ok4); - if (ok1&&ok2&&ok3&&ok4) - { - paintingArea->floodFill(red, green, blue, alpha); - UpdateGui(); - } -} - void IntelliPhotoGui::slotSetActiveLayer(){ // Stores button value bool ok1; @@ -788,6 +759,7 @@ void IntelliPhotoGui::setIntelliStyle(){ this->helpMenu->setPalette(Palette); this->renderMenu->setPalette(Palette); this->toolMenu->setPalette(Palette); + this->layerCreationMenu->setPalette(Palette); this->layerMenu->setPalette(Palette); this->colorMenu->setPalette(Palette); this->toolCreationMenu->setPalette(Palette); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 6d32933..52a022a 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -47,7 +47,6 @@ void slotSave(); void slotCreateNewRasterLayer(); void slotCreateNewShapedLayer(); void slotDeleteLayer(); -void slotClearActiveLayer(); void slotSetActiveLayer(); void slotSetActiveAlpha(); void slotSetPolygon(); diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index a9faacf..9a99f78 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -18,24 +18,13 @@ #include "Tool/IntelliToolFloodFill.h" #include "Tool/IntelliToolPolygon.h" + PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) : QWidget(parent){ this->Tool = nullptr; this->setLayerDimensions(maxWidth, maxHeight); - this->addLayer(200,200,0,0,IntelliImage::ImageType::SHAPEDIMAGE); - layerBundle[0].image->drawPlain(QColor(0,0,255,255)); - std::vector polygon; - polygon.push_back(QPoint(100,000)); - polygon.push_back(QPoint(200,100)); - polygon.push_back(QPoint(100,200)); - polygon.push_back(QPoint(000,100)); - layerBundle[0].image->setPolygon(polygon); - this->addLayer(200,200,150,150,IntelliImage::ImageType::RASTERIMAGE); - layerBundle[1].image->drawPlain(QColor(0,255,0,255)); - layerBundle[1].alpha=200; - - activeLayer=0; + activeLayer=-1; } PaintingArea::~PaintingArea(){ @@ -64,6 +53,7 @@ void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOffset, IntelliImage::ImageType type){ LayerObject newLayer; + updateTools(); newLayer.width = width; newLayer.height = height; newLayer.widthOffset = widthOffset; @@ -80,7 +70,10 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff } -void PaintingArea::deleteLayer(int idx){ +void PaintingArea::deleteLayer(int idx, bool isTool){ + if(!isTool){ + updateTools(); + } if(idx(layerBundle.size())) { this->layerBundle.erase(layerBundle.begin()+idx); if(activeLayer>=idx) { @@ -100,7 +93,8 @@ void PaintingArea::slotDeleteActiveLayer(){ } void PaintingArea::setLayerActive(int idx){ - if(idx>=0&&idx(layerBundle.size())) { + updateTools(); + if(idx>=0&&idx(layerBundle.size())) { this->activeLayer=idx; } } @@ -115,6 +109,7 @@ void PaintingArea::setPolygon(int idx){ if(layerBundle[static_cast(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE){ delete this->Tool; this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true); + isSettingPolygon = true; } } } @@ -155,36 +150,14 @@ bool PaintingArea::save(const QString &filePath, const char*fileFormat){ } } -// Color the image area with white -void PaintingArea::floodFill(int r, int g, int b, int a){ - if(this->activeLayer==-1) { - return; - } - IntelliImage* active = layerBundle[static_cast(activeLayer)].image; - active->drawPlain(QColor(r, g, b, a)); - update(); -} - void PaintingArea::movePositionActive(int x, int y){ - if(Tool!=nullptr) { - if(Tool->getIsDrawing()) { - IntelliTool* temp = copyActiveTool(); - delete this->Tool; - this->Tool = temp; - } - } + updateTools(); layerBundle[static_cast(activeLayer)].widthOffset += x; layerBundle[static_cast(activeLayer)].heightOffset += y; } void PaintingArea::moveActiveLayer(int idx){ - if(Tool != nullptr) { - if(Tool->getIsDrawing()) { - IntelliTool* temp = copyActiveTool(); - delete this->Tool; - this->Tool = temp; - } - } + updateTools(); if(idx==1) { this->selectLayerUp(); }else if(idx==-1) { @@ -193,14 +166,8 @@ void PaintingArea::moveActiveLayer(int idx){ } void PaintingArea::slotActivateLayer(int a){ - if(Tool != nullptr) { - if(Tool->getIsDrawing()) { - IntelliTool* temp = copyActiveTool(); - delete this->Tool; - this->Tool = temp; - } - } - if(a>=0 && a < static_cast(layerBundle.size())) { + updateTools(); + if(a>=0 && a < static_cast(layerBundle.size())) { this->setLayerActive(a); } } @@ -343,7 +310,7 @@ void PaintingArea::paintEvent(QPaintEvent*event){ update(); } -// Resize the image to slightly larger then the main window +//TODOJ Resize the image to slightly larger then the main window // to cut down on the need to resize the image void PaintingArea::resizeEvent(QResizeEvent*event){ //TODO wait till tool works @@ -355,14 +322,16 @@ void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){ } void PaintingArea::selectLayerUp(){ - if(activeLayer!=-1 && static_cast(activeLayer)(activeLayer)(activeLayer)], layerBundle[static_cast(activeLayer+1)]); activeLayer++; } } void PaintingArea::selectLayerDown(){ - if(activeLayer!=-1 && activeLayer>0) { + updateTools(); + if(activeLayer!=-1 && activeLayer>0) { std::swap(layerBundle[static_cast(activeLayer)], layerBundle[static_cast(activeLayer-1)]); activeLayer--; } @@ -456,3 +425,18 @@ QImage PaintingArea::getImageDataOfActiveLayer(){ } return returnImage; } + +void PaintingArea::updateTools(){ + if(Tool!=nullptr) { + if(Tool->getIsDrawing()){ + IntelliTool* temp = copyActiveTool(); + delete this->Tool; + this->Tool = temp; + } + if(isSettingPolygon){ + delete this->Tool; + this->Tool = nullptr; + isSettingPolygon = false; + } + } +} diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index ac394f5..782a1b7 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -102,8 +102,9 @@ int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffs /*! * \brief The deleteLayer method removes a layer at a given idx * \param idx - The index of the layer to be removed + * \param isTool - Is the flag for when a tool uses this function. */ -void deleteLayer(int idx); +void deleteLayer(int idx, bool isTool = false); /*! * \brief The setLayerToActive method marks a specific layer as active * \param idx - The index of the layer to be active @@ -120,14 +121,6 @@ void setLayerAlpha(int idx, int alpha); * \param idx - represents the number of the layer with should be transformed */ void setPolygon(int idx); -/*! - * \brief The floodFill method fills a the active layer with a given color - * \param r - Red value of the color the layer should be filled with - * \param g - Green value of the color the layer should be filled with - * \param b - Blue value of the color the layer should be filled with - * \param a - Alpha value of the color the layer should be filled with - */ -void floodFill(int r, int g, int b, int a); /*! * \brief The movePositionActive method moves the active layer to certain position * \param x - The x value the new center of the layer should be at @@ -226,6 +219,8 @@ QImage* Canvas; int maxWidth; int maxHeight; +bool isSettingPolygon = false; + IntelliRenderSettings renderSettings; IntelliTool* Tool; IntelliPhotoGui* DummyGui; @@ -239,6 +234,9 @@ void resizeLayer(QImage*image_res, const QSize &newSize); // Helper for Tool bool createTempTopLayer(int idx); + +//this function is needed to avoid errors in inputhandeling if a layer has changed +void updateTools(); }; #endif diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 1ec2d0c..a41ee21 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -32,10 +32,11 @@ 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(); + } } @@ -87,7 +88,7 @@ void IntelliTool::mergeToolLayer(){ } void IntelliTool::deleteToolLayer(){ - Area->deleteLayer(Area->activeLayer+1); + Area->deleteLayer(Area->activeLayer+1, true); this->Canvas=nullptr; } diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 32c416f..f4f5105 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -21,9 +21,14 @@ IntelliToolPolygon::~IntelliToolPolygon(){ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { - std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); - QPoint Point(x,y); - isInside = IntelliTriangulation::isInPolygon(Triangles,Point); + if(Area->getPolygonDataOfRealLayer().size()>2){ + std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); + QPoint Point(x,y); + isInside = IntelliTriangulation::isInPolygon(Triangles,Point); + } + else{ + isInside = true; + } if(isSettingPolygon){ isInside = true; } From 702f667295c5956f050b67aeee4cb167bed17e8d Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:32:37 +0100 Subject: [PATCH 31/97] Update release.sh --- release.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/release.sh b/release.sh index 9aa0f5c..1652adc 100755 --- a/release.sh +++ b/release.sh @@ -1,3 +1,5 @@ +# Discarding local changes +git reset --hard # Run CPP Check echo "Running CPPCheck..." cppcheck --enable=all --output-file=cppcheck_errors.txt src/ @@ -22,5 +24,6 @@ echo "Running Doxygen..." doxygen conf/intelliphoto_dox echo "Doxygen finished." # Building -qmake src/IntelliPhoto.pro -spec macx-clang CONFIG+=x86_64 CONFIG+=qtquickcompiler && make qmake_all -make clean -j4 build-IntelliPhoto-Desktop_Qt_5_14_0_clang_64bit-Release +qmake src/IntelliPhoto.pro -spec macx-clang CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug && make qmake_all +make -j4 build-IntelliPhoto-Desktop_Qt_5_14_0_clang_64bit-Debug +make clean -j4 build-IntelliPhoto-Desktop_Qt_5_14_0_clang_64bit-Debug From c3c4debd95122c5d296a62deb82546c43620a262 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:35:13 +0100 Subject: [PATCH 32/97] Update release.sh --- release.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/release.sh b/release.sh index 1652adc..4eea79e 100755 --- a/release.sh +++ b/release.sh @@ -1,4 +1,6 @@ # Discarding local changes +echo "This will discard all your uncommited changes and restore the last commit. Continue?" +read git reset --hard # Run CPP Check echo "Running CPPCheck..." @@ -23,7 +25,3 @@ echo "Directory cleaned." echo "Running Doxygen..." doxygen conf/intelliphoto_dox echo "Doxygen finished." -# Building -qmake src/IntelliPhoto.pro -spec macx-clang CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug && make qmake_all -make -j4 build-IntelliPhoto-Desktop_Qt_5_14_0_clang_64bit-Debug -make clean -j4 build-IntelliPhoto-Desktop_Qt_5_14_0_clang_64bit-Debug From efa43cfbbf0dd7ac736e6289e5d03bc7b6fd2519 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:37:54 +0100 Subject: [PATCH 33/97] Update release.sh --- release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.sh b/release.sh index 4eea79e..fea1619 100755 --- a/release.sh +++ b/release.sh @@ -19,7 +19,7 @@ echo "Cleaning directory..." rm -r src/build-* rm -r build-*/ rm -r Examples/ -rm src/IntelliPhoto.pro.user +rm src/*.pro.user echo "Directory cleaned." # Run Doxygen echo "Running Doxygen..." From 455b9281ebcb7fc242d9bcdf157b3be1453bfd1f Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:44:30 +0100 Subject: [PATCH 34/97] Renamed release.sh and added Merge Prep Script --- mergeprep.sh | 8 ++++++++ release.sh => releaseprep.sh | 0 2 files changed, 8 insertions(+) create mode 100644 mergeprep.sh rename release.sh => releaseprep.sh (100%) diff --git a/mergeprep.sh b/mergeprep.sh new file mode 100644 index 0000000..d5cc226 --- /dev/null +++ b/mergeprep.sh @@ -0,0 +1,8 @@ +# Run CPP Check +echo "Running CPPCheck..." +cppcheck --enable=all --output-file=cppcheck_errors.txt src/ +echo "CPPCheck finished" +# Uncrustify Files +echo "Running Uncrustify..." +find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} +echo "Uncrustify finished." diff --git a/release.sh b/releaseprep.sh similarity index 100% rename from release.sh rename to releaseprep.sh From cf3c542250218283b00a29721fa5cadc609a4c22 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:48:50 +0100 Subject: [PATCH 35/97] Uncrustified Commits and Updated Errors --- cppcheck_errors.txt | 47 ++++++--------- src/GUI/IntelliPhotoGui.cpp | 100 +++++++++++++++---------------- src/Image/IntelliShapedImage.cpp | 38 ++++++------ src/Layer/PaintingArea.cpp | 94 ++++++++++++++--------------- src/Tool/IntelliTool.cpp | 46 +++++++------- src/Tool/IntelliToolPolygon.cpp | 94 ++++++++++++++--------------- 6 files changed, 205 insertions(+), 214 deletions(-) diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index edc41a2..e5f712f 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -1,6 +1,3 @@ -src/GUI/IntelliPhotoGui.cpp:83:15: style: Variable 'layer' is assigned a value that is never used. [unreadVariable] - int layer = paintingArea->addLayer(width,height,0,0); - ^ src/IntelliHelper/IntelliColorPicker.cpp:4:3: performance: Variable 'firstColor' is assigned in constructor body. Consider performing initialization in initialization list. [useInitializationList] firstColor = {255,0,0,255}; ^ @@ -10,9 +7,9 @@ src/IntelliHelper/IntelliColorPicker.cpp:5:3: performance: Variable 'secondColor src/IntelliHelper/IntelliTriangulation.cpp:116:63: style: Parameter 'triangles' can be declared with const [constParameter] bool IntelliTriangulation::isInPolygon(std::vector &triangles, QPoint &point){ ^ -src/Layer/PaintingArea.cpp:335:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] - if(activeLayer!=-1 && activeLayer>0) { - ^ +src/Layer/PaintingArea.cpp:334:28: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] + if(activeLayer!=-1 && activeLayer>0) { + ^ src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::ActiveType' is not initialized in the constructor. [uninitMemberVar] IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ ^ @@ -22,34 +19,31 @@ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, In src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::Canvas' is not initialized in the constructor. [uninitMemberVar] IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ ^ -src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMin' shadows outer variable [shadowVariable] +src/Tool/IntelliToolCircle.cpp:42:9: style: Local variable 'yMin' shadows outer variable [shadowVariable] int yMin = static_cast(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:19:7: note: Shadowed declaration +src/Tool/IntelliToolCircle.cpp:18:7: note: Shadowed declaration int yMin, yMax, xMin, xMax; ^ -src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable +src/Tool/IntelliToolCircle.cpp:42:9: note: Shadow variable int yMin = static_cast(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:44:9: style: Local variable 'yMax' shadows outer variable [shadowVariable] +src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMax' shadows outer variable [shadowVariable] int yMax = static_cast(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:19:13: note: Shadowed declaration +src/Tool/IntelliToolCircle.cpp:18:13: note: Shadowed declaration int yMin, yMax, xMin, xMax; ^ -src/Tool/IntelliToolCircle.cpp:44:9: note: Shadow variable +src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable int yMax = static_cast(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); ^ -src/Tool/IntelliToolCircle.cpp:16:13: style: Variable 'outer' is assigned a value that is never used. [unreadVariable] - int outer = radius+20; - ^ src/Tool/IntelliToolLine.cpp:51:13: style: Variable 'c' is assigned a value that is never used. [unreadVariable] int c = lineStartingPoint.y()-lineStartingPoint.x()*m; ^ src/Tool/IntelliToolPolygon.h:25:6: warning: The class 'IntelliToolPolygon' defines member variable with name 'isDrawing' also defined in its parent class 'IntelliTool'. [duplInheritedMember] bool isDrawing; ^ -src/Tool/IntelliTool.h:68:6: note: Parent variable 'IntelliTool::isDrawing' +src/Tool/IntelliTool.h:69:6: note: Parent variable 'IntelliTool::isDrawing' bool isDrawing = false; ^ src/Tool/IntelliToolPolygon.h:25:6: note: Derived variable 'IntelliToolPolygon::isDrawing' @@ -58,34 +52,31 @@ bool isDrawing; src/GUI/IntelliPhotoGui.cpp:23:0: style: The function 'closeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:271:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:261:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:255:0: style: The function 'mousePressEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:242:0: style: The function 'mousePressEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:281:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:274:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:307:0: style: The function 'paintEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:304:0: style: The function 'paintEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:318:0: style: The function 'resizeEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:315:0: style: The function 'resizeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:323:0: style: The function 'resizeLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:320:0: style: The function 'resizeLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:175:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:168:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] ^ -src/GUI/IntelliPhotoGui.cpp:157:0: style: The function 'slotClearActiveLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:88:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:83:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] - -^ -src/Layer/PaintingArea.cpp:294:0: style: The function 'wheelEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:289:0: style: The function 'wheelEvent' is never used. [unusedFunction] ^ nofile:0:0: information: Cppcheck cannot find all the include files (use --check-config for details) [missingInclude] diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d7b207b..c05fce8 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -85,34 +85,34 @@ void IntelliPhotoGui::slotCreateNewRasterLayer(){ 200,1, 500, 1, &ok2); // Create New Layer if (ok1&&ok2) { - paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::RASTERIMAGE); + paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::RASTERIMAGE); UpdateGui(); } } // Opens a dialog that allows the user to create a New SHAPED Layer void IntelliPhotoGui::slotCreateNewShapedLayer(){ - // Stores button value - bool ok1, ok2; + // Stores button value + bool ok1, ok2; - // "New Layer" is the title of the window - // the next tr is the text to display - // Define the standard Value, min, max, step and ok button - QInputDialog Input; - Input.setPalette(Palette); + // "New Layer" is the title of the window + // the next tr is the text to display + // Define the standard Value, min, max, step and ok button + QInputDialog Input; + Input.setPalette(Palette); - int width = Input.getInt(this, tr("New Layer"), - tr("Width:"), - 200,1, 500, 1, &ok1); + int width = Input.getInt(this, tr("New Layer"), + tr("Width:"), + 200,1, 500, 1, &ok1); - int height = QInputDialog::getInt(this, tr("New Layer"), - tr("Height:"), - 200,1, 500, 1, &ok2); - // Create New Layer - if (ok1&&ok2) { - paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::SHAPEDIMAGE); - UpdateGui(); - } + int height = QInputDialog::getInt(this, tr("New Layer"), + tr("Height:"), + 200,1, 500, 1, &ok2); + // Create New Layer + if (ok1&&ok2) { + paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::SHAPEDIMAGE); + UpdateGui(); + } } // Opens a dialog that allows the user to delete a Layer @@ -155,21 +155,21 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ } void IntelliPhotoGui::slotSetPolygon(){ - // Stores button value - bool ok1; + // Stores button value + bool ok1; - // "Layer to set on" is the title of the window - // the next tr is the text to display - // Define the standard Value, min, max, step and ok button - int layer = QInputDialog::getInt(this, tr("Layer to set on"), - tr("Layer:"), - 1,1,500,1, &ok1); + // "Layer to set on" is the title of the window + // the next tr is the text to display + // Define the standard Value, min, max, step and ok button + int layer = QInputDialog::getInt(this, tr("Layer to set on"), + tr("Layer:"), + 1,1,500,1, &ok1); - if (ok1) - { - paintingArea->setPolygon(layer-1); - UpdateGui(); - } + if (ok1) + { + paintingArea->setPolygon(layer-1); + UpdateGui(); + } } void IntelliPhotoGui::slotPositionMoveUp(){ @@ -357,16 +357,16 @@ void IntelliPhotoGui::createActions(){ actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen())); - // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer() - actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this); - actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); - connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer())); + // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer() + actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this); + actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); + connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer())); - // Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer() - actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this); - actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT)); - connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer())); + // Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer() + actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this); + actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT)); + connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer())); // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() actionDeleteLayer = new QAction(tr("&Delete Layer..."), this); @@ -381,9 +381,9 @@ void IntelliPhotoGui::createActions(){ actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha())); - actionSetPolygon = new QAction(tr("&set new Polygondata"), this); - actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P)); - connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon())); + actionSetPolygon = new QAction(tr("&set new Polygondata"), this); + actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P)); + connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon())); actionMovePositionUp = new QAction(tr("&move Up"), this); actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up)); @@ -534,17 +534,17 @@ void IntelliPhotoGui::createMenus(){ renderMenu->addAction(actionUpdateRenderSettingsOn); renderMenu->addAction(actionUpdateRenderSettingsOff); - //Attach all Layer Creations to Menu - layerCreationMenu = new QMenu(tr("&Create new Layer"), this); - layerCreationMenu->addAction(actionCreateNewRasterLayer); - layerCreationMenu->addAction(actionCreateNewShapedLayer); + //Attach all Layer Creations to Menu + layerCreationMenu = new QMenu(tr("&Create new Layer"), this); + layerCreationMenu->addAction(actionCreateNewRasterLayer); + layerCreationMenu->addAction(actionCreateNewShapedLayer); // Attach all actions to Layer layerMenu = new QMenu(tr("&Layer"), this); - layerMenu->addMenu(layerCreationMenu); + layerMenu->addMenu(layerCreationMenu); layerMenu->addSeparator(); layerMenu->addAction(actionSetActiveAlpha); layerMenu->addAction(actionSetActiveLayer); - layerMenu->addAction(actionSetPolygon); + layerMenu->addAction(actionSetPolygon); layerMenu->addSeparator(); layerMenu->addAction(actionMovePositionUp); layerMenu->addAction(actionMovePositionDown); @@ -759,7 +759,7 @@ void IntelliPhotoGui::setIntelliStyle(){ this->helpMenu->setPalette(Palette); this->renderMenu->setPalette(Palette); this->toolMenu->setPalette(Palette); - this->layerCreationMenu->setPalette(Palette); + this->layerCreationMenu->setPalette(Palette); this->layerMenu->setPalette(Palette); this->colorMenu->setPalette(Palette); this->toolCreationMenu->setPalette(Palette); diff --git a/src/Image/IntelliShapedImage.cpp b/src/Image/IntelliShapedImage.cpp index 0911288..b8a7bec 100644 --- a/src/Image/IntelliShapedImage.cpp +++ b/src/Image/IntelliShapedImage.cpp @@ -27,17 +27,17 @@ IntelliImage* IntelliShapedImage::getDeepCopy(){ } void IntelliShapedImage::calculateVisiblity(){ - if(polygonData.size()<2){ - return; - } - if(fastRenderering) { + if(polygonData.size()<2) { + return; + } + if(fastRenderering) { this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); } if(polygonData.size()<=2) { QColor clr; for(int y=0; y& polygonData){ this->polygonData.push_back(QPoint(element.x(), element.y())); } triangles = IntelliTriangulation::calculateTriangles(polygonData); - if(fastRenderering){ - imageData = imageData.convertToFormat(QImage::Format_ARGB32); - } - for(int y = 0; yTool = nullptr; this->setLayerDimensions(maxWidth, maxHeight); - activeLayer=-1; + activeLayer=-1; } PaintingArea::~PaintingArea(){ @@ -53,7 +53,7 @@ void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOffset, IntelliImage::ImageType type){ LayerObject newLayer; - updateTools(); + updateTools(); newLayer.width = width; newLayer.height = height; newLayer.widthOffset = widthOffset; @@ -71,9 +71,9 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff void PaintingArea::deleteLayer(int idx, bool isTool){ - if(!isTool){ - updateTools(); - } + if(!isTool) { + updateTools(); + } if(idx(layerBundle.size())) { this->layerBundle.erase(layerBundle.begin()+idx); if(activeLayer>=idx) { @@ -93,8 +93,8 @@ void PaintingArea::slotDeleteActiveLayer(){ } void PaintingArea::setLayerActive(int idx){ - updateTools(); - if(idx>=0&&idx(layerBundle.size())) { + updateTools(); + if(idx>=0&&idx(layerBundle.size())) { this->activeLayer=idx; } } @@ -105,13 +105,13 @@ void PaintingArea::setLayerAlpha(int idx, int alpha){ } } void PaintingArea::setPolygon(int idx){ - if(idx>=0&&idx(layerBundle.size())) { - if(layerBundle[static_cast(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE){ - delete this->Tool; - this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true); - isSettingPolygon = true; - } - } + if(idx>=0&&idx(layerBundle.size())) { + if(layerBundle[static_cast(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE) { + delete this->Tool; + this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true); + isSettingPolygon = true; + } + } } // Used to load the image and place it in the widget @@ -151,13 +151,13 @@ bool PaintingArea::save(const QString &filePath, const char*fileFormat){ } void PaintingArea::movePositionActive(int x, int y){ - updateTools(); + updateTools(); layerBundle[static_cast(activeLayer)].widthOffset += x; layerBundle[static_cast(activeLayer)].heightOffset += y; } void PaintingArea::moveActiveLayer(int idx){ - updateTools(); + updateTools(); if(idx==1) { this->selectLayerUp(); }else if(idx==-1) { @@ -166,8 +166,8 @@ void PaintingArea::moveActiveLayer(int idx){ } void PaintingArea::slotActivateLayer(int a){ - updateTools(); - if(a>=0 && a < static_cast(layerBundle.size())) { + updateTools(); + if(a>=0 && a < static_cast(layerBundle.size())) { this->setLayerActive(a); } } @@ -322,16 +322,16 @@ void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){ } void PaintingArea::selectLayerUp(){ - updateTools(); - if(activeLayer!=-1 && static_cast(activeLayer)(activeLayer)(activeLayer)], layerBundle[static_cast(activeLayer+1)]); activeLayer++; } } void PaintingArea::selectLayerDown(){ - updateTools(); - if(activeLayer!=-1 && activeLayer>0) { + updateTools(); + if(activeLayer!=-1 && activeLayer>0) { std::swap(layerBundle[static_cast(activeLayer)], layerBundle[static_cast(activeLayer-1)]); activeLayer--; } @@ -408,35 +408,35 @@ IntelliImage* PaintingArea::getImageOfActiveLayer(){ if(activeLayer<0) { return nullptr; } - return layerBundle[static_cast(activeLayer)].image; + return layerBundle[static_cast(activeLayer)].image; } QImage PaintingArea::getImageDataOfActiveLayer(){ - QImage returnImage; - if(activeLayer<0) { - returnImage = QImage(QSize(10,10),QImage::Format_ARGB32); - returnImage.fill(QColor(255,255,255,255)); - } - else{ - returnImage = layerBundle[static_cast(activeLayer)].image->getImageData(); - if(renderSettings.isFastRenderering()){ - returnImage = returnImage.convertToFormat(QImage::Format_ARGB32); - } - } - return returnImage; + QImage returnImage; + if(activeLayer<0) { + returnImage = QImage(QSize(10,10),QImage::Format_ARGB32); + returnImage.fill(QColor(255,255,255,255)); + } + else{ + returnImage = layerBundle[static_cast(activeLayer)].image->getImageData(); + if(renderSettings.isFastRenderering()) { + returnImage = returnImage.convertToFormat(QImage::Format_ARGB32); + } + } + return returnImage; } void PaintingArea::updateTools(){ - if(Tool!=nullptr) { - if(Tool->getIsDrawing()){ - IntelliTool* temp = copyActiveTool(); - delete this->Tool; - this->Tool = temp; - } - if(isSettingPolygon){ - delete this->Tool; - this->Tool = nullptr; - isSettingPolygon = false; - } - } + if(Tool!=nullptr) { + if(Tool->getIsDrawing()) { + IntelliTool* temp = copyActiveTool(); + delete this->Tool; + this->Tool = temp; + } + if(isSettingPolygon) { + delete this->Tool; + this->Tool = nullptr; + isSettingPolygon = false; + } + } } diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index a41ee21..e09f2c7 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -32,8 +32,8 @@ void IntelliTool::onMouseLeftPressed(int x, int y){ void IntelliTool::onMouseLeftReleased(int x, int y){ if(isDrawing) { - isDrawing=false; - this->mergeToolLayer(); + isDrawing=false; + this->mergeToolLayer(); this->deleteToolLayer(); activeLayer->image->calculateVisiblity(); @@ -63,32 +63,32 @@ void IntelliTool::mergeToolLayer(){ QColor clr_1; QImage updatedImage = activeLayer->image->getImageData(); - for(int y=0; yheight; y++) { - for(int x=0; xwidth; x++) { - clr_0=updatedImage.pixelColor(x,y); - clr_1=Canvas->image->imageData.pixelColor(x,y); - float t = static_cast(clr_1.alpha())/255.f; - int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); - int g =static_cast(static_cast(clr_1.green())*(t)+static_cast(clr_0.green())*(1.f-t)+0.5f); - int b =static_cast(static_cast(clr_1.blue())*(t)+static_cast(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); - clr_0.setAlpha(a); + for(int y=0; yheight; y++) { + for(int x=0; xwidth; x++) { + clr_0=updatedImage.pixelColor(x,y); + clr_1=Canvas->image->imageData.pixelColor(x,y); + float t = static_cast(clr_1.alpha())/255.f; + int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); + int g =static_cast(static_cast(clr_1.green())*(t)+static_cast(clr_0.green())*(1.f-t)+0.5f); + int b =static_cast(static_cast(clr_1.blue())*(t)+static_cast(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); + clr_0.setAlpha(a); - updatedImage.setPixelColor(x, y, clr_0); - } - } - activeLayer->image->setImageData(updatedImage); - if(Canvas->image->getPolygonData().size() > 0){ - activeLayer->image->setPolygon(Canvas->image->getPolygonData()); - } + updatedImage.setPixelColor(x, y, clr_0); + } + } + activeLayer->image->setImageData(updatedImage); + if(Canvas->image->getPolygonData().size() > 0) { + activeLayer->image->setPolygon(Canvas->image->getPolygonData()); + } Area->DummyGui->UpdateGui(); } void IntelliTool::deleteToolLayer(){ - Area->deleteLayer(Area->activeLayer+1, true); + Area->deleteLayer(Area->activeLayer+1, true); this->Canvas=nullptr; } diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index f4f5105..c784669 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -9,7 +9,7 @@ IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* c isPointNearStart = false; isDrawing = false; isInside = false; - this->isSettingPolygon = isSettingPolygon; + this->isSettingPolygon = isSettingPolygon; this->ActiveType = Tooltype::POLYGON; } @@ -20,18 +20,18 @@ IntelliToolPolygon::~IntelliToolPolygon(){ } void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ - if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { - if(Area->getPolygonDataOfRealLayer().size()>2){ - std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); - QPoint Point(x,y); - isInside = IntelliTriangulation::isInPolygon(Triangles,Point); - } - else{ - isInside = true; - } - if(isSettingPolygon){ - isInside = true; - } + if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + if(Area->getPolygonDataOfRealLayer().size()>2) { + std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); + QPoint Point(x,y); + isInside = IntelliTriangulation::isInPolygon(Triangles,Point); + } + else{ + isInside = true; + } + if(isSettingPolygon) { + isInside = true; + } } else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { isInside = true; @@ -45,18 +45,18 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ QPointList.push_back(drawingPoint); this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - if(!isSettingPolygon){ - this->Canvas->image->calculateVisiblity(); - } + if(!isSettingPolygon) { + this->Canvas->image->calculateVisiblity(); + } } else if(isDrawing && isNearStart(x,y,QPointList.front())) { if(QPointList.size() > 2) { isPointNearStart = true; this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - if(!isSettingPolygon){ - this->Canvas->image->calculateVisiblity(); - } - } + if(!isSettingPolygon) { + this->Canvas->image->calculateVisiblity(); + } + } else{ isInside = false; isDrawing = false; @@ -69,9 +69,9 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ QPoint drawingPoint(x,y); QPointList.push_back(drawingPoint); this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - if(!isSettingPolygon){ - this->Canvas->image->calculateVisiblity(); - } + if(!isSettingPolygon) { + this->Canvas->image->calculateVisiblity(); + } } } @@ -88,31 +88,31 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ isInside = false; isPointNearStart = false; isDrawing = false; - if(!isSettingPolygon){ - std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); - QPoint Point; - QColor colorTwo(colorPicker->getSecondColor()); - colorTwo.setAlpha(Toolsettings->getInnerAlpha()); - for(int i = 0; i < activeLayer->width; i++) { - for(int j = 0; j < activeLayer->height; j++) { - Point = QPoint(i,j); - if(IntelliTriangulation::isInPolygon(Triangles,Point)) { - this->Canvas->image->drawPixel(Point, colorTwo); - } - } - } - for(int i=0; i(QPointList.size()); i++) { - int next = static_cast((i+static_cast(1))%static_cast(QPointList.size())); - this->Canvas->image->drawLine(QPointList[static_cast(i)], QPointList[static_cast(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); - } + if(!isSettingPolygon) { + std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); + QPoint Point; + QColor colorTwo(colorPicker->getSecondColor()); + colorTwo.setAlpha(Toolsettings->getInnerAlpha()); + for(int i = 0; i < activeLayer->width; i++) { + for(int j = 0; j < activeLayer->height; j++) { + Point = QPoint(i,j); + if(IntelliTriangulation::isInPolygon(Triangles,Point)) { + this->Canvas->image->drawPixel(Point, colorTwo); + } + } + } + for(int i=0; i(QPointList.size()); i++) { + int next = static_cast((i+static_cast(1))%static_cast(QPointList.size())); + this->Canvas->image->drawLine(QPointList[static_cast(i)], QPointList[static_cast(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); + } - } - else{ - Canvas->image->setPolygon(QPointList); - Canvas->image->setImageData(Area->getImageDataOfActiveLayer()); - } - IntelliTool::onMouseLeftReleased(x,y); - QPointList.clear(); + } + else{ + Canvas->image->setPolygon(QPointList); + Canvas->image->setImageData(Area->getImageDataOfActiveLayer()); + } + IntelliTool::onMouseLeftReleased(x,y); + QPointList.clear(); } } From dcbf163c7f2d97b2c0c6e629d948fd9026b38249 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 14:52:06 +0100 Subject: [PATCH 36/97] Added execution rights for merge prep script --- mergeprep.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 mergeprep.sh diff --git a/mergeprep.sh b/mergeprep.sh old mode 100644 new mode 100755 From d7e44890afa0015b79e8cfd3d85d3f09012b036f Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:02:35 +0100 Subject: [PATCH 37/97] Removed // comments from another header file --- src/Layer/PaintingArea.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 4cfd9eb..f80acb1 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -53,8 +53,6 @@ PaintingArea(int maxWidth=600, int maxHeight=600, QWidget*parent = nullptr); */ ~PaintingArea() override; -// Handles all events - /*! * \brief setRenderSettings updates all Images to the new Rendersetting. * \param isFastRenderingOn is the new given flag for the FastRenderer. @@ -130,7 +128,6 @@ void movePositionActive(int x, int y); */ void moveActiveLayer(int idx); -//change properties of colorPicker /*! * \brief The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color */ @@ -144,7 +141,6 @@ void colorPickerSetSecondColor(); */ void colorPickerSwapColors(); -// Create tools void createPenTool(); void createPlainTool(); void createLineTool(); @@ -228,7 +224,6 @@ void resizeLayer(QImage*image_res, const QSize &newSize); bool createTempTopLayer(int idx); -//this function is needed to avoid errors in inputhandeling if a layer has changed void updateTools(); }; From 234cd4e420b962366a68664bc0adec59493914bb Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:03:34 +0100 Subject: [PATCH 38/97] Update cppcheck_errors.txt --- cppcheck_errors.txt | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index a11d70c..ec6025f 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -7,7 +7,7 @@ src/IntelliHelper/IntelliColorPicker.cpp:5:3: performance: Variable 'secondColor src/IntelliHelper/IntelliTriangulation.cpp:116:63: style: Parameter 'triangles' can be declared with const [constParameter] bool IntelliTriangulation::isInPolygon(std::vector &triangles, QPoint &point){ ^ -src/Layer/PaintingArea.cpp:357:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] +src/Layer/PaintingArea.cpp:334:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] if(activeLayer!=-1 && activeLayer>0) { ^ src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::ActiveType' is not initialized in the constructor. [uninitMemberVar] @@ -49,34 +49,31 @@ bool isDrawing; src/GUI/IntelliPhotoGui.cpp:23:0: style: The function 'closeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:286:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:261:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:267:0: style: The function 'mousePressEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:242:0: style: The function 'mousePressEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:299:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:274:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:329:0: style: The function 'paintEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:304:0: style: The function 'paintEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:340:0: style: The function 'resizeEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:315:0: style: The function 'resizeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:345:0: style: The function 'resizeLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:320:0: style: The function 'resizeLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:187:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:168:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] ^ -src/GUI/IntelliPhotoGui.cpp:162:0: style: The function 'slotClearActiveLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:88:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:95:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] - -^ -src/Layer/PaintingArea.cpp:314:0: style: The function 'wheelEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:289:0: style: The function 'wheelEvent' is never used. [unusedFunction] ^ nofile:0:0: information: Cppcheck cannot find all the include files (use --check-config for details) [missingInclude] From 808d4d17c6675b6acf6eea10a5737899f1dee32f Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:06:24 +0100 Subject: [PATCH 39/97] Added configuration check to preparation scripts --- cppcheck_config.txt | 300 ++++++++++++++++++++++++++++++++++++++++++++ mergeprep.sh | 1 + releaseprep.sh | 1 + 3 files changed, 302 insertions(+) create mode 100644 cppcheck_config.txt diff --git a/cppcheck_config.txt b/cppcheck_config.txt new file mode 100644 index 0000000..65db50d --- /dev/null +++ b/cppcheck_config.txt @@ -0,0 +1,300 @@ +src/GUI/IntelliPhotoGui.h:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:5:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:6:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:7:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:8:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:9:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:10:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:11:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.h:12:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.cpp:4:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Image/IntelliImage.cpp:1:0: information: Include file: "Image/IntelliImage.h" not found. [missingInclude] + +^ +src/Image/IntelliImage.cpp:2:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliImage.cpp:3:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliRasterImage.cpp:1:0: information: Include file: "Image/IntelliRasterImage.h" not found. [missingInclude] + +^ +src/Image/IntelliRasterImage.cpp:2:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliRasterImage.cpp:3:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliRasterImage.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliShapedImage.cpp:1:0: information: Include file: "Image/IntelliShapedImage.h" not found. [missingInclude] + +^ +src/Image/IntelliShapedImage.cpp:2:0: information: Include file: "IntelliHelper/IntelliTriangulation.h" not found. [missingInclude] + +^ +src/Image/IntelliShapedImage.cpp:3:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliShapedImage.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Image/IntelliShapedImage.cpp:5:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/IntelliHelper/IntelliColorPicker.h:4:0: information: Include file: "QColor" not found. [missingInclude] + +^ +src/IntelliHelper/IntelliColorPicker.h:5:0: information: Include file: "QPoint" not found. [missingInclude] + +^ +src/IntelliHelper/IntelliColorPicker.h:6:0: information: Include file: "QColorDialog" not found. [missingInclude] + +^ +src/IntelliHelper/IntelliToolsettings.cpp:2:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/IntelliHelper/IntelliTriangulation.h:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/IntelliHelper/IntelliTriangulation.h:5:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/IntelliHelper/IntelliTriangulation.cpp:2:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/IntelliHelper/IntelliTriangulation.cpp:3:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/IntelliHelper/IntelliTriangulation.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.cpp:2:0: information: Include file: "string.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.cpp:6:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.cpp:7:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.cpp:8:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.h:5:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.h:6:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.h:7:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.h:8:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.h:9:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Layer/PaintingArea.h:10:0: information: Include file: "GUI/IntelliPhotoGui.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.h:11:0: information: Include file: "Image/IntelliImage.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.h:12:0: information: Include file: "Image/IntelliRasterImage.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.h:13:0: information: Include file: "Image/IntelliShapedImage.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.h:14:0: information: Include file: "Tool/IntelliTool.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.h:15:0: information: Include file: "IntelliHelper/IntelliColorPicker.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:11:0: information: Include file: "Image/IntelliRasterImage.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:12:0: information: Include file: "Image/IntelliShapedImage.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:13:0: information: Include file: "Tool/IntelliToolPen.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:14:0: information: Include file: "Tool/IntelliToolPlain.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:15:0: information: Include file: "Tool/IntelliToolLine.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:16:0: information: Include file: "Tool/IntelliToolCircle.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:17:0: information: Include file: "Tool/IntelliToolRectangle.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:18:0: information: Include file: "Tool/IntelliToolFloodFill.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:19:0: information: Include file: "Tool/IntelliToolPolygon.h" not found. [missingInclude] + +^ +src/Tool/IntelliColorPicker.cpp:1:0: information: Include file: "IntelliColorPicker.h" not found. [missingInclude] + +^ +src/Tool/IntelliColorPicker.cpp:2:0: information: Include file: "QDebug" not found. [missingInclude] + +^ +src/Tool/IntelliTool.h:4:0: information: Include file: "IntelliHelper/IntelliColorPicker.h" not found. [missingInclude] + +^ +src/Tool/IntelliTool.h:5:0: information: Include file: "IntelliHelper/IntelliToolsettings.h" not found. [missingInclude] + +^ +src/Tool/IntelliTool.h:6:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliTool.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolCircle.h:5:0: information: Include file: "QColor" not found. [missingInclude] + +^ +src/Tool/IntelliToolCircle.h:6:0: information: Include file: "QPoint" not found. [missingInclude] + +^ +src/Tool/IntelliToolCircle.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolCircle.cpp:3:0: information: Include file: "QInputDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolCircle.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolFloodFill.h:5:0: information: Include file: "QColor" not found. [missingInclude] + +^ +src/Tool/IntelliToolFloodFill.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolFloodFill.cpp:3:0: information: Include file: "QColorDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolFloodFill.cpp:4:0: information: Include file: "QInputDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolFloodFill.cpp:5:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolFloodFill.cpp:6:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolLine.h:5:0: information: Include file: "QPoint" not found. [missingInclude] + +^ +src/Tool/IntelliToolLine.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolLine.cpp:3:0: information: Include file: "QColorDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolLine.cpp:4:0: information: Include file: "QInputDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolPen.h:5:0: information: Include file: "QColor" not found. [missingInclude] + +^ +src/Tool/IntelliToolPen.h:6:0: information: Include file: "QPoint" not found. [missingInclude] + +^ +src/Tool/IntelliToolPen.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolPen.cpp:3:0: information: Include file: "QDebug" not found. [missingInclude] + +^ +src/Tool/IntelliToolPen.cpp:4:0: information: Include file: "QColorDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolPen.cpp:5:0: information: Include file: "QInputDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolPlain.h:5:0: information: Include file: "QColor" not found. [missingInclude] + +^ +src/Tool/IntelliToolPlain.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolPlain.cpp:3:0: information: Include file: "QColorDialog" not found. [missingInclude] + +^ +src/Tool/IntelliToolPolygon.h:5:0: information: Include file: "IntelliHelper/IntelliTriangulation.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolPolygon.h:6:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolPolygon.h:7:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolPolygon.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolPolygon.cpp:3:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolPolygon.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolPolygon.cpp:5:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/Tool/IntelliToolRectangle.h:6:0: information: Include file: "QColor" not found. [missingInclude] + +^ +src/Tool/IntelliToolRectangle.h:7:0: information: Include file: "QPoint" not found. [missingInclude] + +^ +src/Tool/IntelliToolRectangle.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolRectangle.cpp:3:0: information: Include file: "QInputDialog" not found. [missingInclude] + +^ +src/main.cpp:2:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/main.cpp:3:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/main.cpp:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ diff --git a/mergeprep.sh b/mergeprep.sh index d5cc226..5c2676a 100755 --- a/mergeprep.sh +++ b/mergeprep.sh @@ -1,6 +1,7 @@ # Run CPP Check echo "Running CPPCheck..." cppcheck --enable=all --output-file=cppcheck_errors.txt src/ +cppcheck --check-config --output-file=cppcheck_config.txt src/ echo "CPPCheck finished" # Uncrustify Files echo "Running Uncrustify..." diff --git a/releaseprep.sh b/releaseprep.sh index fea1619..c57a886 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -5,6 +5,7 @@ git reset --hard # Run CPP Check echo "Running CPPCheck..." cppcheck --enable=all --output-file=cppcheck_errors.txt src/ +cppcheck --check-config --output-file=cppcheck_config.txt src/ echo "CPPCheck finished" # Uncrustify Files echo "Running Uncrustify..." From 63b6d12422f46f27f9c0f40d5d18bd8103468fb9 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:09:40 +0100 Subject: [PATCH 40/97] Fixed bug in prep scripts --- mergeprep.sh | 2 +- releaseprep.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mergeprep.sh b/mergeprep.sh index 5c2676a..1a009d4 100755 --- a/mergeprep.sh +++ b/mergeprep.sh @@ -5,5 +5,5 @@ cppcheck --check-config --output-file=cppcheck_config.txt src/ echo "CPPCheck finished" # Uncrustify Files echo "Running Uncrustify..." -find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} +find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + echo "Uncrustify finished." diff --git a/releaseprep.sh b/releaseprep.sh index c57a886..79185a5 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -9,7 +9,7 @@ cppcheck --check-config --output-file=cppcheck_config.txt src/ echo "CPPCheck finished" # Uncrustify Files echo "Running Uncrustify..." -find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} +find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + echo "Uncrustify finished." # Run Unit Tests echo "Running unit tests..." From 4353b7764d097e303183ba3b55f33132023691a5 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:12:35 +0100 Subject: [PATCH 41/97] Added Git Integration for Preparation Scripts --- mergeprep.sh | 6 ++++++ releaseprep.sh | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/mergeprep.sh b/mergeprep.sh index 1a009d4..1cda51f 100755 --- a/mergeprep.sh +++ b/mergeprep.sh @@ -7,3 +7,9 @@ echo "CPPCheck finished" echo "Running Uncrustify..." find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + echo "Uncrustify finished." +# Adding changes to git +echo "Committing Changes to Git..." +git add * +git commit -m "Automated Merge Preparation" +echo "Committed." +echo "Finished." diff --git a/releaseprep.sh b/releaseprep.sh index 79185a5..b502515 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -26,3 +26,9 @@ echo "Directory cleaned." echo "Running Doxygen..." doxygen conf/intelliphoto_dox echo "Doxygen finished." +# Adding changes to git +echo "Committing Changes to Git..." +git add * +git commit -m "Automated Release Preparation" +echo "Committed." +echo "Finished." From 979dfc220a457281aff4d917ee098b2e10925849 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:14:25 +0100 Subject: [PATCH 42/97] Fixed Git Integration --- mergeprep.sh | 2 +- releaseprep.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mergeprep.sh b/mergeprep.sh index 1cda51f..efdb194 100755 --- a/mergeprep.sh +++ b/mergeprep.sh @@ -9,7 +9,7 @@ find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c con echo "Uncrustify finished." # Adding changes to git echo "Committing Changes to Git..." -git add * +git add '*' git commit -m "Automated Merge Preparation" echo "Committed." echo "Finished." diff --git a/releaseprep.sh b/releaseprep.sh index b502515..5392a6f 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -28,7 +28,7 @@ doxygen conf/intelliphoto_dox echo "Doxygen finished." # Adding changes to git echo "Committing Changes to Git..." -git add * +git add '*' git commit -m "Automated Release Preparation" echo "Committed." echo "Finished." From 691f3df28d1720060afe4f5d652bd35dde9f8cf8 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:19:22 +0100 Subject: [PATCH 43/97] Automated Merge Preparation --- src/GUI/IntelliPhotoGui.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index c05fce8..fdc5732 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -101,16 +101,12 @@ void IntelliPhotoGui::slotCreateNewShapedLayer(){ QInputDialog Input; Input.setPalette(Palette); - int width = Input.getInt(this, tr("New Layer"), - tr("Width:"), - 200,1, 500, 1, &ok1); + int width = Input.getInt(this, tr("New Layer"), tr("Width:"), 200, 1, 500, 1, &ok1); - int height = QInputDialog::getInt(this, tr("New Layer"), - tr("Height:"), - 200,1, 500, 1, &ok2); + int height = QInputDialog::getInt(this, tr("New Layer"), tr("Height:"), 200, 1, 500, 1, &ok2); // Create New Layer if (ok1&&ok2) { - paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::SHAPEDIMAGE); + paintingArea->addLayer(width, height, 0, 0, IntelliImage::ImageType::SHAPEDIMAGE); UpdateGui(); } } @@ -211,7 +207,7 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // Define the standard Value, min, max, step and ok button int layer = QInputDialog::getInt(this, tr("Layer to set on"), tr("Layer:"), - 1,1,500,1, &ok1); + 1, 1, 500, 1, &ok1); if (ok1) { paintingArea->setLayerActive(layer-1); From aae3e5f89f5569219a81423b7d655147c59d2f95 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:22:01 +0100 Subject: [PATCH 44/97] Update uncrustify.cfg --- conf/uncrustify.cfg | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/conf/uncrustify.cfg b/conf/uncrustify.cfg index 9d843ca..5ea406a 100644 --- a/conf/uncrustify.cfg +++ b/conf/uncrustify.cfg @@ -49,7 +49,7 @@ disable_processing_cmt = " *INDENT-OFF*" # string enable_processing_cmt = " *INDENT-ON*" # string # Enable parsing of digraphs. -enable_digraphs = false # true/false +enable_digraphs = true # true/false # Add or remove the UTF-8 BOM (recommend 'remove'). utf8_bom = ignore # ignore/add/remove/force @@ -59,16 +59,16 @@ utf8_bom = ignore # ignore/add/remove/force utf8_byte = false # true/false # Force the output encoding to UTF-8. -utf8_force = false # true/false +utf8_force = true # true/false # Add or remove space between 'do' and '{'. -sp_do_brace_open = ignore # ignore/add/remove/force +sp_do_brace_open = add # ignore/add/remove/force # Add or remove space between '}' and 'while'. -sp_brace_close_while = ignore # ignore/add/remove/force +sp_brace_close_while = add # ignore/add/remove/force # Add or remove space between 'while' and '('. -sp_while_paren_open = ignore # ignore/add/remove/force +sp_while_paren_open = add # ignore/add/remove/force # # Spacing options @@ -76,20 +76,20 @@ sp_while_paren_open = ignore # ignore/add/remove/force # Add or remove space around non-assignment symbolic operators ('+', '/', '%', # '<<', and so forth). -sp_arith = ignore # ignore/add/remove/force +sp_arith = add # ignore/add/remove/force # Add or remove space around arithmetic operators '+' and '-'. # # Overrides sp_arith. -sp_arith_additive = ignore # ignore/add/remove/force +sp_arith_additive = add # ignore/add/remove/force # Add or remove space around assignment operator '=', '+=', etc. -sp_assign = ignore # ignore/add/remove/force +sp_assign = add # ignore/add/remove/force # Add or remove space around '=' in C++11 lambda capture specifications. # # Overrides sp_assign. -sp_cpp_lambda_assign = ignore # ignore/add/remove/force +sp_cpp_lambda_assign = add # ignore/add/remove/force # Add or remove space after the capture specification of a C++11 lambda when # an argument list is present, as in '[] (int x){ ... }'. From 9e81d953af8eb5cf632e25a18573ff6560187512 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:22:08 +0100 Subject: [PATCH 45/97] Automated Merge Preparation --- src/GUI/IntelliPhotoGui.cpp | 50 ++++++++-------- src/Image/IntelliImage.h | 2 +- src/Image/IntelliRasterImage.cpp | 2 +- src/Image/IntelliRasterImage.h | 2 +- src/Image/IntelliShapedImage.cpp | 8 +-- src/Image/IntelliShapedImage.h | 4 +- src/IntelliHelper/IntelliTriangulation.cpp | 46 +++++++-------- src/IntelliHelper/IntelliTriangulation.h | 2 +- src/Layer/PaintingArea.cpp | 66 +++++++++++----------- src/Layer/PaintingArea.h | 12 ++-- src/Tool/IntelliTool.cpp | 38 ++++++------- src/Tool/IntelliToolCircle.cpp | 38 ++++++------- src/Tool/IntelliToolFloodFill.cpp | 8 +-- src/Tool/IntelliToolLine.cpp | 4 +- src/Tool/IntelliToolPen.cpp | 6 +- src/Tool/IntelliToolPolygon.cpp | 4 +- src/Tool/IntelliToolRectangle.cpp | 6 +- 17 files changed, 149 insertions(+), 149 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index fdc5732..fef39bd 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -121,10 +121,10 @@ void IntelliPhotoGui::slotDeleteLayer(){ // Define the standard Value, min, max, step and ok button int layerNumber = QInputDialog::getInt(this, tr("delete Layer"), tr("Number:"), - paintingArea->getNumberOfActiveLayer()+1,1, 501, 1, &ok); + paintingArea->getNumberOfActiveLayer() + 1,1, 501, 1, &ok); // Create New Layer if (ok) { - paintingArea->deleteLayer(layerNumber-1); + paintingArea->deleteLayer(layerNumber - 1); UpdateGui(); } } @@ -145,7 +145,7 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ 255,0, 255, 1, &ok2); if (ok1&&ok2) { - paintingArea->setLayerAlpha(layer-1,alpha); + paintingArea->setLayerAlpha(layer - 1,alpha); UpdateGui(); } } @@ -163,7 +163,7 @@ void IntelliPhotoGui::slotSetPolygon(){ if (ok1) { - paintingArea->setPolygon(layer-1); + paintingArea->setPolygon(layer - 1); UpdateGui(); } } @@ -210,7 +210,7 @@ void IntelliPhotoGui::slotSetActiveLayer(){ 1, 1, 500, 1, &ok1); if (ok1) { - paintingArea->setLayerActive(layer-1); + paintingArea->setLayerActive(layer - 1); UpdateGui(); } } @@ -401,17 +401,17 @@ void IntelliPhotoGui::createActions(){ actionMoveLayerUp->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Up)); connect(actionMoveLayerUp, SIGNAL(triggered()), this, SLOT(slotMoveLayerUp())); - actionMoveLayerDown= new QAction(tr("&move Layer Down"), this); + actionMoveLayerDown = new QAction(tr("&move Layer Down"), this); actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down)); connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown())); //Create Update RenderSettings Actions here actionUpdateRenderSettingsOn = new QAction(tr("&On"), this); - actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_A)); + actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A)); connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn())); actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this); - actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT +Qt::SHIFT + +Qt::Key_D)); + actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D)); connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff())); //Create Color Actions here @@ -432,38 +432,38 @@ void IntelliPhotoGui::createActions(){ //Create Tool actions down here actionCreatePlainTool = new QAction(tr("&Plain"), this); - actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_P)); + actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P)); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool())); actionCreatePenTool = new QAction(tr("&Pen"),this); - actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_S)); + actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S)); connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool())); actionCreateLineTool = new QAction(tr("&Line"), this); - actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_L)); + actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_L)); connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool())); actionCreateCircleTool = new QAction(tr("&Circle"), this); - actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_C)); + actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_C)); connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool())); actionCreateRectangleTool = new QAction(tr("&Rectangle"), this); - actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_R)); + actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_R)); connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool())); actionCreatePolygonTool = new QAction(tr("&Polygon"), this); - actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_V)); + actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V)); connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool())); actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this); - actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT +Qt::Key_F)); + actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_F)); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); @@ -514,7 +514,7 @@ void IntelliPhotoGui::createActions(){ void IntelliPhotoGui::createMenus(){ // Create Save As option and the list of file types saveAsMenu = new QMenu(tr("&Save As"), this); - foreach (QAction *action, actionSaveAs) + foreach (QAction * action, actionSaveAs) saveAsMenu->addAction(action); @@ -661,10 +661,10 @@ void IntelliPhotoGui::createGui(){ WidthLine = new QLabel(); WidthLine->setText("Width"); - WidthLine->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + WidthLine->setFixedSize(Buttonsize.width(),Buttonsize.height() / 3); EditLineWidth = new QLineEdit(); - EditLineWidth->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + EditLineWidth->setFixedSize(Buttonsize.width(),Buttonsize.height() / 3); EditLineWidth->setText("5"); ValidatorLineWidth = new QIntValidator(); ValidatorLineWidth->setTop(99); @@ -673,10 +673,10 @@ void IntelliPhotoGui::createGui(){ innerAlphaLine = new QLabel(); innerAlphaLine->setText("Inner Alpha"); - innerAlphaLine->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + innerAlphaLine->setFixedSize(Buttonsize.width(),Buttonsize.height() / 3); EditLineInnerAlpha = new QLineEdit(); - EditLineInnerAlpha->setFixedSize(Buttonsize.width(),Buttonsize.height()/3); + EditLineInnerAlpha->setFixedSize(Buttonsize.width(),Buttonsize.height() / 3); EditLineInnerAlpha->setText("255"); ValidatorInnerAlpha = new QIntValidator(); ValidatorInnerAlpha->setTop(999); @@ -684,21 +684,21 @@ void IntelliPhotoGui::createGui(){ EditLineInnerAlpha->setValidator(ValidatorInnerAlpha); FirstColorButton = new QPushButton(); - FirstColorButton->setFixedSize(Buttonsize/2); + FirstColorButton->setFixedSize(Buttonsize / 2); SecondColorButton = new QPushButton(); - SecondColorButton->setFixedSize(Buttonsize/2); + SecondColorButton->setFixedSize(Buttonsize / 2); preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png"); SwitchColorButton = new QPushButton(); - SwitchColorButton->setFixedSize(Buttonsize.width(),Buttonsize.height()/2); + SwitchColorButton->setFixedSize(Buttonsize.width(),Buttonsize.height() / 2); SwitchColorButton->setIcon(preview); - SwitchColorButton->setIconSize(QSize(Buttonsize.width(),Buttonsize.height()/2)); + SwitchColorButton->setIconSize(QSize(Buttonsize.width(),Buttonsize.height() / 2)); ActiveLayerLine = new QLabel(); QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); - ActiveLayerLine->setFixedSize(Buttonsize.width()+10,Buttonsize.height()/3); + ActiveLayerLine->setFixedSize(Buttonsize.width() + 10,Buttonsize.height() / 3); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); if(activePicture) { diff --git a/src/Image/IntelliImage.h b/src/Image/IntelliImage.h index 185063d..0d2fe42 100644 --- a/src/Image/IntelliImage.h +++ b/src/Image/IntelliImage.h @@ -104,7 +104,7 @@ virtual QImage getDisplayable(const QSize& displaySize, int alpha) = 0; * @param alpha - The maximum alpha value, a pixel can have. * @return A QImage which is ready to be displayed. */ -virtual QImage getDisplayable(int alpha=255) = 0; +virtual QImage getDisplayable(int alpha = 255) = 0; /*! * \brief A function that copys all that returns a [allocated] Image diff --git a/src/Image/IntelliRasterImage.cpp b/src/Image/IntelliRasterImage.cpp index b055f3f..a63a767 100644 --- a/src/Image/IntelliRasterImage.cpp +++ b/src/Image/IntelliRasterImage.cpp @@ -47,6 +47,6 @@ QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){ } void IntelliRasterImage::setPolygon(const std::vector& polygonData){ - qDebug() << "Raster Image has no polygon data " << polygonData.size() <<"\n"; + qDebug() << "Raster Image has no polygon data " << polygonData.size() << "\n"; return; } diff --git a/src/Image/IntelliRasterImage.h b/src/Image/IntelliRasterImage.h index f589843..79338c4 100644 --- a/src/Image/IntelliRasterImage.h +++ b/src/Image/IntelliRasterImage.h @@ -40,7 +40,7 @@ virtual QImage getDisplayable(const QSize& displaySize,int alpha) override; * @param alpha - The maximum alpha value, a pixel can have. * @return A QImage which is ready to be displayed. */ -virtual QImage getDisplayable(int alpha=255) override; +virtual QImage getDisplayable(int alpha = 255) override; /*! * \brief A function that copys all that returns a [allocated] Image diff --git a/src/Image/IntelliShapedImage.cpp b/src/Image/IntelliShapedImage.cpp index b8a7bec..14c7b71 100644 --- a/src/Image/IntelliShapedImage.cpp +++ b/src/Image/IntelliShapedImage.cpp @@ -36,8 +36,8 @@ void IntelliShapedImage::calculateVisiblity(){ if(polygonData.size()<=2) { QColor clr; - for(int y=0; y IntelliTriangulation::calculateTriangles(std::vector(sqrt(pow(AP.x(),2.)+pow(AP.y(),2.))*sqrt(pow(BP.x(),2.)+pow(BP.y(),2.))); - return acos(topSclar/absolute); + float topSclar = AP.x() * BP.x() + AP.y() * BP.y(); + float absolute = static_cast(sqrt(pow(AP.x(),2.) + pow(AP.y(),2.)) * sqrt(pow(BP.x(),2.) + pow(BP.y(),2.))); + return acos(topSclar / absolute); }; // gets the first element of vec for which element.isTip == true holds - auto getTip= [](const std::vector& vec){ - size_t min = 0; - for(size_t i=0; i& vec){ + size_t min = 0; + for(size_t i = 0; i=0 ? (idx-1) : (length-1); + return (idx - 1)>=0 ? (idx - 1) : (length - 1); }; // get the vertex idx after idx in relation to the container lenght auto getPost = [](int idx, int length){ - return (idx+1)%length; + return (idx + 1) % length; }; // return if the vertex is a tip auto isTip = [](float angle){ - return static_cast(angle)<(pi/2.); + return static_cast(angle)<(pi / 2.); }; std::vector Vertices; std::vector Triangles; // set up all vertices and calculate intirior angle - for(int i=0; i(polyPoints.size()); i++) { + for(int i = 0; i(polyPoints.size()); i++) { TriangleHelper helper; int prev = getPrev(i, static_cast(polyPoints.size())); int post = getPost(i, static_cast(polyPoints.size())); @@ -69,7 +69,7 @@ std::vector IntelliTriangulation::calculateTriangles(std::vector(Vertices.size())); @@ -82,14 +82,14 @@ std::vector IntelliTriangulation::calculateTriangles(std::vector(smallest.idx); i(smallest.idx); i(Vertices.size())); diff --git a/src/IntelliHelper/IntelliTriangulation.h b/src/IntelliHelper/IntelliTriangulation.h index 21ebfa3..3678953 100644 --- a/src/IntelliHelper/IntelliTriangulation.h +++ b/src/IntelliHelper/IntelliTriangulation.h @@ -21,7 +21,7 @@ namespace IntelliTriangulation { * \return Returns the area of the traingle*2 */ inline float sign(QPoint& p1, QPoint& p2, QPoint& p3){ - return (p1.x()-p3.x())*(p2.y()-p3.y())-(p2.x()-p3.x())*(p1.y()-p3.y()); + return (p1.x() - p3.x()) * (p2.y() - p3.y()) - (p2.x() - p3.x()) * (p1.y() - p3.y()); } /*! diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index e36df4b..6a93d3e 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -24,7 +24,7 @@ PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) this->Tool = nullptr; this->setLayerDimensions(maxWidth, maxHeight); - activeLayer=-1; + activeLayer = -1; } PaintingArea::~PaintingArea(){ @@ -65,7 +65,7 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff } newLayer.alpha = 255; this->layerBundle.push_back(newLayer); - activeLayer = static_cast(layerBundle.size())-1; + activeLayer = static_cast(layerBundle.size()) - 1; return activeLayer; } @@ -75,19 +75,19 @@ void PaintingArea::deleteLayer(int idx, bool isTool){ updateTools(); } if(idx(layerBundle.size())) { - this->layerBundle.erase(layerBundle.begin()+idx); + this->layerBundle.erase(layerBundle.begin() + idx); if(activeLayer>=idx) { activeLayer--; } if(activeLayer < 0 && layerBundle.size()) { - activeLayer=0; + activeLayer = 0; } } } void PaintingArea::slotDeleteActiveLayer(){ if(activeLayer>=0 && activeLayer < static_cast(layerBundle.size())) { - this->layerBundle.erase(layerBundle.begin()+activeLayer); + this->layerBundle.erase(layerBundle.begin() + activeLayer); activeLayer--; } } @@ -95,13 +95,13 @@ void PaintingArea::slotDeleteActiveLayer(){ void PaintingArea::setLayerActive(int idx){ updateTools(); if(idx>=0&&idx(layerBundle.size())) { - this->activeLayer=idx; + this->activeLayer = idx; } } void PaintingArea::setLayerAlpha(int idx, int alpha){ if(idx>=0&&idx(layerBundle.size())) { - layerBundle[static_cast(idx)].alpha=alpha; + layerBundle[static_cast(idx)].alpha = alpha; } } void PaintingArea::setPolygon(int idx){ @@ -245,8 +245,8 @@ void PaintingArea::mousePressEvent(QMouseEvent*event){ } if(Tool == nullptr) return; - int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; - int y = event->y()-layerBundle[static_cast(activeLayer)].heightOffset; + int x = event->x() - layerBundle[static_cast(activeLayer)].widthOffset; + int y = event->y() - layerBundle[static_cast(activeLayer)].heightOffset; if(event->button() == Qt::LeftButton) { Tool->onMouseLeftPressed(x, y); }else if(event->button() == Qt::RightButton) { @@ -264,8 +264,8 @@ void PaintingArea::mouseMoveEvent(QMouseEvent*event){ } if(Tool == nullptr) return; - int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; - int y = event->y()-layerBundle[static_cast(activeLayer)].heightOffset; + int x = event->x() - layerBundle[static_cast(activeLayer)].widthOffset; + int y = event->y() - layerBundle[static_cast(activeLayer)].heightOffset; Tool->onMouseMoved(x, y); update(); } @@ -276,8 +276,8 @@ void PaintingArea::mouseReleaseEvent(QMouseEvent*event){ return; if(Tool == nullptr) return; - int x = event->x()-layerBundle[static_cast(activeLayer)].widthOffset; - int y = event->y()-layerBundle[static_cast(activeLayer)].heightOffset; + int x = event->x() - layerBundle[static_cast(activeLayer)].widthOffset; + int y = event->y() - layerBundle[static_cast(activeLayer)].heightOffset; if(event->button() == Qt::LeftButton) { Tool->onMouseLeftReleased(x, y); }else if(event->button() == Qt::RightButton) { @@ -293,7 +293,7 @@ void PaintingArea::wheelEvent(QWheelEvent*event){ QPoint numDegrees = event->angleDelta() / 8; if(!numDegrees.isNull()) { QPoint numSteps = numDegrees / 15; - Tool->onWheelScrolled(numSteps.y()* -1); + Tool->onWheelScrolled(numSteps.y() * -1); } } } @@ -323,8 +323,8 @@ void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){ void PaintingArea::selectLayerUp(){ updateTools(); - if(activeLayer!=-1 && static_cast(activeLayer)(activeLayer)], layerBundle[static_cast(activeLayer+1)]); + if(activeLayer!=-1 && static_cast(activeLayer)(activeLayer)], layerBundle[static_cast(activeLayer + 1)]); activeLayer++; } } @@ -332,7 +332,7 @@ void PaintingArea::selectLayerUp(){ void PaintingArea::selectLayerDown(){ updateTools(); if(activeLayer!=-1 && activeLayer>0) { - std::swap(layerBundle[static_cast(activeLayer)], layerBundle[static_cast(activeLayer-1)]); + std::swap(layerBundle[static_cast(activeLayer)], layerBundle[static_cast(activeLayer - 1)]); activeLayer--; } } @@ -343,30 +343,30 @@ void PaintingArea::drawLayers(bool forSaving){ }else{ Canvas->fill(Qt::GlobalColor::black); } - for(size_t i=0; igetDisplayable(layer.alpha); QColor clr_0; QColor clr_1; - for(int y=0; y=maxHeight) break; - for(int x=0; x=maxWidth) break; - clr_0=Canvas->pixelColor(layer.widthOffset+x, layer.heightOffset+y); - clr_1=cpy.pixelColor(x,y); - float t = static_cast(clr_1.alpha())/255.f; - int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); - int g =static_cast(static_cast(clr_1.green())*(t)+static_cast(clr_0.green())*(1.f-t)+0.5f); - int b =static_cast(static_cast(clr_1.blue())*(t)+static_cast(clr_0.blue()*(1.f-t))+0.5f); - int a =std::min(clr_0.alpha()+clr_1.alpha(), 255); + for(int y = 0; y=maxHeight) break; + for(int x = 0; x=maxWidth) break; + clr_0 = Canvas->pixelColor(layer.widthOffset + x, layer.heightOffset + y); + clr_1 = cpy.pixelColor(x,y); + float t = static_cast(clr_1.alpha()) / 255.f; + int r = static_cast(static_cast(clr_1.red()) * (t) + static_cast(clr_0.red()) * (1.f - t) + 0.5f); + int g = static_cast(static_cast(clr_1.green()) * (t) + static_cast(clr_0.green()) * (1.f - t) + 0.5f); + int b = static_cast(static_cast(clr_1.blue()) * (t) + static_cast(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); clr_0.setAlpha(a); - Canvas->setPixelColor(layer.widthOffset+x, layer.heightOffset+y, clr_0); + Canvas->setPixelColor(layer.widthOffset + x, layer.heightOffset + y, clr_0); } } } @@ -381,7 +381,7 @@ bool PaintingArea::createTempTopLayer(int idx){ newLayer.heightOffset = layerBundle[static_cast(idx)].heightOffset; newLayer.widthOffset = layerBundle[static_cast(idx)].widthOffset; newLayer.image = layerBundle[static_cast(idx)].image->getDeepCopy(); - layerBundle.insert(layerBundle.begin()+idx+1,newLayer); + layerBundle.insert(layerBundle.begin() + idx + 1,newLayer); return true; } return false; diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index f80acb1..daee426 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -28,7 +28,7 @@ struct LayerObject { int height; int widthOffset; int heightOffset; - int alpha=255; + int alpha = 255; }; /*! @@ -46,7 +46,7 @@ public: * \param maxHeight - The maximum amount of pixles that are inside painting area from top to bottom (default=600px) * \param parent - The parent window of the main window (default=nullptr) */ -PaintingArea(int maxWidth=600, int maxHeight=600, QWidget*parent = nullptr); +PaintingArea(int maxWidth = 600, int maxHeight = 600, QWidget*parent = nullptr); /*! * \brief This deconstructor is used to clear up the memory and remove the currently active window @@ -82,7 +82,7 @@ bool save(const QString &filePath, const char*fileFormat); * \param type - Defining the ImageType of the new layer * \return Returns the number of layers in the project */ -int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); +int addLayer(int width, int height, int widthOffset = 0, int heightOffset = 0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); /*! * \brief The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer stack * \param idx - Index of the position the new layer should be added @@ -93,7 +93,7 @@ int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, Intel * \param type - Defining the ImageType of the new layer * \return Returns the id of the layer position */ -int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); +int addLayerAt(int idx, int width, int height, int widthOffset = 0, int heightOffset = 0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE); /*! * \brief The deleteLayer method removes a layer at a given idx * \param idx - The index of the layer to be removed @@ -216,9 +216,9 @@ IntelliTool* Tool; IntelliPhotoGui* DummyGui; std::vector layerBundle; -int activeLayer=-1; +int activeLayer = -1; -void drawLayers(bool forSaving=false); +void drawLayers(bool forSaving = false); void resizeLayer(QImage*image_res, const QSize &newSize); diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index e09f2c7..9481290 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -2,9 +2,9 @@ #include "Layer/PaintingArea.h" IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ - this->Area=Area; - this->colorPicker=colorPicker; - this->Toolsettings=Toolsettings; + this->Area = Area; + this->colorPicker = colorPicker; + this->Toolsettings = Toolsettings; } @@ -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(); @@ -51,8 +51,8 @@ void IntelliTool::onWheelScrolled(int value){ bool IntelliTool::createToolLayer(){ if(Area->createTempTopLayer(Area->activeLayer)) { - this->activeLayer=&Area->layerBundle[static_cast(Area->activeLayer)]; - this->Canvas=&Area->layerBundle[static_cast(Area->activeLayer+1)]; + this->activeLayer = &Area->layerBundle[static_cast(Area->activeLayer)]; + this->Canvas = &Area->layerBundle[static_cast(Area->activeLayer + 1)]; return true; } return false; @@ -63,15 +63,15 @@ void IntelliTool::mergeToolLayer(){ QColor clr_1; QImage updatedImage = activeLayer->image->getImageData(); - for(int y=0; yheight; y++) { - for(int x=0; xwidth; x++) { - clr_0=updatedImage.pixelColor(x,y); - clr_1=Canvas->image->imageData.pixelColor(x,y); - float t = static_cast(clr_1.alpha())/255.f; - int r =static_cast(static_cast(clr_1.red())*(t)+static_cast(clr_0.red())*(1.f-t)+0.5f); - int g =static_cast(static_cast(clr_1.green())*(t)+static_cast(clr_0.green())*(1.f-t)+0.5f); - int b =static_cast(static_cast(clr_1.blue())*(t)+static_cast(clr_0.blue()*(1.f-t))+0.5f); - int a =std::min(clr_0.alpha()+clr_1.alpha(), 255); + for(int y = 0; yheight; y++) { + for(int x = 0; xwidth; x++) { + clr_0 = updatedImage.pixelColor(x,y); + clr_1 = Canvas->image->imageData.pixelColor(x,y); + float t = static_cast(clr_1.alpha()) / 255.f; + int r = static_cast(static_cast(clr_1.red()) * (t) + static_cast(clr_0.red()) * (1.f - t) + 0.5f); + int g = static_cast(static_cast(clr_1.green()) * (t) + static_cast(clr_0.green()) * (1.f - t) + 0.5f); + int b = static_cast(static_cast(clr_1.blue()) * (t) + static_cast(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 +88,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(){ diff --git a/src/Tool/IntelliToolCircle.cpp b/src/Tool/IntelliToolCircle.cpp index d2a09d1..644c6ea 100644 --- a/src/Tool/IntelliToolCircle.cpp +++ b/src/Tool/IntelliToolCircle.cpp @@ -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(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2))); - xMax = static_cast(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2))); + for(int i = yMin; i<=yMax; i++) { + xMin = static_cast(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); + xMax = static_cast(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(radius +(Toolsettings->getLineWidth()/2.)); - yMin = (centerPoint.y()-radius); - yMax = (centerPoint.y()+radius); - for(int i=yMin; i<=yMax; i++) { - xMin = static_cast(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2))); - xMax = static_cast(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2))); + radius = static_cast(radius + (Toolsettings->getLineWidth() / 2.)); + yMin = (centerPoint.y() - radius); + yMax = (centerPoint.y() + radius); + for(int i = yMin; i<=yMax; i++) { + xMin = static_cast(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); + xMax = static_cast(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(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); - int yMax = static_cast(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(centerPoint.y() - sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); + int yMax = static_cast(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(sqrt(pow((centerPoint.x()-x),2)+pow((centerPoint.y()-y),2))); + int radius = static_cast(sqrt(pow((centerPoint.x() - x),2) + pow((centerPoint.y() - y),2))); drawCircle(radius); } IntelliTool::onMouseMoved(x,y); diff --git a/src/Tool/IntelliToolFloodFill.cpp b/src/Tool/IntelliToolFloodFill.cpp index cb135f8..5301eee 100644 --- a/src/Tool/IntelliToolFloodFill.cpp +++ b/src/Tool/IntelliToolFloodFill.cpp @@ -41,10 +41,10 @@ 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); + 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); diff --git a/src/Tool/IntelliToolLine.cpp b/src/Tool/IntelliToolLine.cpp index c7c7340..17720ff 100644 --- a/src/Tool/IntelliToolLine.cpp +++ b/src/Tool/IntelliToolLine.cpp @@ -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,7 +33,7 @@ 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){ diff --git a/src/Tool/IntelliToolPen.cpp b/src/Tool/IntelliToolPen.cpp index 70f2dc3..42ed590 100644 --- a/src/Tool/IntelliToolPen.cpp +++ b/src/Tool/IntelliToolPen.cpp @@ -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); } diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index c784669..c7afdd2 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -101,8 +101,8 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ } } } - for(int i=0; i(QPointList.size()); i++) { - int next = static_cast((i+static_cast(1))%static_cast(QPointList.size())); + for(int i = 0; i(QPointList.size()); i++) { + int next = static_cast((i + static_cast(1)) % static_cast(QPointList.size())); this->Canvas->image->drawLine(QPointList[static_cast(i)], QPointList[static_cast(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); } diff --git a/src/Tool/IntelliToolRectangle.cpp b/src/Tool/IntelliToolRectangle.cpp index 29fa038..924ed6c 100644 --- a/src/Tool/IntelliToolRectangle.cpp +++ b/src/Tool/IntelliToolRectangle.cpp @@ -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); } From 76dfe458373c345d36d7a2255f5f1f3cbce67337 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:23:11 +0100 Subject: [PATCH 46/97] Update uncrustify.cfg --- conf/uncrustify.cfg | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/conf/uncrustify.cfg b/conf/uncrustify.cfg index 5ea406a..b01a13a 100644 --- a/conf/uncrustify.cfg +++ b/conf/uncrustify.cfg @@ -93,53 +93,53 @@ sp_cpp_lambda_assign = add # ignore/add/remove/force # Add or remove space after the capture specification of a C++11 lambda when # an argument list is present, as in '[] (int x){ ... }'. -sp_cpp_lambda_square_paren = ignore # ignore/add/remove/force +sp_cpp_lambda_square_paren = add # ignore/add/remove/force # Add or remove space after the capture specification of a C++11 lambda with # no argument list is present, as in '[] { ... }'. -sp_cpp_lambda_square_brace = ignore # ignore/add/remove/force +sp_cpp_lambda_square_brace = add # ignore/add/remove/force # Add or remove space after the argument list of a C++11 lambda, as in # '[](int x) { ... }'. -sp_cpp_lambda_paren_brace = ignore # ignore/add/remove/force +sp_cpp_lambda_paren_brace = add # ignore/add/remove/force # Add or remove space between a lambda body and its call operator of an # immediately invoked lambda, as in '[]( ... ){ ... } ( ... )'. -sp_cpp_lambda_fparen = ignore # ignore/add/remove/force +sp_cpp_lambda_fparen = add # ignore/add/remove/force # Add or remove space around assignment operator '=' in a prototype. # # If set to ignore, use sp_assign. -sp_assign_default = ignore # ignore/add/remove/force +sp_assign_default = add # ignore/add/remove/force # Add or remove space before assignment operator '=', '+=', etc. # # Overrides sp_assign. -sp_before_assign = ignore # ignore/add/remove/force +sp_before_assign = add # ignore/add/remove/force # Add or remove space after assignment operator '=', '+=', etc. # # Overrides sp_assign. -sp_after_assign = ignore # ignore/add/remove/force +sp_after_assign = add # ignore/add/remove/force # Add or remove space in 'NS_ENUM ('. -sp_enum_paren = ignore # ignore/add/remove/force +sp_enum_paren = add # ignore/add/remove/force # Add or remove space around assignment '=' in enum. -sp_enum_assign = ignore # ignore/add/remove/force +sp_enum_assign = add # ignore/add/remove/force # Add or remove space before assignment '=' in enum. # # Overrides sp_enum_assign. -sp_enum_before_assign = ignore # ignore/add/remove/force +sp_enum_before_assign = add # ignore/add/remove/force # Add or remove space after assignment '=' in enum. # # Overrides sp_enum_assign. -sp_enum_after_assign = ignore # ignore/add/remove/force +sp_enum_after_assign = add # ignore/add/remove/force # Add or remove space around assignment ':' in enum. -sp_enum_colon = ignore # ignore/add/remove/force +sp_enum_colon = add # ignore/add/remove/force # Add or remove space around preprocessor '##' concatenation operator. # From 4d6c0da250a061adb16841a998e04d63c5742978 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 15 Jan 2020 15:23:16 +0100 Subject: [PATCH 47/97] Automated Merge Preparation --- cppcheck_errors.txt | 8 ++++---- src/IntelliHelper/IntelliTriangulation.cpp | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index ec6025f..0276a5e 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -20,22 +20,22 @@ src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::Canvas' is IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ ^ src/Tool/IntelliToolCircle.cpp:42:9: style: Local variable 'yMin' shadows outer variable [shadowVariable] - int yMin = static_cast(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); + int yMin = static_cast(centerPoint.y() - sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); ^ src/Tool/IntelliToolCircle.cpp:18:7: note: Shadowed declaration int yMin, yMax, xMin, xMax; ^ src/Tool/IntelliToolCircle.cpp:42:9: note: Shadow variable - int yMin = static_cast(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); + int yMin = static_cast(centerPoint.y() - sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); ^ src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMax' shadows outer variable [shadowVariable] - int yMax = static_cast(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); + int yMax = static_cast(centerPoint.y() + sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); ^ src/Tool/IntelliToolCircle.cpp:18:13: note: Shadowed declaration int yMin, yMax, xMin, xMax; ^ src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable - int yMax = static_cast(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); + int yMax = static_cast(centerPoint.y() + sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); ^ src/Tool/IntelliToolPolygon.h:25:6: warning: The class 'IntelliToolPolygon' defines member variable with name 'isDrawing' also defined in its parent class 'IntelliTool'. [duplInheritedMember] bool isDrawing; diff --git a/src/IntelliHelper/IntelliTriangulation.cpp b/src/IntelliHelper/IntelliTriangulation.cpp index e76bc07..c1222b7 100644 --- a/src/IntelliHelper/IntelliTriangulation.cpp +++ b/src/IntelliHelper/IntelliTriangulation.cpp @@ -14,7 +14,7 @@ std::vector IntelliTriangulation::calculateTriangles(std::vector IntelliTriangulation::calculateTriangles(std::vector& vec){ + auto getTip = [] (const std::vector& vec) { size_t min = 0; for(size_t i = 0; i IntelliTriangulation::calculateTriangles(std::vector=0 ? (idx - 1) : (length - 1); }; // get the vertex idx after idx in relation to the container lenght - auto getPost = [](int idx, int length){ + auto getPost = [] (int idx, int length) { return (idx + 1) % length; }; // return if the vertex is a tip - auto isTip = [](float angle){ + auto isTip = [] (float angle) { return static_cast(angle)<(pi / 2.); }; From b5e05a9c6a3c15c6ccbd5e0b1fd310862234eb24 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Wed, 15 Jan 2020 15:48:38 +0100 Subject: [PATCH 48/97] Update InputBoxes --- src/GUI/IntelliInputDialog.cpp | 31 +++--- src/GUI/IntelliInputDialog.h | 13 +-- src/GUI/IntelliPhotoGui.cpp | 118 ++++++++++------------ src/GUI/IntelliPhotoGui.h | 3 +- src/IntelliHelper/IntelliToolsettings.cpp | 24 +---- src/IntelliHelper/IntelliToolsettings.h | 2 - src/IntelliPhoto.pro | 2 + 7 files changed, 79 insertions(+), 114 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index e62b091..4e7bee6 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -1,8 +1,8 @@ #include "IntelliInputDialog.h" - -IntelliInputDialog::IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step) +#include +IntelliInputDialog::IntelliInputDialog(QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step) { - this->Dialog = Dialog; + this->Dialog = Dialog; createInputBox(Title, Label, value, minValue, maxValue, step); createConnections(Loop); setValuesOfPalette(); @@ -54,7 +54,7 @@ void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, } void IntelliInputDialog::createConnections(QEventLoop* Loop){ - connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe(Speicher))); + connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe())); connect(okButton, SIGNAL(clicked()), Loop, SLOT(quit())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent())); connect(cancelButton, SIGNAL(clicked()), Loop, SLOT(quit())); @@ -84,16 +84,21 @@ void IntelliInputDialog::slotCloseEvent(){ Dialog->close(); } -void IntelliInputDialog::slotEingabe(Speichereinheit &Speicher){ - qDebug() << Input->value(); - SetValueToGUI(); +void IntelliInputDialog::slotEingabe(){ + QFile File("test.txt"); + + if(!File.open(QIODevice::WriteOnly | QIODevice::Text)){ + qDebug() << "Error Write to File"; + } + std::string test = QString("%1").arg(Input->value()).toStdString(); + const char* p = test.c_str(); + File.write(p); + File.close(); + Dialog->close(); } -void IntelliInputDialog::SetValueToGUI(){ - Input->value(); -} - -void IntelliInputDialog::getIntInput(Speichereinheit &Speicher, QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step){ - this->Dialog = new IntelliInputDialog(Speicher, Loop, Dialog, Title, Label, value, minValue, maxValue, step); +void IntelliInputDialog::getIntInput(QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step){ + this->Dialog = new IntelliInputDialog(Loop, Dialog, Title, Label, value, minValue, maxValue, step); + Loop->exec(); } diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index c78f63b..d420e8b 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -3,23 +3,18 @@ #include #include -#include "IntelliPhotoGui.h" - -class Speichereinheit { -int value; -}; class IntelliInputDialog : public QDialog { Q_OBJECT public: -IntelliInputDialog(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +IntelliInputDialog(QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); -void getIntInput(Speichereinheit &Speicher, QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = "InputBox", QString Label = "Weight:", int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +void getIntInput(QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = "InputBox", QString Label = "Weight:", int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); public slots: void slotCloseEvent(); -void slotEingabe(Speichereinheit &Speicher); +void slotEingabe(); private: void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); @@ -27,8 +22,6 @@ void createConnections(QEventLoop* Loop = nullptr); void setValuesOfPalette(); void setInputBoxStyle(); -void SetValueToGUI(); - QDialog* Dialog; QGridLayout* Layout; diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 88b0a4f..6281e92 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -5,7 +5,7 @@ // IntelliPhotoGui constructor IntelliPhotoGui::IntelliPhotoGui(IntelliInputDialog* InputDialog){ - //this->InputDialog = InputDialog; + this->InputDialog = InputDialog; // create Gui elements and lay them out createGui(); // Create actions @@ -68,19 +68,16 @@ void IntelliPhotoGui::slotSave(){ // Opens a dialog that allows the user to create a New Layer void IntelliPhotoGui::slotCreateNewLayer(){ - // Stores button value - // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - Speichereinheit Speicher; - this->InputDialog->getIntInput(Speicher, &Loop, this->InputDialog, "New Layer", "Width:", 5, 0, 5000, 1); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "New Layer", "Width:", 200, 0, 5000, 1); - int width = returnValueOfInputDialog; + int width = getReturnValueOfDialog(); - qDebug() << width; + this->InputDialog->getIntInput(&Loop, this->InputDialog, "New Layer", "Height:", 200, 0, 5000, 1); - int height = 25;//QInputDialog::getInt(this, tr("New Layer"),tr("Height:"),200,1, 500, 1, &ok2); + int height = getReturnValueOfDialog(); // Create New Layer paintingArea->addLayer(width,height,0,0); @@ -89,41 +86,29 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // Opens a dialog that allows the user to delete a Layer void IntelliPhotoGui::slotDeleteLayer(){ - // Stores button value - bool ok; - // "delete Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layerNumber = QInputDialog::getInt(this, tr("delete Layer"), - tr("Number:"), - paintingArea->getNumberOfActiveLayer()+1,1, 501, 1, &ok); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); + int layerNumber = getReturnValueOfDialog(); + // Create New Layer - if (ok) { - paintingArea->deleteLayer(layerNumber-1); - UpdateGui(); - } + paintingArea->deleteLayer(layerNumber-1); + UpdateGui(); } void IntelliPhotoGui::slotSetActiveAlpha(){ - // Stores button value - bool ok1, ok2; - // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layer = QInputDialog::getInt(this, tr("Layer to set on"), - tr("Layer:"), - 1,1,500,1, &ok1); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); + int layer = getReturnValueOfDialog(); + // "New Alpha" is the title of the window - int alpha = QInputDialog::getInt(this, tr("New Alpha"), - tr("Alpha:"), - 255,0, 255, 1, &ok2); - if (ok1&&ok2) - { - paintingArea->setLayerAlpha(layer-1,alpha); - UpdateGui(); - } + this->InputDialog->getIntInput(&Loop, this->InputDialog, "New Alpha", "Alpha:", 255, 0, 255, 1); + int alpha = getReturnValueOfDialog(); + paintingArea->setLayerAlpha(layer-1,alpha); + UpdateGui(); } void IntelliPhotoGui::slotPositionMoveUp(){ @@ -157,49 +142,36 @@ void IntelliPhotoGui::slotMoveLayerDown(){ } void IntelliPhotoGui::slotClearActiveLayer(){ - // Stores button value - bool ok1, ok2, ok3, ok4; - // "Red Input" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int red = QInputDialog::getInt(this, tr("Red Input"), - tr("Red:"), - 255,0, 255,1, &ok1); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Red Input", "Red:", 255, 0, 255, 1); + int red = getReturnValueOfDialog(); + // "Green Input" is the title of the window - int green = QInputDialog::getInt(this, tr("Green Input"), - tr("Green:"), - 255,0, 255, 1, &ok2); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Green Input", "Green:", 255, 0, 255, 1); + int green = getReturnValueOfDialog(); + // "Blue Input" is the title of the window - int blue = QInputDialog::getInt(this, tr("Blue Input"), - tr("Blue:"), - 255,0, 255, 1, &ok3); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Blue Input", "Blue:", 255, 0, 255, 1); + int blue = getReturnValueOfDialog(); + // "Alpha Input" is the title of the window - int alpha = QInputDialog::getInt(this, tr("Alpha Input"), - tr("Alpha:"), - 255,0, 255, 1, &ok4); - if (ok1&&ok2&&ok3&&ok4) - { - paintingArea->floodFill(red, green, blue, alpha); - UpdateGui(); - } + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Alpha Input", "Alpha:", 255, 0, 255, 1); + int alpha = getReturnValueOfDialog(); + + paintingArea->floodFill(red, green, blue, alpha); + UpdateGui(); } void IntelliPhotoGui::slotSetActiveLayer(){ - // Stores button value - bool ok1; - // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layer = QInputDialog::getInt(this, tr("Layer to set on"), - tr("Layer:"), - 1,1,500,1, &ok1); - if (ok1) - { - paintingArea->setLayerActive(layer-1); - UpdateGui(); - } + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Layer to set on", "Layer:", 1, 1, 501, 1); + int layer = getReturnValueOfDialog(); + paintingArea->setLayerActive(layer-1); + UpdateGui(); } void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ @@ -293,12 +265,14 @@ void IntelliPhotoGui::slotResetTools(){ } void IntelliPhotoGui::slotSetWidth(){ - paintingArea->Toolsettings.setLineWidth(); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Toolsettings", "Width:", 5, 1, 50, 1); + paintingArea->Toolsettings.setLineWidth(getReturnValueOfDialog()); EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); } void IntelliPhotoGui::slotSetInnerAlpha(){ - paintingArea->Toolsettings.setInnerAlpha(); + this->InputDialog->getIntInput(&Loop, this->InputDialog, "Toolsettings", "Inner Alpha:", 255, 0, 255, 1); + paintingArea->Toolsettings.setInnerAlpha(getReturnValueOfDialog()); EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); } @@ -667,7 +641,7 @@ void IntelliPhotoGui::createGui(){ SwitchColorButton->setIconSize(QSize(Buttonsize.width()*2,Buttonsize.height())); ActiveLayerLine = new QLabel(); - QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); + QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); ActiveLayerLine->setText(string); ActiveLayerLine->setFixedSize(Buttonsize.width()*2+10,(Buttonsize.height()*2)/3); @@ -823,3 +797,15 @@ void IntelliPhotoGui::UpdateGui(){ string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name()); SecondColorButton->setStyleSheet(string); } + +int IntelliPhotoGui::getReturnValueOfDialog(){ + QFile File("test.txt"); + if(!File.open(QIODevice::ReadOnly | QIODevice::Text)){ + qDebug() << "Error Read from File"; + } + + QByteArray line = File.readLine(); + File.close(); + + return line.toInt(); +} diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 27909ee..ee58016 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -38,7 +38,6 @@ IntelliPhotoGui(IntelliInputDialog* InputDialog); void UpdateGui(); void setToolWidth(int value); -int returnValueOfInputDialog = 5; protected: // Function used to close an event @@ -106,6 +105,8 @@ bool saveFile(const QByteArray &fileFormat); void setDefaultToolValue(); +int getReturnValueOfDialog(); + // What we'll draw on PaintingArea* paintingArea; IntelliInputDialog* InputDialog; diff --git a/src/IntelliHelper/IntelliToolsettings.cpp b/src/IntelliHelper/IntelliToolsettings.cpp index 7a4219c..2232cc0 100644 --- a/src/IntelliHelper/IntelliToolsettings.cpp +++ b/src/IntelliHelper/IntelliToolsettings.cpp @@ -16,36 +16,16 @@ int IntelliToolsettings::getLineWidth(){ return lineWidth; } -void IntelliToolsettings::setLineWidth(){ - lineWidth = QInputDialog::getInt(nullptr,"Line Width Input", "Width",1,1,50,1); -} - void IntelliToolsettings::setLineWidth(int LineWidth){ - if(LineWidth < 1) { - LineWidth = 1; - } - else if(LineWidth > 50) { - LineWidth = 50; - } - lineWidth = LineWidth; + lineWidth = LineWidth; } int IntelliToolsettings::getInnerAlpha(){ return this->innerAlpha; } -void IntelliToolsettings::setInnerAlpha(){ - this->innerAlpha = QInputDialog::getInt(nullptr,"Inner Aplha Input", "Value",0,0,255,1); -} - void IntelliToolsettings::setInnerAlpha(int innerAlpha){ - if(innerAlpha < 0) { - innerAlpha = 0; - } - else if(innerAlpha > 255) { - innerAlpha = 255; - } - this->innerAlpha = innerAlpha; + this->innerAlpha = innerAlpha; } IntelliToolsettings::LineStyle IntelliToolsettings::getLinestyle(){ diff --git a/src/IntelliHelper/IntelliToolsettings.h b/src/IntelliHelper/IntelliToolsettings.h index 1a63bbc..b96e953 100644 --- a/src/IntelliHelper/IntelliToolsettings.h +++ b/src/IntelliHelper/IntelliToolsettings.h @@ -13,10 +13,8 @@ enum class LineStyle { IntelliToolsettings(); virtual ~IntelliToolsettings(); int getLineWidth(); -void setLineWidth(); void setLineWidth(int LineWidth); int getInnerAlpha(); -void setInnerAlpha(); void setInnerAlpha(int innerAlpha); LineStyle getLinestyle(); diff --git a/src/IntelliPhoto.pro b/src/IntelliPhoto.pro index f3c669a..faf6c86 100644 --- a/src/IntelliPhoto.pro +++ b/src/IntelliPhoto.pro @@ -72,3 +72,5 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin RESOURCES += \ Bilder.qrc + +DISTFILES += From d17bf4850cc01b1a566b71df232c65eddd41ce93 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Wed, 15 Jan 2020 18:09:23 +0100 Subject: [PATCH 49/97] all benchmark just polygon interrupt missing --- src/Image/IntelliRasterImage.cpp | 1 - src/Tool/IntelliTool.cpp | 2 +- src/Tool/IntelliToolPolygon.cpp | 23 +- src/Tool/IntelliToolPolygon.h | 4 +- src/tst_unittest.cpp | 719 +++++++++++++++++++++++++++++++ 5 files changed, 734 insertions(+), 15 deletions(-) diff --git a/src/Image/IntelliRasterImage.cpp b/src/Image/IntelliRasterImage.cpp index 8872cff..6ebf497 100644 --- a/src/Image/IntelliRasterImage.cpp +++ b/src/Image/IntelliRasterImage.cpp @@ -47,6 +47,5 @@ QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){ } void IntelliRasterImage::setPolygon(const std::vector& polygonData){ - qDebug() << "Raster Image has no polygon data " << polygonData.size() <<"\n"; return; } diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 2dd2272..7f5b54f 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -5,9 +5,9 @@ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, In this->Area=Area; this->colorPicker=colorPicker; this->Toolsettings=Toolsettings; + this->isDrawing = false; } - IntelliTool::~IntelliTool(){ } diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 4cc5fa7..57eb7c1 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -7,38 +7,38 @@ IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) : IntelliTool(Area, colorPicker, Toolsettings){ isPointNearStart = false; - isDrawing = false; + drawingOfPolygon = false; isInside = false; this->ActiveType = Tooltype::POLYGON; } IntelliToolPolygon::~IntelliToolPolygon(){ - if(isDrawing) { + if(drawingOfPolygon) { IntelliTool::onMouseRightPressed(0,0); } } void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ - if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + if(!drawingOfPolygon && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); QPoint Point(x,y); isInside = IntelliTriangulation::isInPolygon(Triangles,Point); } - else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + else if(!drawingOfPolygon && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { isInside = true; } - if(isInside && !isDrawing) { + if(isInside && !drawingOfPolygon) { IntelliTool::onMouseLeftPressed(x,y); QPoint drawingPoint = QPoint(x,y); - isDrawing = true; + drawingOfPolygon = true; QPointList.push_back(drawingPoint); this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); this->Canvas->image->calculateVisiblity(); } - else if(isDrawing && isNearStart(x,y,QPointList.front())) { + else if(drawingOfPolygon && isNearStart(x,y,QPointList.front())) { if(QPointList.size() > 2) { isPointNearStart = true; this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); @@ -46,13 +46,14 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ } else{ isInside = false; - isDrawing = false; + drawingOfPolygon = false; QPointList.clear(); IntelliTool::onMouseRightPressed(x,y); + IntelliTool::onMouseRightReleased(x,y); } } - else if(isDrawing) { + else if(drawingOfPolygon) { QPoint drawingPoint(x,y); QPointList.push_back(drawingPoint); this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); @@ -71,7 +72,7 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ if(isPointNearStart) { isInside = false; isPointNearStart = false; - isDrawing = false; + drawingOfPolygon = false; std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); QPoint Point; QColor colorTwo(colorPicker->getSecondColor()); @@ -99,7 +100,7 @@ void IntelliToolPolygon::onMouseRightReleased(int x, int y){ void IntelliToolPolygon::onWheelScrolled(int value){ IntelliTool::onWheelScrolled(value); - if(!isDrawing) { + if(!drawingOfPolygon) { Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value); } } diff --git a/src/Tool/IntelliToolPolygon.h b/src/Tool/IntelliToolPolygon.h index cb6365a..fa0cea9 100644 --- a/src/Tool/IntelliToolPolygon.h +++ b/src/Tool/IntelliToolPolygon.h @@ -25,9 +25,9 @@ class IntelliToolPolygon : public IntelliTool bool isNearStart(int x, int y, QPoint Startpoint); /*! - * \brief IsDrawing true while drawing, else false. + * \brief drawingOfPolygon true while drawing, else false. */ -bool isDrawing; +bool drawingOfPolygon; /*! * \brief isInside Checks if Point is inside Image diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp index 7432d16..f5692c2 100644 --- a/src/tst_unittest.cpp +++ b/src/tst_unittest.cpp @@ -35,6 +35,8 @@ private slots: void cleanupTestCase(); //void test_case1(); + ///Test here + //test painting area void test_addLayer(); void test_deleteLayer(); @@ -90,6 +92,65 @@ private slots: //test Triangulation void test_Triangulation_Coverage(); + + + ///Benchmark here + + //bench painting area + void bench_addLayer(); + void bench_deleteLayer(); + void bench_setActive(); + void bench_setAlpha(); + void bench_floodFill(); + void bench_moveActive(); + void bench_setPolygon(); + void bench_setLayerUp(); + void bench_setLayerDown(); + + void bench_createTools(); + + //bench Raster-Image operations + void bench_RasterImage_drawPixel(); + void bench_RasterImage_drawLine(); + void bench_RasterImage_drawPoint(); + void bench_RasterImage_getDisplayable(); + void bench_RasterImage_getPixelColor(); + void bench_RasterImage_getImageData(); + void bench_RasterImage_setImageData(); + + //bench Shaped-Image operations + void bench_ShapedImage_drawPixel(); + void bench_ShapedImage_drawLine(); + void bench_ShapedImage_drawPoint(); + void bench_ShapedImage_getDisplayable(); + void bench_ShapedImage_getPixelColor(); + void bench_ShapedImage_getImageData(); + void bench_ShapedImage_setImageData(); + + //bench tools + void bench_Circle_fullDraw(); + void bench_Circle_interruptedDraw(); + + void bench_FloodFill_fullDraw(); + void bench_FloodFill_interruptedDraw(); + + void bench_Line_fullDraw(); + void bench_Line_interruptedDraw(); + + void bench_Pen_fullDraw(); + void bench_Pen_interruptedDraw(); + + void bench_Plain_fullDraw(); + void bench_Plain_interruptedDraw(); + + void bench_Polygon_fullDraw(); + //void bench_Polygon_interruptedDraw(); + + void bench_Rectangle_fullDraw(); + void bench_Rectangle_interruptedDraw(); + + //bench Triangulation + void bench_Triangulation_Coverage(); }; UnitTest::UnitTest() @@ -672,6 +733,7 @@ void UnitTest::test_Circle_interruptedDraw(){ } + void UnitTest::test_FloodFill_fullDraw(){ area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); @@ -714,6 +776,7 @@ void UnitTest::test_FloodFill_interruptedDraw(){ area->deleteLayer(0); } + void UnitTest::test_Line_fullDraw(){ area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); @@ -896,6 +959,7 @@ void UnitTest::test_Polygon_fullDraw(){ area->deleteLayer(0); } + void UnitTest::test_Polygon_interruptedDraw(){ area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); std::vector points{ @@ -951,6 +1015,7 @@ void UnitTest::test_Polygon_interruptedDraw(){ area->deleteLayer(0); } + void UnitTest::test_Rectangle_fullDraw(){ area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); @@ -996,6 +1061,7 @@ void UnitTest::test_Rectangle_interruptedDraw(){ area->deleteLayer(0); } + //test Triangulation void UnitTest::test_Triangulation_Coverage(){ std::vector points{ @@ -1024,6 +1090,659 @@ void UnitTest::test_Triangulation_Coverage(){ QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false); } + + +///Benchmarks here + +void UnitTest::bench_addLayer(){ + QBENCHMARK{ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + } + area->deleteLayer(0); +} + +void UnitTest::bench_deleteLayer(){ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + QBENCHMARK{ + area->deleteLayer(0); + } +} + +void UnitTest::bench_setActive(){ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + + QBENCHMARK{ + area->setLayerActive(0); + } + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::bench_setAlpha(){ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + + QBENCHMARK{ + area->setLayerAlpha(0,0); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_floodFill(){ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + + QBENCHMARK{ + area->floodFill(255,255,255,255); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_moveActive(){ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + + area->setLayerActive(0); + QBENCHMARK{ + area->moveActiveLayer(1); + } + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::bench_setPolygon(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + std::vector polygon{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,10), + QPoint(00,10) + }; + + QBENCHMARK{ + area->layerBundle[1].image->setPolygon(polygon); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_setLayerUp(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + area->setLayerActive(0); + QBENCHMARK{ + area->selectLayerUp(); + } + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::bench_setLayerDown(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QBENCHMARK{ + area->selectLayerDown(); + } + + area->deleteLayer(1); + area->deleteLayer(0); +} + +void UnitTest::bench_createTools(){ + QBENCHMARK{ + area->createPenTool(); + } + + QBENCHMARK{ + area->createLineTool(); + } + + QBENCHMARK{ + area->createPlainTool(); + } + + QBENCHMARK{ + area->createCircleTool(); + } + + QBENCHMARK{ + area->createPolygonTool(); + } + + QBENCHMARK{ + area->createFloodFillTool(); + } + + QBENCHMARK{ + area->createRectangleTool(); + } +} + +void UnitTest::bench_RasterImage_drawPixel(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point(0,0); + + QBENCHMARK{ + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_RasterImage_drawLine(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point1(000,000); + QPoint point2(200,200); + + QBENCHMARK{ + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_RasterImage_drawPoint(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point(000,000); + + QBENCHMARK{ + area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_RasterImage_getDisplayable(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QBENCHMARK{ + area->layerBundle[0].image->getDisplayable(QSize(200,200),255); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_RasterImage_getPixelColor(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QPoint point(000,000); + + QBENCHMARK{ + area->layerBundle[0].image->getPixelColor(point); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_RasterImage_getImageData(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QBENCHMARK{ + area->layerBundle[0].image->getImageData(); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_RasterImage_setImageData(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + + QImage img = area->layerBundle[0].image->getImageData(); + QBENCHMARK{ + area->layerBundle[0].image->setImageData(img); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_drawPixel(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QPoint point(0,0); + + QBENCHMARK{ + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_drawLine(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QPoint point1(000,000); + QPoint point2(200,200); + + QBENCHMARK{ + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_drawPoint(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QPoint point(000,000); + + QBENCHMARK{ + area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_getDisplayable(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QBENCHMARK{ + area->layerBundle[0].image->getDisplayable(QSize(200,200),255); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_getPixelColor(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QPoint point(000,000); + + QBENCHMARK{ + area->layerBundle[0].image->getPixelColor(point); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_getImageData(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QBENCHMARK{ + area->layerBundle[0].image->getImageData(); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_ShapedImage_setImageData(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + + QImage img = area->layerBundle[0].image->getImageData(); + QBENCHMARK{ + area->layerBundle[0].image->setImageData(img); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Circle_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Circle_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + + +void UnitTest::bench_FloodFill_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_FloodFill_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + + +void UnitTest::bench_Line_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Line_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Pen_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Pen_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Plain_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Plain_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Polygon_fullDraw(){ + area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->floodFill(255,0,0,255); + + QBENCHMARK{ + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); + + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); + + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); + + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + area->Tool->onMouseMoved(points[0].x(), points[0].y()); + + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + } + + area->deleteLayer(0); +} + +/* +void UnitTest::bench_Polygon_interruptedDraw(){ + area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(100,000), + QPoint(000,100), + QPoint(100,200), + QPoint(200,100) + }; + + std::vector test{ + QPoint(000,000), + QPoint(000,200), + QPoint(200,000), + QPoint(200,200), + QPoint(100,100) + }; + + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->floodFill(255,0,0,255); + + QBENCHMARK{ + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); + + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); + + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); + + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + + area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); + area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); + } + + area->deleteLayer(0); +} +*/ + +void UnitTest::bench_Rectangle_fullDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,150); + + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + +void UnitTest::bench_Rectangle_interruptedDraw(){ + area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->floodFill(255,0,0,255); + + QPoint point1(100,100); + QPoint point2(150,150); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } + + area->deleteLayer(0); +} + + +void UnitTest::bench_Triangulation_Coverage(){ + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + + QBENCHMARK{ + std::vector tria = IntelliTriangulation::calculateTriangles(points); + QPoint point; + for(int i=0; i<200; i++){ + point.setX(i); + for(int j=0; j<200; j++){ + point.setY(j); + IntelliTriangulation::isInPolygon(tria, point); + } + } + } +} + + + + + QTEST_MAIN(UnitTest) #include "tst_unittest.moc" From 2b433101c7cfd127ef319fd3a5f914f9685ba094 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Wed, 15 Jan 2020 18:19:02 +0100 Subject: [PATCH 50/97] =?UTF-8?q?kein=20debug=20wird=20ben=C3=B6tigt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/GUI/IntelliInputDialog.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index d420e8b..9d03f51 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -2,7 +2,6 @@ #define INTELLIINPUTDIALOG_H #include -#include class IntelliInputDialog : public QDialog { From 72d55b2c8fec77f3f46f9f92052091122fc81fa9 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Wed, 15 Jan 2020 18:40:17 +0100 Subject: [PATCH 51/97] first Cleanup --- src/GUI/IntelliInputDialog.cpp | 66 ++++++++++++++++------------------ src/GUI/IntelliInputDialog.h | 5 +-- src/GUI/IntelliPhotoGui.cpp | 30 ++++++++-------- src/GUI/IntelliPhotoGui.h | 3 +- src/main.cpp | 5 +-- 5 files changed, 50 insertions(+), 59 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index 4e7bee6..ebcc72c 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -1,56 +1,57 @@ #include "IntelliInputDialog.h" #include -IntelliInputDialog::IntelliInputDialog(QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step) + + +IntelliInputDialog::IntelliInputDialog(QEventLoop* Loop, QString Title, QString Label, int value, int minValue, int maxValue, int step) { - this->Dialog = Dialog; createInputBox(Title, Label, value, minValue, maxValue, step); createConnections(Loop); setValuesOfPalette(); setInputBoxStyle(); + Loop->exec(); } void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){ - this->Dialog = new QDialog(); - Dialog->setWindowFlags(Dialog->windowFlags() & ~Qt::WindowContextHelpButtonHint); + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); if(Title == nullptr) { - Dialog->setWindowTitle("Input Box"); + this->setWindowTitle("Input Box"); } else{ - Dialog->setWindowTitle(Title); + this->setWindowTitle(Title); } - Layout = new QGridLayout(); - ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + this->Layout = new QGridLayout(); + this->ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - InputLabel = new QLabel(); + this->InputLabel = new QLabel(); if(Label == nullptr) { - InputLabel->setText("Width:"); + this->InputLabel->setText("Width:"); } else{ - InputLabel->setText(Label); + this->InputLabel->setText(Label); } - InputLabel->setFixedSize(Linesize); + this->InputLabel->setFixedSize(Linesize); - Input = new QSpinBox(); - Input->setFixedSize(Linesize); - Input->setRange(minValue,maxValue); - Input->setValue(value); + this->Input = new QSpinBox(); + this->Input->setFixedSize(Linesize); + this->Input->setRange(minValue,maxValue); + this->Input->setValue(value); - okButton = ButtonBox->button(QDialogButtonBox::Ok); - okButton->setFixedSize(Buttonsize); - okButton->setAutoDefault(false); - okButton->setDefault(false); + this->okButton = ButtonBox->button(QDialogButtonBox::Ok); + this->okButton->setFixedSize(Buttonsize); + this->okButton->setAutoDefault(false); + this->okButton->setDefault(false); - cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); - cancelButton->setFixedSize(Buttonsize); - cancelButton->setAutoDefault(false); - cancelButton->setDefault(false); + this->cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); + this->cancelButton->setFixedSize(Buttonsize); + this->cancelButton->setAutoDefault(false); + this->cancelButton->setDefault(false); Layout->addWidget(InputLabel,1,1,1,1); Layout->addWidget(Input,2,1,1,1); Layout->addWidget(ButtonBox,3,1,1,1); - Dialog->setLayout(Layout); - Dialog->resize(172,94); - Dialog->show(); + this->setLayout(Layout); + this->resize(172,94); + this->show(); } void IntelliInputDialog::createConnections(QEventLoop* Loop){ @@ -65,7 +66,7 @@ void IntelliInputDialog::setInputBoxStyle(){ Input->setPalette(Palette); okButton->setPalette(Palette); cancelButton->setPalette(Palette); - Dialog->setStyleSheet("background-color:rgb(64,64,64)"); + this->setStyleSheet("background-color:rgb(64,64,64)"); } void IntelliInputDialog::setValuesOfPalette(){ @@ -81,7 +82,7 @@ void IntelliInputDialog::setValuesOfPalette(){ } void IntelliInputDialog::slotCloseEvent(){ - Dialog->close(); + this->close(); } void IntelliInputDialog::slotEingabe(){ @@ -95,10 +96,5 @@ void IntelliInputDialog::slotEingabe(){ File.write(p); File.close(); - Dialog->close(); -} - -void IntelliInputDialog::getIntInput(QEventLoop* Loop, IntelliInputDialog* Dialog, QString Title, QString Label, int value, int minValue, int maxValue, int step){ - this->Dialog = new IntelliInputDialog(Loop, Dialog, Title, Label, value, minValue, maxValue, step); - Loop->exec(); + this->close(); } diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index 9d03f51..d02ecdb 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -7,9 +7,8 @@ class IntelliInputDialog : public QDialog { Q_OBJECT public: -IntelliInputDialog(QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +IntelliInputDialog(QEventLoop* Loop = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); -void getIntInput(QEventLoop* Loop = nullptr, IntelliInputDialog* Dialog = nullptr, QString Title = "InputBox", QString Label = "Weight:", int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); public slots: void slotCloseEvent(); @@ -21,8 +20,6 @@ void createConnections(QEventLoop* Loop = nullptr); void setValuesOfPalette(); void setInputBoxStyle(); -QDialog* Dialog; - QGridLayout* Layout; QDialogButtonBox* ButtonBox; diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 6281e92..b23feac 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -4,8 +4,7 @@ #include "Layer/PaintingArea.h" // IntelliPhotoGui constructor -IntelliPhotoGui::IntelliPhotoGui(IntelliInputDialog* InputDialog){ - this->InputDialog = InputDialog; +IntelliPhotoGui::IntelliPhotoGui(){ // create Gui elements and lay them out createGui(); // Create actions @@ -71,11 +70,11 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - this->InputDialog->getIntInput(&Loop, this->InputDialog, "New Layer", "Width:", 200, 0, 5000, 1); + IntelliInputDialog widthDialog(&Loop, "New Layer", "Width:", 200, 0, 5000, 1); int width = getReturnValueOfDialog(); - this->InputDialog->getIntInput(&Loop, this->InputDialog, "New Layer", "Height:", 200, 0, 5000, 1); + IntelliInputDialog heightDialog(&Loop, "New Layer", "Height:", 200, 0, 5000, 1); int height = getReturnValueOfDialog(); @@ -89,7 +88,7 @@ void IntelliPhotoGui::slotDeleteLayer(){ // "delete Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); + IntelliInputDialog dialog(&Loop, "Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); int layerNumber = getReturnValueOfDialog(); // Create New Layer @@ -101,11 +100,12 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); + + IntelliInputDialog layerDialog(&Loop, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); int layer = getReturnValueOfDialog(); // "New Alpha" is the title of the window - this->InputDialog->getIntInput(&Loop, this->InputDialog, "New Alpha", "Alpha:", 255, 0, 255, 1); + IntelliInputDialog alphaDialog;(&Loop, "New Alpha", "Alpha:", 255, 0, 255, 1); int alpha = getReturnValueOfDialog(); paintingArea->setLayerAlpha(layer-1,alpha); UpdateGui(); @@ -145,19 +145,21 @@ void IntelliPhotoGui::slotClearActiveLayer(){ // "Red Input" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Red Input", "Red:", 255, 0, 255, 1); + + + IntelliInputDialog redDialog(&Loop, "Red Input", "Red:", 255, 0, 255, 1); int red = getReturnValueOfDialog(); // "Green Input" is the title of the window - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Green Input", "Green:", 255, 0, 255, 1); + IntelliInputDialog greenDialog(&Loop, "Green Input", "Green:", 255, 0, 255, 1); int green = getReturnValueOfDialog(); // "Blue Input" is the title of the window - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Blue Input", "Blue:", 255, 0, 255, 1); + IntelliInputDialog blueDialog(&Loop, "Blue Input", "Blue:", 255, 0, 255, 1); int blue = getReturnValueOfDialog(); // "Alpha Input" is the title of the window - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Alpha Input", "Alpha:", 255, 0, 255, 1); + IntelliInputDialog alphaDialog(&Loop, "Alpha Input", "Alpha:", 255, 0, 255, 1); int alpha = getReturnValueOfDialog(); paintingArea->floodFill(red, green, blue, alpha); @@ -168,7 +170,7 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Layer to set on", "Layer:", 1, 1, 501, 1); + IntelliInputDialog dialog(&Loop, "Layer to set on", "Layer:", 1, 1, 501, 1); int layer = getReturnValueOfDialog(); paintingArea->setLayerActive(layer-1); UpdateGui(); @@ -265,13 +267,13 @@ void IntelliPhotoGui::slotResetTools(){ } void IntelliPhotoGui::slotSetWidth(){ - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Toolsettings", "Width:", 5, 1, 50, 1); + IntelliInputDialog dialog(&Loop, "Toolsettings", "Width:", 5, 1, 50, 1); paintingArea->Toolsettings.setLineWidth(getReturnValueOfDialog()); EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); } void IntelliPhotoGui::slotSetInnerAlpha(){ - this->InputDialog->getIntInput(&Loop, this->InputDialog, "Toolsettings", "Inner Alpha:", 255, 0, 255, 1); + IntelliInputDialog dialog(&Loop, "Toolsettings", "Inner Alpha:", 255, 0, 255, 1); paintingArea->Toolsettings.setInnerAlpha(getReturnValueOfDialog()); EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); } diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index ee58016..6aea72d 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -33,7 +33,7 @@ public: /*! * \brief The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window */ -IntelliPhotoGui(IntelliInputDialog* InputDialog); +IntelliPhotoGui(); void UpdateGui(); @@ -109,7 +109,6 @@ int getReturnValueOfDialog(); // What we'll draw on PaintingArea* paintingArea; -IntelliInputDialog* InputDialog; QEventLoop Loop; const QSize Buttonsize = QSize(35,35); diff --git a/src/main.cpp b/src/main.cpp index 913370c..9eec82f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,4 @@ #include "GUI/IntelliPhotoGui.h" -#include "GUI/IntelliInputDialog.h" #include #include #include @@ -8,10 +7,8 @@ int main(int argc, char*argv[]){ // The main application QApplication app(argc, argv); - IntelliInputDialog* InputDialog; - // Create and open the main window - IntelliPhotoGui window(InputDialog); + IntelliPhotoGui window; window.show(); return app.exec(); From 0e6ce309c9211e12e9e3e17d680e7ade1d9bb045 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Wed, 15 Jan 2020 19:04:51 +0100 Subject: [PATCH 52/97] code cleanup #2 --- src/GUI/IntelliInputDialog.cpp | 17 +++----- src/GUI/IntelliInputDialog.h | 5 +++ src/GUI/IntelliPhotoGui.cpp | 80 ++++++++++++---------------------- src/GUI/IntelliPhotoGui.h | 2 - 4 files changed, 38 insertions(+), 66 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index ebcc72c..d12b1f1 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -11,6 +11,11 @@ IntelliInputDialog::IntelliInputDialog(QEventLoop* Loop, QString Title, QString Loop->exec(); } +int IntelliInputDialog::getInt(QEventLoop* Loop, QString Title, QString Label, int value, int minValue, int maxValue, int step){ + IntelliInputDialog dialog(Loop, Title, Label, value, minValue, maxValue, step); + return dialog.valueInt; +} + void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){ this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); if(Title == nullptr) { @@ -86,15 +91,5 @@ void IntelliInputDialog::slotCloseEvent(){ } void IntelliInputDialog::slotEingabe(){ - QFile File("test.txt"); - - if(!File.open(QIODevice::WriteOnly | QIODevice::Text)){ - qDebug() << "Error Write to File"; - } - std::string test = QString("%1").arg(Input->value()).toStdString(); - const char* p = test.c_str(); - File.write(p); - File.close(); - - this->close(); + valueInt= QString("%1").arg(Input->value()).toInt(); } diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index d02ecdb..915473e 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -10,6 +10,8 @@ public: IntelliInputDialog(QEventLoop* Loop = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +static int getInt(QEventLoop* Loop = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); + public slots: void slotCloseEvent(); void slotEingabe(); @@ -20,8 +22,11 @@ void createConnections(QEventLoop* Loop = nullptr); void setValuesOfPalette(); void setInputBoxStyle(); +int valueInt; + QGridLayout* Layout; QDialogButtonBox* ButtonBox; +QEventLoop loop; const QSize Linesize = QSize(150,20); const QSize Buttonsize = QSize(72,20); diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index b23feac..e6a5350 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -15,8 +15,8 @@ IntelliPhotoGui::IntelliPhotoGui(){ setIntelliStyle(); // Size the app resize(600,600); - //showMaximized(); - setDefaultToolValue(); + //showMaximized(); + setDefaultToolValue(); } // User tried to close the app @@ -70,13 +70,9 @@ void IntelliPhotoGui::slotCreateNewLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - IntelliInputDialog widthDialog(&Loop, "New Layer", "Width:", 200, 0, 5000, 1); + int width = IntelliInputDialog::getInt(&Loop, "New Layer", "Width:", 200, 0, 5000, 1); - int width = getReturnValueOfDialog(); - - IntelliInputDialog heightDialog(&Loop, "New Layer", "Height:", 200, 0, 5000, 1); - - int height = getReturnValueOfDialog(); + int height = IntelliInputDialog::getInt(&Loop, "New Layer", "Height:", 200, 0, 5000, 1); // Create New Layer paintingArea->addLayer(width,height,0,0); @@ -88,8 +84,7 @@ void IntelliPhotoGui::slotDeleteLayer(){ // "delete Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - IntelliInputDialog dialog(&Loop, "Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); - int layerNumber = getReturnValueOfDialog(); + int layerNumber = IntelliInputDialog::getInt(&Loop, "Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); // Create New Layer paintingArea->deleteLayer(layerNumber-1); @@ -101,12 +96,10 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ // the next tr is the text to display // Define the standard Value, min, max, step and ok button - IntelliInputDialog layerDialog(&Loop, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); - int layer = getReturnValueOfDialog(); + int layer = IntelliInputDialog::getInt(&Loop, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); // "New Alpha" is the title of the window - IntelliInputDialog alphaDialog;(&Loop, "New Alpha", "Alpha:", 255, 0, 255, 1); - int alpha = getReturnValueOfDialog(); + int alpha = IntelliInputDialog::getInt(&Loop, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); paintingArea->setLayerAlpha(layer-1,alpha); UpdateGui(); } @@ -146,21 +139,17 @@ void IntelliPhotoGui::slotClearActiveLayer(){ // the next tr is the text to display // Define the standard Value, min, max, step and ok button - - IntelliInputDialog redDialog(&Loop, "Red Input", "Red:", 255, 0, 255, 1); - int red = getReturnValueOfDialog(); + // "Red Input" is the title of the window + int red = IntelliInputDialog::getInt(&Loop, "Green Input", "Green:", 255, 0, 255, 1); // "Green Input" is the title of the window - IntelliInputDialog greenDialog(&Loop, "Green Input", "Green:", 255, 0, 255, 1); - int green = getReturnValueOfDialog(); + int green = IntelliInputDialog::getInt(&Loop, "Green Input", "Green:", 255, 0, 255, 1); // "Blue Input" is the title of the window - IntelliInputDialog blueDialog(&Loop, "Blue Input", "Blue:", 255, 0, 255, 1); - int blue = getReturnValueOfDialog(); + int blue = IntelliInputDialog::getInt(&Loop, "Blue Input", "Blue:", 255, 0, 255, 1); - // "Alpha Input" is the title of the window - IntelliInputDialog alphaDialog(&Loop, "Alpha Input", "Alpha:", 255, 0, 255, 1); - int alpha = getReturnValueOfDialog(); + // "Alpha Input" is the title of the window + int alpha = IntelliInputDialog::getInt(&Loop, "Alpha Input", "Alpha:", 255, 0, 255, 1); paintingArea->floodFill(red, green, blue, alpha); UpdateGui(); @@ -170,8 +159,7 @@ void IntelliPhotoGui::slotSetActiveLayer(){ // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - IntelliInputDialog dialog(&Loop, "Layer to set on", "Layer:", 1, 1, 501, 1); - int layer = getReturnValueOfDialog(); + int layer = IntelliInputDialog::getInt(&Loop, "Layer to set on", "Layer:", 1, 1, 501, 1); paintingArea->setLayerActive(layer-1); UpdateGui(); } @@ -244,16 +232,16 @@ void IntelliPhotoGui::slotAboutDialog(){ } void IntelliPhotoGui::slotEnterPressed(){ - QString string = EditLineWidth->text(); - if(string.toInt() > 50) { - EditLineWidth->setText("50"); - } - paintingArea->Toolsettings.setLineWidth(string.toInt()); - string = EditLineInnerAlpha->text(); - if(string.toInt() > 255) { - EditLineInnerAlpha->setText("255"); - } - paintingArea->Toolsettings.setInnerAlpha(string.toInt()); + QString string = EditLineWidth->text(); + if(string.toInt() > 50) { + EditLineWidth->setText("50"); + } + paintingArea->Toolsettings.setLineWidth(string.toInt()); + string = EditLineInnerAlpha->text(); + if(string.toInt() > 255) { + EditLineInnerAlpha->setText("255"); + } + paintingArea->Toolsettings.setInnerAlpha(string.toInt()); } void IntelliPhotoGui::slotResetTools(){ @@ -267,14 +255,12 @@ void IntelliPhotoGui::slotResetTools(){ } void IntelliPhotoGui::slotSetWidth(){ - IntelliInputDialog dialog(&Loop, "Toolsettings", "Width:", 5, 1, 50, 1); - paintingArea->Toolsettings.setLineWidth(getReturnValueOfDialog()); + paintingArea->Toolsettings.setLineWidth(IntelliInputDialog::getInt(&Loop, "Toolsettings", "Width:", 5, 1, 50, 1)); EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); } void IntelliPhotoGui::slotSetInnerAlpha(){ - IntelliInputDialog dialog(&Loop, "Toolsettings", "Inner Alpha:", 255, 0, 255, 1); - paintingArea->Toolsettings.setInnerAlpha(getReturnValueOfDialog()); + paintingArea->Toolsettings.setInnerAlpha(IntelliInputDialog::getInt(&Loop, "Toolsettings", "Width:", 5, 1, 50, 1)); EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); } @@ -768,7 +754,7 @@ bool IntelliPhotoGui::saveFile(const QByteArray &fileFormat){ } void IntelliPhotoGui::setDefaultToolValue(){ - slotEnterPressed(); + slotEnterPressed(); } void IntelliPhotoGui::setToolWidth(int value){ @@ -799,15 +785,3 @@ void IntelliPhotoGui::UpdateGui(){ string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name()); SecondColorButton->setStyleSheet(string); } - -int IntelliPhotoGui::getReturnValueOfDialog(){ - QFile File("test.txt"); - if(!File.open(QIODevice::ReadOnly | QIODevice::Text)){ - qDebug() << "Error Read from File"; - } - - QByteArray line = File.readLine(); - File.close(); - - return line.toInt(); -} diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 6aea72d..8f18180 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -105,8 +105,6 @@ bool saveFile(const QByteArray &fileFormat); void setDefaultToolValue(); -int getReturnValueOfDialog(); - // What we'll draw on PaintingArea* paintingArea; QEventLoop Loop; From 33c5708ce5b4b237e1cc7e4b092bf98af4b7c324 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Wed, 15 Jan 2020 19:39:15 +0100 Subject: [PATCH 53/97] all tests unified, benchmark and unit test complete --- src/tst_unittest.cpp | 188 ++++++++++++++++++------------------------- 1 file changed, 79 insertions(+), 109 deletions(-) diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp index f5692c2..1bb3390 100644 --- a/src/tst_unittest.cpp +++ b/src/tst_unittest.cpp @@ -144,7 +144,7 @@ private slots: void bench_Plain_interruptedDraw(); void bench_Polygon_fullDraw(); - //void bench_Polygon_interruptedDraw(); + void bench_Polygon_interruptedDraw(); void bench_Rectangle_fullDraw(); void bench_Rectangle_interruptedDraw(); @@ -176,7 +176,7 @@ void UnitTest::cleanupTestCase() //test painting area void UnitTest::test_addLayer(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QCOMPARE(area->layerBundle.size(), 1); QCOMPARE(area->activeLayer, 0); @@ -184,15 +184,15 @@ void UnitTest::test_addLayer(){ QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].width, 200); QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].widthOffset, 10); - QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].height, 400); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].height, 200); QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].heightOffset, 20); area->deleteLayer(0); } void UnitTest::test_deleteLayer(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->deleteLayer(3); QCOMPARE(area->layerBundle.size(), 2); @@ -213,8 +213,8 @@ void UnitTest::test_deleteLayer(){ } void UnitTest::test_setActive(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->setLayerActive(0); QCOMPARE(area->activeLayer, 0); @@ -230,8 +230,8 @@ void UnitTest::test_setActive(){ } void UnitTest::test_setAlpha(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->setLayerAlpha(0,0); QCOMPARE(area->layerBundle[0].alpha, 0); @@ -253,13 +253,13 @@ void UnitTest::test_setAlpha(){ } void UnitTest::test_floodFill(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->floodFill(255,255,255,255); QPoint point; for(size_t i = 0; i<200; i++){ point.setX(static_cast(i)); - for(size_t j = 0; i<400; i++){ + for(size_t j = 0; i<200; i++){ point.setY(static_cast(j)); QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(255,255,255,255)); } @@ -268,7 +268,7 @@ void UnitTest::test_floodFill(){ area->floodFill(0,0,0,0); for(size_t i = 0; i<200; i++){ point.setX(static_cast(i)); - for(size_t j = 0; i<400; i++){ + for(size_t j = 0; i<200; i++){ point.setY(static_cast(j)); QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); } @@ -277,7 +277,7 @@ void UnitTest::test_floodFill(){ area->floodFill(-1,-1,-1,-1); for(size_t i = 0; i<200; i++){ point.setX(static_cast(i)); - for(size_t j = 0; i<400; i++){ + for(size_t j = 0; i<200; i++){ point.setY(static_cast(j)); QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); } @@ -286,7 +286,7 @@ void UnitTest::test_floodFill(){ area->floodFill(256,256,256,256); for(size_t i = 0; i<200; i++){ point.setX(static_cast(i)); - for(size_t j = 0; i<400; i++){ + for(size_t j = 0; i<200; i++){ point.setY(static_cast(j)); QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); } @@ -296,8 +296,8 @@ void UnitTest::test_floodFill(){ } void UnitTest::test_moveActive(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->floodFill(0,0,0,255); QPoint point(0,0); @@ -323,8 +323,8 @@ void UnitTest::test_moveActive(){ } void UnitTest::test_setPolygon(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); std::vector polygon{ QPoint(10,00), @@ -345,8 +345,8 @@ void UnitTest::test_setPolygon(){ } void UnitTest::test_setLayerUp(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->selectLayerUp(); QCOMPARE(area->activeLayer, 1); @@ -362,8 +362,8 @@ void UnitTest::test_setLayerUp(){ } void UnitTest::test_setLayerDown(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->selectLayerDown(); QCOMPARE(area->activeLayer, 0); @@ -403,7 +403,7 @@ void UnitTest::test_createTools(){ //test Raster-Image operations void UnitTest::test_RasterImage_drawPixel(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(0,0); @@ -416,7 +416,7 @@ void UnitTest::test_RasterImage_drawPixel(){ } void UnitTest::test_RasterImage_drawLine(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point1(0,0); QPoint point2(10,10); @@ -441,7 +441,7 @@ void UnitTest::test_RasterImage_drawLine(){ } void UnitTest::test_RasterImage_drawPoint(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point1(5,5); QPoint point2(5,6); @@ -461,14 +461,14 @@ void UnitTest::test_RasterImage_drawPoint(){ } void UnitTest::test_RasterImage_getDisplayable(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->floodFill(255,255,255,255); - QImage img = area->layerBundle[0].image->getDisplayable(QSize(200,400),255); + QImage img = area->layerBundle[0].image->getDisplayable(QSize(200,200),255); QPoint point; for(size_t i=0; i<200; i++){ point.setX(static_cast(i)); - for(size_t j=0; j<400; j++){ + for(size_t j=0; j<200; j++){ point.setY(static_cast(j)); QVERIFY(img.pixelColor(point) == QColor(255,255,255,255)); } @@ -478,7 +478,7 @@ void UnitTest::test_RasterImage_getDisplayable(){ } void UnitTest::test_RasterImage_getPixelColor(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(0,0); area->floodFill(0,0,0,255); @@ -538,7 +538,7 @@ void UnitTest::test_RasterImage_setImageData(){ //test Shaped-Image operations void UnitTest::test_ShapedImage_drawPixel(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(0,0); @@ -551,7 +551,7 @@ void UnitTest::test_ShapedImage_drawPixel(){ } void UnitTest::test_ShapedImage_drawLine(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point1(0,0); QPoint point2(10,10); @@ -576,7 +576,7 @@ void UnitTest::test_ShapedImage_drawLine(){ } void UnitTest::test_ShapedImage_drawPoint(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point1(5,5); QPoint point2(5,6); @@ -631,7 +631,7 @@ void UnitTest::test_ShapedImage_getDisplayable(){ } void UnitTest::test_ShapedImage_getPixelColor(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(0,0); area->floodFill(0,0,0,255); @@ -691,7 +691,7 @@ void UnitTest::test_ShapedImage_setImageData(){ //test tools void UnitTest::test_Circle_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createCircleTool(); @@ -711,7 +711,7 @@ void UnitTest::test_Circle_fullDraw(){ } void UnitTest::test_Circle_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createCircleTool(); @@ -735,7 +735,7 @@ void UnitTest::test_Circle_interruptedDraw(){ void UnitTest::test_FloodFill_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createFloodFillTool(); @@ -755,7 +755,7 @@ void UnitTest::test_FloodFill_fullDraw(){ } void UnitTest::test_FloodFill_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createFloodFillTool(); @@ -778,7 +778,7 @@ void UnitTest::test_FloodFill_interruptedDraw(){ void UnitTest::test_Line_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createLineTool(); @@ -798,7 +798,7 @@ void UnitTest::test_Line_fullDraw(){ } void UnitTest::test_Line_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createLineTool(); @@ -820,7 +820,7 @@ void UnitTest::test_Line_interruptedDraw(){ } void UnitTest::test_Pen_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPenTool(); @@ -840,7 +840,7 @@ void UnitTest::test_Pen_fullDraw(){ } void UnitTest::test_Pen_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPenTool(); @@ -862,7 +862,7 @@ void UnitTest::test_Pen_interruptedDraw(){ } void UnitTest::test_Plain_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPlainTool(); @@ -882,7 +882,7 @@ void UnitTest::test_Plain_fullDraw(){ } void UnitTest::test_Plain_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPlainTool(); @@ -1017,7 +1017,7 @@ void UnitTest::test_Polygon_interruptedDraw(){ void UnitTest::test_Rectangle_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createRectangleTool(); @@ -1039,7 +1039,7 @@ void UnitTest::test_Rectangle_fullDraw(){ } void UnitTest::test_Rectangle_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createRectangleTool(); @@ -1154,7 +1154,7 @@ void UnitTest::bench_moveActive(){ } void UnitTest::bench_setPolygon(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); std::vector polygon{ QPoint(10,00), @@ -1171,8 +1171,8 @@ void UnitTest::bench_setPolygon(){ } void UnitTest::bench_setLayerUp(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->setLayerActive(0); QBENCHMARK{ @@ -1184,8 +1184,8 @@ void UnitTest::bench_setLayerUp(){ } void UnitTest::bench_setLayerDown(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QBENCHMARK{ area->selectLayerDown(); @@ -1226,7 +1226,7 @@ void UnitTest::bench_createTools(){ } void UnitTest::bench_RasterImage_drawPixel(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(0,0); @@ -1238,7 +1238,7 @@ void UnitTest::bench_RasterImage_drawPixel(){ } void UnitTest::bench_RasterImage_drawLine(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point1(000,000); QPoint point2(200,200); @@ -1251,7 +1251,7 @@ void UnitTest::bench_RasterImage_drawLine(){ } void UnitTest::bench_RasterImage_drawPoint(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(000,000); @@ -1263,7 +1263,7 @@ void UnitTest::bench_RasterImage_drawPoint(){ } void UnitTest::bench_RasterImage_getDisplayable(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QBENCHMARK{ area->layerBundle[0].image->getDisplayable(QSize(200,200),255); @@ -1273,7 +1273,7 @@ void UnitTest::bench_RasterImage_getDisplayable(){ } void UnitTest::bench_RasterImage_getPixelColor(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QPoint point(000,000); @@ -1285,7 +1285,7 @@ void UnitTest::bench_RasterImage_getPixelColor(){ } void UnitTest::bench_RasterImage_getImageData(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QBENCHMARK{ area->layerBundle[0].image->getImageData(); @@ -1295,7 +1295,7 @@ void UnitTest::bench_RasterImage_getImageData(){ } void UnitTest::bench_RasterImage_setImageData(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); QImage img = area->layerBundle[0].image->getImageData(); QBENCHMARK{ @@ -1306,7 +1306,7 @@ void UnitTest::bench_RasterImage_setImageData(){ } void UnitTest::bench_ShapedImage_drawPixel(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QPoint point(0,0); @@ -1318,7 +1318,7 @@ void UnitTest::bench_ShapedImage_drawPixel(){ } void UnitTest::bench_ShapedImage_drawLine(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QPoint point1(000,000); QPoint point2(200,200); @@ -1331,7 +1331,7 @@ void UnitTest::bench_ShapedImage_drawLine(){ } void UnitTest::bench_ShapedImage_drawPoint(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QPoint point(000,000); @@ -1343,7 +1343,7 @@ void UnitTest::bench_ShapedImage_drawPoint(){ } void UnitTest::bench_ShapedImage_getDisplayable(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QBENCHMARK{ area->layerBundle[0].image->getDisplayable(QSize(200,200),255); @@ -1353,7 +1353,7 @@ void UnitTest::bench_ShapedImage_getDisplayable(){ } void UnitTest::bench_ShapedImage_getPixelColor(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QPoint point(000,000); @@ -1365,7 +1365,7 @@ void UnitTest::bench_ShapedImage_getPixelColor(){ } void UnitTest::bench_ShapedImage_getImageData(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QBENCHMARK{ area->layerBundle[0].image->getImageData(); @@ -1375,7 +1375,7 @@ void UnitTest::bench_ShapedImage_getImageData(){ } void UnitTest::bench_ShapedImage_setImageData(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); QImage img = area->layerBundle[0].image->getImageData(); QBENCHMARK{ @@ -1386,7 +1386,7 @@ void UnitTest::bench_ShapedImage_setImageData(){ } void UnitTest::bench_Circle_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createCircleTool(); @@ -1404,7 +1404,7 @@ void UnitTest::bench_Circle_fullDraw(){ } void UnitTest::bench_Circle_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createCircleTool(); @@ -1425,7 +1425,7 @@ void UnitTest::bench_Circle_interruptedDraw(){ void UnitTest::bench_FloodFill_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createFloodFillTool(); @@ -1443,7 +1443,7 @@ void UnitTest::bench_FloodFill_fullDraw(){ } void UnitTest::bench_FloodFill_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createFloodFillTool(); @@ -1464,7 +1464,7 @@ void UnitTest::bench_FloodFill_interruptedDraw(){ void UnitTest::bench_Line_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createLineTool(); @@ -1482,7 +1482,7 @@ void UnitTest::bench_Line_fullDraw(){ } void UnitTest::bench_Line_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createLineTool(); @@ -1503,7 +1503,7 @@ void UnitTest::bench_Line_interruptedDraw(){ } void UnitTest::bench_Pen_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPenTool(); @@ -1521,7 +1521,7 @@ void UnitTest::bench_Pen_fullDraw(){ } void UnitTest::bench_Pen_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPenTool(); @@ -1541,7 +1541,7 @@ void UnitTest::bench_Pen_interruptedDraw(){ } void UnitTest::bench_Plain_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPlainTool(); @@ -1559,7 +1559,7 @@ void UnitTest::bench_Plain_fullDraw(){ } void UnitTest::bench_Plain_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPlainTool(); @@ -1587,14 +1587,6 @@ void UnitTest::bench_Polygon_fullDraw(){ QPoint(20,10) }; - std::vector test{ - QPoint(00,00), - QPoint(00,20), - QPoint(20,00), - QPoint(20,20), - QPoint(10,10) - }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createPolygonTool(); @@ -1624,23 +1616,13 @@ void UnitTest::bench_Polygon_fullDraw(){ area->deleteLayer(0); } -/* + void UnitTest::bench_Polygon_interruptedDraw(){ area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); std::vector points{ - QPoint(100,000), - QPoint(000,100), - QPoint(100,200), - QPoint(200,100) + QPoint(100,000) }; - std::vector test{ - QPoint(000,000), - QPoint(000,200), - QPoint(200,000), - QPoint(200,200), - QPoint(100,100) - }; area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); @@ -1650,18 +1632,6 @@ void UnitTest::bench_Polygon_interruptedDraw(){ QBENCHMARK{ area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseMoved(points[1].x(), points[1].y()); - - area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); - area->Tool->onMouseMoved(points[2].x(), points[2].y()); - - area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); - area->Tool->onMouseMoved(points[3].x(), points[3].y()); - - area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); @@ -1669,10 +1639,10 @@ void UnitTest::bench_Polygon_interruptedDraw(){ area->deleteLayer(0); } -*/ + void UnitTest::bench_Rectangle_fullDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createRectangleTool(); @@ -1691,7 +1661,7 @@ void UnitTest::bench_Rectangle_fullDraw(){ } void UnitTest::bench_Rectangle_interruptedDraw(){ - area->addLayer(200,400,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); area->colorPicker.setFirstColor(QColor(255,255,255,255)); area->colorPicker.setSecondColor(QColor(0,0,0,255)); area->createRectangleTool(); From 5f76f74cd5f5d2bb8ca1880e5a9ca78c4658d1bf Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Wed, 15 Jan 2020 20:35:51 +0100 Subject: [PATCH 54/97] Fix out of Range --- src/GUI/IntelliInputDialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index d12b1f1..d778e59 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -4,6 +4,7 @@ IntelliInputDialog::IntelliInputDialog(QEventLoop* Loop, QString Title, QString Label, int value, int minValue, int maxValue, int step) { + this->valueInt = value; createInputBox(Title, Label, value, minValue, maxValue, step); createConnections(Loop); setValuesOfPalette(); @@ -91,5 +92,5 @@ void IntelliInputDialog::slotCloseEvent(){ } void IntelliInputDialog::slotEingabe(){ - valueInt= QString("%1").arg(Input->value()).toInt(); + valueInt = QString("%1").arg(Input->value()).toInt(); } From b695a25128688b00a8791ceb37a152b4dff7ed09 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 00:00:27 +0100 Subject: [PATCH 55/97] Fixed Inputboxes and Design Todo pls merge me. --- src/GUI/IntelliInputDialog.cpp | 42 ++++------ src/GUI/IntelliInputDialog.h | 9 +-- src/GUI/IntelliPhotoGui.cpp | 96 +++++++++++------------ src/GUI/IntelliPhotoGui.h | 3 - src/IntelliHelper/IntelliToolsettings.cpp | 12 +++ src/Layer/PaintingArea.cpp | 9 +++ src/Layer/PaintingArea.h | 4 + 7 files changed, 92 insertions(+), 83 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index d778e59..8ed0465 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -2,18 +2,21 @@ #include -IntelliInputDialog::IntelliInputDialog(QEventLoop* Loop, QString Title, QString Label, int value, int minValue, int maxValue, int step) +IntelliInputDialog::IntelliInputDialog(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok) { this->valueInt = value; + this->notClosed = ok; + if(notClosed != nullptr){ + *notClosed = false; + } createInputBox(Title, Label, value, minValue, maxValue, step); - createConnections(Loop); - setValuesOfPalette(); + createConnections(); setInputBoxStyle(); - Loop->exec(); + this->exec(); } -int IntelliInputDialog::getInt(QEventLoop* Loop, QString Title, QString Label, int value, int minValue, int maxValue, int step){ - IntelliInputDialog dialog(Loop, Title, Label, value, minValue, maxValue, step); +int IntelliInputDialog::getInt(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok){ + IntelliInputDialog dialog(Title, Label, value, minValue, maxValue, step, ok); return dialog.valueInt; } @@ -40,6 +43,7 @@ void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, this->Input = new QSpinBox(); this->Input->setFixedSize(Linesize); this->Input->setRange(minValue,maxValue); + this->Input->setSingleStep(step); this->Input->setValue(value); this->okButton = ButtonBox->button(QDialogButtonBox::Ok); @@ -60,31 +64,13 @@ void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, this->show(); } -void IntelliInputDialog::createConnections(QEventLoop* Loop){ +void IntelliInputDialog::createConnections(){ connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe())); - connect(okButton, SIGNAL(clicked()), Loop, SLOT(quit())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent())); - connect(cancelButton, SIGNAL(clicked()), Loop, SLOT(quit())); } void IntelliInputDialog::setInputBoxStyle(){ - InputLabel->setPalette(Palette); - Input->setPalette(Palette); - okButton->setPalette(Palette); - cancelButton->setPalette(Palette); - this->setStyleSheet("background-color:rgb(64,64,64)"); -} - -void IntelliInputDialog::setValuesOfPalette(){ - Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); - Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); - Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); - Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); - Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); + this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);"); } void IntelliInputDialog::slotCloseEvent(){ @@ -93,4 +79,8 @@ void IntelliInputDialog::slotCloseEvent(){ void IntelliInputDialog::slotEingabe(){ valueInt = QString("%1").arg(Input->value()).toInt(); + if(notClosed != nullptr){ + *notClosed = true; + } + this->close(); } diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index 915473e..a8b25da 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -7,10 +7,10 @@ class IntelliInputDialog : public QDialog { Q_OBJECT public: -IntelliInputDialog(QEventLoop* Loop = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +IntelliInputDialog(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr); -static int getInt(QEventLoop* Loop = nullptr, QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); +static int getInt(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr); public slots: void slotCloseEvent(); @@ -18,8 +18,7 @@ void slotEingabe(); private: void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); -void createConnections(QEventLoop* Loop = nullptr); -void setValuesOfPalette(); +void createConnections(); void setInputBoxStyle(); int valueInt; @@ -27,10 +26,10 @@ int valueInt; QGridLayout* Layout; QDialogButtonBox* ButtonBox; QEventLoop loop; +bool* notClosed; const QSize Linesize = QSize(150,20); const QSize Buttonsize = QSize(72,20); -QPalette Palette; QLabel* InputLabel; QSpinBox* Input; QPushButton* okButton; diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index e6a5350..e1a3d2c 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -67,41 +67,54 @@ void IntelliPhotoGui::slotSave(){ // Opens a dialog that allows the user to create a New Layer void IntelliPhotoGui::slotCreateNewLayer(){ + + bool ok1, ok2; // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int width = IntelliInputDialog::getInt(&Loop, "New Layer", "Width:", 200, 0, 5000, 1); + int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); - int height = IntelliInputDialog::getInt(&Loop, "New Layer", "Height:", 200, 0, 5000, 1); + int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); // Create New Layer - paintingArea->addLayer(width,height,0,0); - UpdateGui(); + if(ok1&&ok2){ + paintingArea->addLayer(width,height,0,0); + UpdateGui(); + } } // Opens a dialog that allows the user to delete a Layer void IntelliPhotoGui::slotDeleteLayer(){ + + bool ok1; // "delete Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layerNumber = IntelliInputDialog::getInt(&Loop, "Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); + int layerNumber = IntelliInputDialog::getInt("Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer()+1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); // Create New Layer - paintingArea->deleteLayer(layerNumber-1); - UpdateGui(); + if(ok1){ + paintingArea->deleteLayer(layerNumber-1); + UpdateGui(); + } } void IntelliPhotoGui::slotSetActiveAlpha(){ + + bool ok1, ok2; // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layer = IntelliInputDialog::getInt(&Loop, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); + int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); // "New Alpha" is the title of the window - int alpha = IntelliInputDialog::getInt(&Loop, "Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, 501, 1); - paintingArea->setLayerAlpha(layer-1,alpha); - UpdateGui(); + int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2); + + if(ok1&&ok2){ + paintingArea->setLayerAlpha(layer-1,alpha); + UpdateGui(); + } } void IntelliPhotoGui::slotPositionMoveUp(){ @@ -140,28 +153,31 @@ void IntelliPhotoGui::slotClearActiveLayer(){ // Define the standard Value, min, max, step and ok button // "Red Input" is the title of the window - int red = IntelliInputDialog::getInt(&Loop, "Green Input", "Green:", 255, 0, 255, 1); + int red = IntelliInputDialog::getInt("Green Input", "Green:", 255, 0, 255, 1); // "Green Input" is the title of the window - int green = IntelliInputDialog::getInt(&Loop, "Green Input", "Green:", 255, 0, 255, 1); + int green = IntelliInputDialog::getInt("Green Input", "Green:", 255, 0, 255, 1); // "Blue Input" is the title of the window - int blue = IntelliInputDialog::getInt(&Loop, "Blue Input", "Blue:", 255, 0, 255, 1); + int blue = IntelliInputDialog::getInt("Blue Input", "Blue:", 255, 0, 255, 1); // "Alpha Input" is the title of the window - int alpha = IntelliInputDialog::getInt(&Loop, "Alpha Input", "Alpha:", 255, 0, 255, 1); + int alpha = IntelliInputDialog::getInt("Alpha Input", "Alpha:", 255, 0, 255, 1); paintingArea->floodFill(red, green, blue, alpha); UpdateGui(); } void IntelliPhotoGui::slotSetActiveLayer(){ + bool ok1; // "Layer to set on" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layer = IntelliInputDialog::getInt(&Loop, "Layer to set on", "Layer:", 1, 1, 501, 1); - paintingArea->setLayerActive(layer-1); - UpdateGui(); + int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); + if(ok1){ + paintingArea->setLayerActive(layer-1); + UpdateGui(); + } } void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ @@ -255,13 +271,21 @@ void IntelliPhotoGui::slotResetTools(){ } void IntelliPhotoGui::slotSetWidth(){ - paintingArea->Toolsettings.setLineWidth(IntelliInputDialog::getInt(&Loop, "Toolsettings", "Width:", 5, 1, 50, 1)); - EditLineWidth->setText(QString("%1").arg(paintingArea->Toolsettings.getLineWidth())); + bool ok1; + int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1); + if(ok1){ + paintingArea->Toolsettings.setLineWidth(temp); + EditLineWidth->setText(QString("%1").arg(temp)); + } } void IntelliPhotoGui::slotSetInnerAlpha(){ - paintingArea->Toolsettings.setInnerAlpha(IntelliInputDialog::getInt(&Loop, "Toolsettings", "Width:", 5, 1, 50, 1)); - EditLineInnerAlpha->setText(QString("%1").arg(paintingArea->Toolsettings.getInnerAlpha())); + bool ok1; + int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1); + if(ok1){ + paintingArea->Toolsettings.setInnerAlpha(temp); + EditLineInnerAlpha->setText(QString("%1").arg(temp)); + } } // Define menu actions that call functions @@ -670,34 +694,8 @@ void IntelliPhotoGui::createGui(){ void IntelliPhotoGui::setIntelliStyle(){ // Set the title setWindowTitle("IntelliPhoto Prototype"); - Palette.setBrush(QPalette::HighlightedText, QColor(200, 10, 10)); - Palette.setBrush(QPalette::Highlight, QColor(100, 5, 5)); - Palette.setBrush(QPalette::ButtonText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Button, QColor(64, 64, 64)); - Palette.setBrush(QPalette::Window, QColor(64, 64, 64)); - Palette.setBrush(QPalette::WindowText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::PlaceholderText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::ToolTipText, QColor(255, 255, 255)); - Palette.setBrush(QPalette::Text, QColor(255, 255, 255)); // Set style sheet - this->setStyleSheet("background-color:rgb(64,64,64)"); - this->menuBar()->setPalette(Palette); - this->fileMenu->setPalette(Palette); - this->saveAsMenu->setPalette(Palette); - this->optionMenu->setPalette(Palette); - this->helpMenu->setPalette(Palette); - this->renderMenu->setPalette(Palette); - this->toolMenu->setPalette(Palette); - this->layerMenu->setPalette(Palette); - this->colorMenu->setPalette(Palette); - this->toolCreationMenu->setPalette(Palette); - this->toolSettingsMenu->setPalette(Palette); - - this->WidthLine->setPalette(Palette); - this->EditLineWidth->setPalette(Palette); - this->innerAlphaLine->setPalette(Palette); - this->EditLineInnerAlpha->setPalette(Palette); - this->ActiveLayerLine->setPalette(Palette); + this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);"); QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name()); FirstColorButton->setStyleSheet(string); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 8f18180..5142897 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -107,7 +107,6 @@ void setDefaultToolValue(); // What we'll draw on PaintingArea* paintingArea; -QEventLoop Loop; const QSize Buttonsize = QSize(35,35); QPixmap preview; @@ -132,8 +131,6 @@ QPushButton* SwitchColorButton; QLabel* ActiveLayerLine; QLabel* ActiveLayerImageLabel; -QPalette Palette; - // The menu widgets QMenu*saveAsMenu; QMenu*fileMenu; diff --git a/src/IntelliHelper/IntelliToolsettings.cpp b/src/IntelliHelper/IntelliToolsettings.cpp index 2232cc0..5436438 100644 --- a/src/IntelliHelper/IntelliToolsettings.cpp +++ b/src/IntelliHelper/IntelliToolsettings.cpp @@ -17,6 +17,12 @@ int IntelliToolsettings::getLineWidth(){ } void IntelliToolsettings::setLineWidth(int LineWidth){ + if(LineWidth < 1){ + LineWidth = 1; + } + else if(LineWidth > 50){ + LineWidth = 50; + } lineWidth = LineWidth; } @@ -25,6 +31,12 @@ int IntelliToolsettings::getInnerAlpha(){ } void IntelliToolsettings::setInnerAlpha(int innerAlpha){ + if(innerAlpha < 0){ + innerAlpha = 0; + } + else if(innerAlpha > 255){ + innerAlpha = 255; + } this->innerAlpha = innerAlpha; } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 7b93abc..d42d28f 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -182,6 +182,7 @@ void PaintingArea::moveActiveLayer(int idx){ }else if(idx==-1) { this->selectLayerDown(); } + DummyGui->UpdateGui(); } void PaintingArea::slotActivateLayer(int a){ @@ -253,6 +254,14 @@ int PaintingArea::getHeightOfActive(){ return this->layerBundle[static_cast(activeLayer)].height; } +int PaintingArea::getMaxWidth(){ + return this->maxWidth; +} + +int PaintingArea::getMaxHeight(){ + return this->maxHeight; +} + IntelliImage::ImageType PaintingArea::getTypeOfImageRealLayer(){ return this->layerBundle[static_cast(activeLayer)].image->getTypeOfImage(); } diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 95eef55..df53a11 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -169,6 +169,10 @@ int getWidthOfActive(); */ int getHeightOfActive(); +int getMaxWidth(); + +int getMaxHeight(); + IntelliImage::ImageType getTypeOfImageRealLayer(); std::vector getPolygonDataOfRealLayer(); From c7046f3c066b7db837954bc056510fcef2660c96 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 00:32:42 +0100 Subject: [PATCH 56/97] Fixed some bugs, also its mergable now, without any known issues @DerAnonymos @AshBastian --- src/GUI/IntelliPhotoGui.cpp | 1 - src/Layer/PaintingArea.cpp | 3 ++- src/Tool/IntelliToolPolygon.cpp | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 0d05d42..572de3e 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -89,7 +89,6 @@ void IntelliPhotoGui::slotCreateNewShapedLayer(){ // Stores button value bool ok1, ok2; - bool ok1, ok2; // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index d85c84a..5505a3e 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -32,7 +32,7 @@ PaintingArea::~PaintingArea(){ } void PaintingArea::setRenderSettings(bool isFastRenderingOn){ - if(isFastRenderingOn != renderSettings.isFastRenderering()) { + if(isFastRenderingOn != renderSettings.isFastRenderering() && !Tool->getIsDrawing()) { renderSettings.setFastRendering(isFastRenderingOn); for(auto& layer : layerBundle) { layer.image->updateRendererSetting(isFastRenderingOn); @@ -110,6 +110,7 @@ void PaintingArea::setPolygon(int idx){ delete this->Tool; this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true); isSettingPolygon = true; + this->DummyGui->setToolWidth(5); } } } diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index c784669..1782d14 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -10,6 +10,9 @@ IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* c isDrawing = false; isInside = false; this->isSettingPolygon = isSettingPolygon; + if(isSettingPolygon){ + Toolsettings->setLineWidth(5); + } this->ActiveType = Tooltype::POLYGON; } @@ -121,14 +124,18 @@ void IntelliToolPolygon::onMouseRightReleased(int x, int y){ } void IntelliToolPolygon::onWheelScrolled(int value){ - IntelliTool::onWheelScrolled(value); - if(!isDrawing) { - 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){ From cb4e48865a9be17d17f815ed28c73c67df881811 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 10:30:34 +0100 Subject: [PATCH 57/97] Update .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 6c15b5a..76774be 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,10 @@ CMakeLists.txt.user* app_version.h phony.c +# Testing Files +*.o +*.qmake.stash + # Ignore User Files except for the pro file IntelliPhoto.* !IntelliPhoto.pro From 90acabd35d85c5b2e086af0e2cce6e5375d8c11d Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 10:37:24 +0100 Subject: [PATCH 58/97] fixed bug with changing renderSettings --- src/Layer/PaintingArea.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 57b9ece..8201d16 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -32,7 +32,15 @@ PaintingArea::~PaintingArea(){ } void PaintingArea::setRenderSettings(bool isFastRenderingOn){ - if(isFastRenderingOn != renderSettings.isFastRenderering() && !Tool->getIsDrawing()) { + bool ToolIsActive; + + if(Tool!=nullptr){ + ToolIsActive = Tool->getIsDrawing(); + } + else{ + ToolIsActive = false; + } + if(isFastRenderingOn != renderSettings.isFastRenderering() && !ToolIsActive) { renderSettings.setFastRendering(isFastRenderingOn); for(auto& layer : layerBundle) { layer.image->updateRendererSetting(isFastRenderingOn); From d47e0056f99802e20cf5655fe60747fc8bf8ee64 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 11:05:51 +0100 Subject: [PATCH 59/97] Added fix draft --- src/tst_unittest.cpp | 2240 +++++++++++++++++++++--------------------- 1 file changed, 1118 insertions(+), 1122 deletions(-) diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp index 1bb3390..d011b21 100644 --- a/src/tst_unittest.cpp +++ b/src/tst_unittest.cpp @@ -21,142 +21,142 @@ class UnitTest : public QObject { - Q_OBJECT +Q_OBJECT private: - IntelliPhotoGui* gui; - PaintingArea* area; +IntelliPhotoGui* gui; +PaintingArea* area; public: - UnitTest(); - ~UnitTest(); +UnitTest(); +~UnitTest(); private slots: - void initTestCase(); - void cleanupTestCase(); - //void test_case1(); +void initTestCase(); +void cleanupTestCase(); +//void test_case1(); - ///Test here +///Test here - //test painting area - void test_addLayer(); - void test_deleteLayer(); - void test_setActive(); - void test_setAlpha(); - void test_floodFill(); - void test_moveActive(); - void test_setPolygon(); - void test_setLayerUp(); - void test_setLayerDown(); +//test painting area +void test_addLayer(); +void test_deleteLayer(); +void test_setActive(); +void test_setAlpha(); +void test_floodFill(); +void test_moveActive(); +void test_setPolygon(); +void test_setLayerUp(); +void test_setLayerDown(); - void test_createTools(); +void test_createTools(); - //test Raster-Image operations - void test_RasterImage_drawPixel(); - void test_RasterImage_drawLine(); - void test_RasterImage_drawPoint(); - void test_RasterImage_getDisplayable(); - void test_RasterImage_getPixelColor(); - void test_RasterImage_getImageData(); - void test_RasterImage_setImageData(); +//test Raster-Image operations +void test_RasterImage_drawPixel(); +void test_RasterImage_drawLine(); +void test_RasterImage_drawPoint(); +void test_RasterImage_getDisplayable(); +void test_RasterImage_getPixelColor(); +void test_RasterImage_getImageData(); +void test_RasterImage_setImageData(); - //test Shaped-Image operations - void test_ShapedImage_drawPixel(); - void test_ShapedImage_drawLine(); - void test_ShapedImage_drawPoint(); - void test_ShapedImage_getDisplayable(); - void test_ShapedImage_getPixelColor(); - void test_ShapedImage_getImageData(); - void test_ShapedImage_setImageData(); +//test Shaped-Image operations +void test_ShapedImage_drawPixel(); +void test_ShapedImage_drawLine(); +void test_ShapedImage_drawPoint(); +void test_ShapedImage_getDisplayable(); +void test_ShapedImage_getPixelColor(); +void test_ShapedImage_getImageData(); +void test_ShapedImage_setImageData(); - //test tools - void test_Circle_fullDraw(); - void test_Circle_interruptedDraw(); +//test tools +void test_Circle_fullDraw(); +void test_Circle_interruptedDraw(); - void test_FloodFill_fullDraw(); - void test_FloodFill_interruptedDraw(); +void test_FloodFill_fullDraw(); +void test_FloodFill_interruptedDraw(); - void test_Line_fullDraw(); - void test_Line_interruptedDraw(); +void test_Line_fullDraw(); +void test_Line_interruptedDraw(); - void test_Pen_fullDraw(); - void test_Pen_interruptedDraw(); +void test_Pen_fullDraw(); +void test_Pen_interruptedDraw(); - void test_Plain_fullDraw(); - void test_Plain_interruptedDraw(); +void test_Plain_fullDraw(); +void test_Plain_interruptedDraw(); - void test_Polygon_fullDraw(); - void test_Polygon_interruptedDraw(); +void test_Polygon_fullDraw(); +void test_Polygon_interruptedDraw(); - void test_Rectangle_fullDraw(); - void test_Rectangle_interruptedDraw(); +void test_Rectangle_fullDraw(); +void test_Rectangle_interruptedDraw(); - //test Triangulation - void test_Triangulation_Coverage(); +//test Triangulation +void test_Triangulation_Coverage(); - ///Benchmark here +///Benchmark here - //bench painting area - void bench_addLayer(); - void bench_deleteLayer(); - void bench_setActive(); - void bench_setAlpha(); - void bench_floodFill(); - void bench_moveActive(); - void bench_setPolygon(); - void bench_setLayerUp(); - void bench_setLayerDown(); +//bench painting area +void bench_addLayer(); +void bench_deleteLayer(); +void bench_setActive(); +void bench_setAlpha(); +void bench_floodFill(); +void bench_moveActive(); +void bench_setPolygon(); +void bench_setLayerUp(); +void bench_setLayerDown(); - void bench_createTools(); +void bench_createTools(); - //bench Raster-Image operations - void bench_RasterImage_drawPixel(); - void bench_RasterImage_drawLine(); - void bench_RasterImage_drawPoint(); - void bench_RasterImage_getDisplayable(); - void bench_RasterImage_getPixelColor(); - void bench_RasterImage_getImageData(); - void bench_RasterImage_setImageData(); +//bench Raster-Image operations +void bench_RasterImage_drawPixel(); +void bench_RasterImage_drawLine(); +void bench_RasterImage_drawPoint(); +void bench_RasterImage_getDisplayable(); +void bench_RasterImage_getPixelColor(); +void bench_RasterImage_getImageData(); +void bench_RasterImage_setImageData(); - //bench Shaped-Image operations - void bench_ShapedImage_drawPixel(); - void bench_ShapedImage_drawLine(); - void bench_ShapedImage_drawPoint(); - void bench_ShapedImage_getDisplayable(); - void bench_ShapedImage_getPixelColor(); - void bench_ShapedImage_getImageData(); - void bench_ShapedImage_setImageData(); +//bench Shaped-Image operations +void bench_ShapedImage_drawPixel(); +void bench_ShapedImage_drawLine(); +void bench_ShapedImage_drawPoint(); +void bench_ShapedImage_getDisplayable(); +void bench_ShapedImage_getPixelColor(); +void bench_ShapedImage_getImageData(); +void bench_ShapedImage_setImageData(); - //bench tools - void bench_Circle_fullDraw(); - void bench_Circle_interruptedDraw(); +//bench tools +void bench_Circle_fullDraw(); +void bench_Circle_interruptedDraw(); - void bench_FloodFill_fullDraw(); - void bench_FloodFill_interruptedDraw(); +void bench_FloodFill_fullDraw(); +void bench_FloodFill_interruptedDraw(); - void bench_Line_fullDraw(); - void bench_Line_interruptedDraw(); +void bench_Line_fullDraw(); +void bench_Line_interruptedDraw(); - void bench_Pen_fullDraw(); - void bench_Pen_interruptedDraw(); +void bench_Pen_fullDraw(); +void bench_Pen_interruptedDraw(); - void bench_Plain_fullDraw(); - void bench_Plain_interruptedDraw(); +void bench_Plain_fullDraw(); +void bench_Plain_interruptedDraw(); - void bench_Polygon_fullDraw(); - void bench_Polygon_interruptedDraw(); +void bench_Polygon_fullDraw(); +void bench_Polygon_interruptedDraw(); - void bench_Rectangle_fullDraw(); - void bench_Rectangle_interruptedDraw(); +void bench_Rectangle_fullDraw(); +void bench_Rectangle_interruptedDraw(); - //bench Triangulation - void bench_Triangulation_Coverage(); +//bench Triangulation +void bench_Triangulation_Coverage(); }; UnitTest::UnitTest() { - gui = new IntelliPhotoGui(); - area = gui->paintingArea; + gui = new IntelliPhotoGui(); + area = gui->paintingArea; } UnitTest::~UnitTest() @@ -171,1548 +171,1544 @@ void UnitTest::initTestCase() void UnitTest::cleanupTestCase() { - delete gui; + delete gui; } //test painting area void UnitTest::test_addLayer(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QCOMPARE(area->layerBundle.size(), 1); - QCOMPARE(area->activeLayer, 0); + QCOMPARE(area->layerBundle.size(), 1); + QCOMPARE(area->activeLayer, 0); - QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].width, 200); - QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].widthOffset, 10); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].width, 200); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].widthOffset, 10); - QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].height, 200); - QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].heightOffset, 20); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].height, 200); + QCOMPARE(area->layerBundle[static_cast(area->activeLayer)].heightOffset, 20); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_deleteLayer(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->deleteLayer(3); - QCOMPARE(area->layerBundle.size(), 2); - QCOMPARE(area->activeLayer, 1); + area->deleteLayer(3); + QCOMPARE(area->layerBundle.size(), 2); + QCOMPARE(area->activeLayer, 1); - area->deleteLayer(-1); - QCOMPARE(area->layerBundle.size(), 2); - QCOMPARE(area->activeLayer, 1); + area->deleteLayer(-1); + QCOMPARE(area->layerBundle.size(), 2); + QCOMPARE(area->activeLayer, 1); - area->deleteLayer(1); - QCOMPARE(area->layerBundle.size(), 1); - QCOMPARE(area->activeLayer, 0); + area->deleteLayer(1); + QCOMPARE(area->layerBundle.size(), 1); + QCOMPARE(area->activeLayer, 0); - area->deleteLayer(0); - QCOMPARE(area->layerBundle.size(), 0); - QCOMPARE(area->activeLayer, -1); + area->deleteLayer(0); + QCOMPARE(area->layerBundle.size(), 0); + QCOMPARE(area->activeLayer, -1); } void UnitTest::test_setActive(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->setLayerActive(0); - QCOMPARE(area->activeLayer, 0); - area->setLayerActive(1); - QCOMPARE(area->activeLayer, 1); - area->setLayerActive(-1); - QCOMPARE(area->activeLayer, 1); - area->setLayerActive(3); - QCOMPARE(area->activeLayer, 1); + area->setLayerActive(0); + QCOMPARE(area->activeLayer, 0); + area->setLayerActive(1); + QCOMPARE(area->activeLayer, 1); + area->setLayerActive(-1); + QCOMPARE(area->activeLayer, 1); + area->setLayerActive(3); + QCOMPARE(area->activeLayer, 1); - area->deleteLayer(0); - area->deleteLayer(0); + area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_setAlpha(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->setLayerAlpha(0,0); - QCOMPARE(area->layerBundle[0].alpha, 0); + area->setLayerAlpha(0,0); + QCOMPARE(area->layerBundle[0].alpha, 0); - area->setLayerAlpha(0,255); - QCOMPARE(area->layerBundle[0].alpha, 255); + area->setLayerAlpha(0,255); + QCOMPARE(area->layerBundle[0].alpha, 255); - area->setLayerAlpha(1,123); - QCOMPARE(area->layerBundle[1].alpha, 123); + area->setLayerAlpha(1,123); + QCOMPARE(area->layerBundle[1].alpha, 123); - area->setLayerAlpha(1,-12); - QCOMPARE(area->layerBundle[1].alpha, 123); + area->setLayerAlpha(1,-12); + QCOMPARE(area->layerBundle[1].alpha, 123); - area->setLayerAlpha(1,300); - QCOMPARE(area->layerBundle[1].alpha, 123); + area->setLayerAlpha(1,300); + QCOMPARE(area->layerBundle[1].alpha, 123); - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::test_floodFill(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->floodFill(255,255,255,255); - QPoint point; - for(size_t i = 0; i<200; i++){ - point.setX(static_cast(i)); - for(size_t j = 0; i<200; i++){ - point.setY(static_cast(j)); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(255,255,255,255)); - } - } + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + QPoint point; + for(size_t i = 0; i<200; i++) { + point.setX(static_cast(i)); + for(size_t j = 0; i<200; i++) { + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(255,255,255,255)); + } + } - area->floodFill(0,0,0,0); - for(size_t i = 0; i<200; i++){ - point.setX(static_cast(i)); - for(size_t j = 0; i<200; i++){ - point.setY(static_cast(j)); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); - } - } + area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 0)); + for(size_t i = 0; i<200; i++) { + point.setX(static_cast(i)); + for(size_t j = 0; i<200; i++) { + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); + } + } - area->floodFill(-1,-1,-1,-1); - for(size_t i = 0; i<200; i++){ - point.setX(static_cast(i)); - for(size_t j = 0; i<200; i++){ - point.setY(static_cast(j)); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); - } - } + area->layerBundle[0].image->drawPlain(QColor(-1, -1, -1, -1)); + for(size_t i = 0; i<200; i++) { + point.setX(static_cast(i)); + for(size_t j = 0; i<200; i++) { + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); + } + } - area->floodFill(256,256,256,256); - for(size_t i = 0; i<200; i++){ - point.setX(static_cast(i)); - for(size_t j = 0; i<200; i++){ - point.setY(static_cast(j)); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); - } - } + area->layerBundle[0].image->drawPlain(QColor(256, 256, 256, 256)); + for(size_t i = 0; i<200; i++) { + point.setX(static_cast(i)); + for(size_t j = 0; i<200; i++) { + point.setY(static_cast(j)); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); + } + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_moveActive(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->floodFill(0,0,0,255); - QPoint point(0,0); + area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 255)); + QPoint point(0,0); - area->moveActiveLayer(-1); - QCOMPARE(area->activeLayer, 0); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + area->moveActiveLayer(-1); + QCOMPARE(area->activeLayer, 0); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); - area->moveActiveLayer(-1); - QCOMPARE(area->activeLayer, 0); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + area->moveActiveLayer(-1); + QCOMPARE(area->activeLayer, 0); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); - area->moveActiveLayer(1); - QCOMPARE(area->activeLayer, 1); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + area->moveActiveLayer(1); + QCOMPARE(area->activeLayer, 1); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); - area->moveActiveLayer(1); - QCOMPARE(area->activeLayer, 1); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); + area->moveActiveLayer(1); + QCOMPARE(area->activeLayer, 1); + QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255)); - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::test_setPolygon(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - std::vector polygon{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,10), - QPoint(00,10) - }; + std::vector polygon{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,10), + QPoint(00,10) + }; - area->layerBundle[1].image->setPolygon(polygon); - IntelliShapedImage* image = dynamic_cast(area->layerBundle[1].image); - QCOMPARE(image->polygonData[0], polygon[0]); - QCOMPARE(image->polygonData[1], polygon[1]); - QCOMPARE(image->polygonData[2], polygon[2]); - QCOMPARE(image->polygonData[3], polygon[3]); + area->layerBundle[1].image->setPolygon(polygon); + IntelliShapedImage* image = dynamic_cast(area->layerBundle[1].image); + QCOMPARE(image->polygonData[0], polygon[0]); + QCOMPARE(image->polygonData[1], polygon[1]); + QCOMPARE(image->polygonData[2], polygon[2]); + QCOMPARE(image->polygonData[3], polygon[3]); - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::test_setLayerUp(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->selectLayerUp(); - QCOMPARE(area->activeLayer, 1); + area->selectLayerUp(); + QCOMPARE(area->activeLayer, 1); - area->setLayerActive(0); - QCOMPARE(area->activeLayer, 0); + area->setLayerActive(0); + QCOMPARE(area->activeLayer, 0); - area->selectLayerUp(); - QCOMPARE(area->activeLayer, 1); + area->selectLayerUp(); + QCOMPARE(area->activeLayer, 1); - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::test_setLayerDown(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->selectLayerDown(); - QCOMPARE(area->activeLayer, 0); + area->selectLayerDown(); + QCOMPARE(area->activeLayer, 0); - area->selectLayerDown(); - QCOMPARE(area->activeLayer, 0); + area->selectLayerDown(); + QCOMPARE(area->activeLayer, 0); - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::test_createTools(){ - QVERIFY(area->Tool == nullptr); + QVERIFY(area->Tool == nullptr); - area->createPenTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createPenTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); - area->createLineTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createLineTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); - area->createPlainTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createPlainTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); - area->createCircleTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createCircleTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); - area->createPolygonTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createPolygonTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); - area->createFloodFillTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createFloodFillTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); - area->createRectangleTool(); - QVERIFY(dynamic_cast(area->Tool) != nullptr); + area->createRectangleTool(); + QVERIFY(dynamic_cast(area->Tool) != nullptr); } //test Raster-Image operations void UnitTest::test_RasterImage_drawPixel(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(0,0); + QPoint point(0,0); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_RasterImage_drawLine(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point1(0,0); - QPoint point2(10,10); - QPoint point3(5,5); - QPoint point4(6,5); + QPoint point1(0,0); + QPoint point2(10,10); + QPoint point3(5,5); + QPoint point4(6,5); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255)); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_RasterImage_drawPoint(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point1(5,5); - QPoint point2(5,6); + QPoint point1(5,5); + QPoint point2(5,6); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255)); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_RasterImage_getDisplayable(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->floodFill(255,255,255,255); - QImage img = area->layerBundle[0].image->getDisplayable(QSize(200,200),255); - QPoint point; - for(size_t i=0; i<200; i++){ - point.setX(static_cast(i)); - for(size_t j=0; j<200; j++){ - point.setY(static_cast(j)); - QVERIFY(img.pixelColor(point) == QColor(255,255,255,255)); - } - } + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + QImage img = area->layerBundle[0].image->getDisplayable(QSize(200,200),255); + QPoint point; + for(size_t i=0; i<200; i++) { + point.setX(static_cast(i)); + for(size_t j=0; j<200; j++) { + point.setY(static_cast(j)); + QVERIFY(img.pixelColor(point) == QColor(255,255,255,255)); + } + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_RasterImage_getPixelColor(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(0,0); - area->floodFill(0,0,0,255); - QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255)); + QPoint point(0,0); + area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_RasterImage_getImageData(){ - area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); - QImage img(2,2, QImage::Format_ARGB32); - img.setPixelColor(0,0, Qt::red); - img.setPixelColor(0,1, Qt::yellow); - img.setPixelColor(1,0, Qt::blue); - img.setPixelColor(1,1, Qt::green); + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); - area->layerBundle[0].image->setImageData(img); - img = img.convertToFormat(QImage::Format_Indexed8); - QImage cpy = area->layerBundle[0].image->getImageData(); + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); + QImage cpy = area->layerBundle[0].image->getImageData(); - QPoint point1(0,0); - QPoint point2(0,1); - QPoint point3(1,0); - QPoint point4(1,1); - QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1)); - QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2)); - QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3)); - QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4)); + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1)); + QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2)); + QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3)); + QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_RasterImage_setImageData(){ - area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); - QImage img(2,2, QImage::Format_ARGB32); - img.setPixelColor(0,0, Qt::red); - img.setPixelColor(0,1, Qt::yellow); - img.setPixelColor(1,0, Qt::blue); - img.setPixelColor(1,1, Qt::green); + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); - area->layerBundle[0].image->setImageData(img); - img = img.convertToFormat(QImage::Format_Indexed8); + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); - QPoint point1(0,0); - QPoint point2(0,1); - QPoint point3(1,0); - QPoint point4(1,1); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4)); + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4)); - area->deleteLayer(0); + area->deleteLayer(0); } //test Shaped-Image operations void UnitTest::test_ShapedImage_drawPixel(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(0,0); + QPoint point(0,0); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_ShapedImage_drawLine(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point1(0,0); - QPoint point2(10,10); - QPoint point3(5,5); - QPoint point4(6,5); + QPoint point1(0,0); + QPoint point2(10,10); + QPoint point3(5,5); + QPoint point4(6,5); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255)); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_ShapedImage_drawPoint(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point1(5,5); - QPoint point2(5,6); + QPoint point1(5,5); + QPoint point2(5,6); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255)); - area->floodFill(255,255,255,255); - area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255)); + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_ShapedImage_getDisplayable(){ - area->addLayer(21,21,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) - }; + area->addLayer(21,21,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; - std::vector test{ - QPoint(00,00), - QPoint(00,20), - QPoint(20,00), - QPoint(20,20), - QPoint(10,10) - }; - area->floodFill(255,255,255,255); - area->layerBundle[0].image->setPolygon(points); - QSize size(21,21); - QImage img = area->layerBundle[0].image->getDisplayable(size,255); + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + area->layerBundle[0].image->setPolygon(points); + QSize size(21,21); + QImage img = area->layerBundle[0].image->getDisplayable(size,255); - QCOMPARE(img.pixelColor(points[0]).alpha(), 255); - QCOMPARE(img.pixelColor(points[1]).alpha(), 255); - QCOMPARE(img.pixelColor(points[2]).alpha(), 255); - QCOMPARE(img.pixelColor(points[3]).alpha(), 255); + QCOMPARE(img.pixelColor(points[0]).alpha(), 255); + QCOMPARE(img.pixelColor(points[1]).alpha(), 255); + QCOMPARE(img.pixelColor(points[2]).alpha(), 255); + QCOMPARE(img.pixelColor(points[3]).alpha(), 255); - QCOMPARE(img.pixelColor(test[4]).alpha(), 255); - QCOMPARE(img.pixelColor(test[0]).alpha(), 0); - QCOMPARE(img.pixelColor(test[1]).alpha(), 0); - QCOMPARE(img.pixelColor(test[2]).alpha(), 0); - QCOMPARE(img.pixelColor(test[3]).alpha(), 0); + QCOMPARE(img.pixelColor(test[4]).alpha(), 255); + QCOMPARE(img.pixelColor(test[0]).alpha(), 0); + QCOMPARE(img.pixelColor(test[1]).alpha(), 0); + QCOMPARE(img.pixelColor(test[2]).alpha(), 0); + QCOMPARE(img.pixelColor(test[3]).alpha(), 0); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_ShapedImage_getPixelColor(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(0,0); - area->floodFill(0,0,0,255); - QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255)); + QPoint point(0,0); + area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_ShapedImage_getImageData(){ - area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); - QImage img(2,2, QImage::Format_ARGB32); - img.setPixelColor(0,0, Qt::red); - img.setPixelColor(0,1, Qt::yellow); - img.setPixelColor(1,0, Qt::blue); - img.setPixelColor(1,1, Qt::green); + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); - area->layerBundle[0].image->setImageData(img); - img = img.convertToFormat(QImage::Format_Indexed8); - QImage cpy = area->layerBundle[0].image->getImageData(); + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); + QImage cpy = area->layerBundle[0].image->getImageData(); - QPoint point1(0,0); - QPoint point2(0,1); - QPoint point3(1,0); - QPoint point4(1,1); - QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1)); - QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2)); - QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3)); - QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4)); + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1)); + QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2)); + QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3)); + QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_ShapedImage_setImageData(){ - area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(2,2,10,20,IntelliImage::ImageType::RASTERIMAGE); - QImage img(2,2, QImage::Format_ARGB32); - img.setPixelColor(0,0, Qt::red); - img.setPixelColor(0,1, Qt::yellow); - img.setPixelColor(1,0, Qt::blue); - img.setPixelColor(1,1, Qt::green); + QImage img(2,2, QImage::Format_ARGB32); + img.setPixelColor(0,0, Qt::red); + img.setPixelColor(0,1, Qt::yellow); + img.setPixelColor(1,0, Qt::blue); + img.setPixelColor(1,1, Qt::green); - area->layerBundle[0].image->setImageData(img); - img = img.convertToFormat(QImage::Format_Indexed8); + area->layerBundle[0].image->setImageData(img); + img = img.convertToFormat(QImage::Format_Indexed8); - QPoint point1(0,0); - QPoint point2(0,1); - QPoint point3(1,0); - QPoint point4(1,1); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4)); + QPoint point1(0,0); + QPoint point2(0,1); + QPoint point3(1,0); + QPoint point4(1,1); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4)); - area->deleteLayer(0); + area->deleteLayer(0); } //test tools void UnitTest::test_Circle_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createCircleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getSecondColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getSecondColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Circle_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createCircleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_FloodFill_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createFloodFillTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_FloodFill_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createFloodFillTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Line_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createLineTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Line_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createLineTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Pen_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPenTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Pen_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPenTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Plain_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPlainTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Plain_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPlainTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,100); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Polygon_fullDraw(){ - area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); - std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) - }; + area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; - std::vector test{ - QPoint(00,00), - QPoint(00,20), - QPoint(20,00), - QPoint(20,20), - QPoint(10,10) - }; + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPolygonTool(); - area->floodFill(255,0,0,255); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseMoved(points[1].x(), points[1].y()); + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); - area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); - area->Tool->onMouseMoved(points[2].x(), points[2].y()); + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); - area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); - area->Tool->onMouseMoved(points[3].x(), points[3].y()); + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); - area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); - area->Tool->onMouseMoved(points[0].x(), points[0].y()); + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + area->Tool->onMouseMoved(points[0].x(), points[0].y()); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==area->colorPicker.getSecondColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==area->colorPicker.getSecondColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Polygon_interruptedDraw(){ - area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); - std::vector points{ - QPoint(100,000), - QPoint(000,100), - QPoint(100,200), - QPoint(200,100) - }; + area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(100,000), + QPoint(000,100), + QPoint(100,200), + QPoint(200,100) + }; - std::vector test{ - QPoint(000,000), - QPoint(000,200), - QPoint(200,000), - QPoint(200,200), - QPoint(100,100) - }; + std::vector test{ + QPoint(000,000), + QPoint(000,200), + QPoint(200,000), + QPoint(200,200), + QPoint(100,100) + }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPolygonTool(); - area->floodFill(255,0,0,255); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseMoved(points[1].x(), points[1].y()); + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); - area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); - area->Tool->onMouseMoved(points[2].x(), points[2].y()); + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); - area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); - area->Tool->onMouseMoved(points[3].x(), points[3].y()); + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); - area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); - area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); - area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); + area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); + area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Rectangle_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createRectangleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,150); - QPoint point3(125,125); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,150); + QPoint point3(125,125); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==area->colorPicker.getSecondColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor()); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==area->colorPicker.getSecondColor()); - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::test_Rectangle_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createRectangleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,150); - QPoint point3(125,125); - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + QPoint point1(100,100); + QPoint point2(150,150); + QPoint point3(125,125); + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); - QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255)); + QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(255,0,0,255)); - area->deleteLayer(0); + area->deleteLayer(0); } //test Triangulation void UnitTest::test_Triangulation_Coverage(){ - std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) - }; - std::vector test{ - QPoint(00,00), - QPoint(00,20), - QPoint(20,00), - QPoint(20,20), - QPoint(10,10) - }; - std::vector tria = IntelliTriangulation::calculateTriangles(points); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[0]), true); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[1]), true); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[2]), true); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[3]), true); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; + std::vector tria = IntelliTriangulation::calculateTriangles(points); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[0]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[1]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[2]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[3]), true); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[4]), true); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[0]), false); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[1]), false); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[2]), false); - QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[4]), true); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[0]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[1]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[2]), false); + QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false); } - ///Benchmarks here void UnitTest::bench_addLayer(){ - QBENCHMARK{ - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - } - area->deleteLayer(0); + QBENCHMARK{ + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + } + area->deleteLayer(0); } void UnitTest::bench_deleteLayer(){ - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->deleteLayer(0); - } + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + QBENCHMARK{ + area->deleteLayer(0); + } } void UnitTest::bench_setActive(){ - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->setLayerActive(0); - } + QBENCHMARK{ + area->setLayerActive(0); + } - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::bench_setAlpha(){ - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->setLayerAlpha(0,0); - } + QBENCHMARK{ + area->setLayerAlpha(0,0); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_floodFill(){ - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->floodFill(255,255,255,255); - } + QBENCHMARK{ + area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255)); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_moveActive(){ - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,0,0,IntelliImage::ImageType::RASTERIMAGE); - area->setLayerActive(0); - QBENCHMARK{ - area->moveActiveLayer(1); - } + area->setLayerActive(0); + QBENCHMARK{ + area->moveActiveLayer(1); + } - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::bench_setPolygon(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - std::vector polygon{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,10), - QPoint(00,10) - }; + std::vector polygon{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,10), + QPoint(00,10) + }; - QBENCHMARK{ - area->layerBundle[1].image->setPolygon(polygon); - } + QBENCHMARK{ + area->layerBundle[1].image->setPolygon(polygon); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_setLayerUp(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->setLayerActive(0); - QBENCHMARK{ - area->selectLayerUp(); - } + area->setLayerActive(0); + QBENCHMARK{ + area->selectLayerUp(); + } - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::bench_setLayerDown(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->selectLayerDown(); - } + QBENCHMARK{ + area->selectLayerDown(); + } - area->deleteLayer(1); - area->deleteLayer(0); + area->deleteLayer(1); + area->deleteLayer(0); } void UnitTest::bench_createTools(){ - QBENCHMARK{ - area->createPenTool(); - } + QBENCHMARK{ + area->createPenTool(); + } - QBENCHMARK{ - area->createLineTool(); - } + QBENCHMARK{ + area->createLineTool(); + } - QBENCHMARK{ - area->createPlainTool(); - } + QBENCHMARK{ + area->createPlainTool(); + } - QBENCHMARK{ - area->createCircleTool(); - } + QBENCHMARK{ + area->createCircleTool(); + } - QBENCHMARK{ - area->createPolygonTool(); - } + QBENCHMARK{ + area->createPolygonTool(); + } - QBENCHMARK{ - area->createFloodFillTool(); - } + QBENCHMARK{ + area->createFloodFillTool(); + } - QBENCHMARK{ - area->createRectangleTool(); - } + QBENCHMARK{ + area->createRectangleTool(); + } } void UnitTest::bench_RasterImage_drawPixel(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(0,0); + QPoint point(0,0); - QBENCHMARK{ - area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); - } + QBENCHMARK{ + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_RasterImage_drawLine(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point1(000,000); - QPoint point2(200,200); + QPoint point1(000,000); + QPoint point2(200,200); - QBENCHMARK{ - area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1); - } + QBENCHMARK{ + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_RasterImage_drawPoint(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(000,000); + QPoint point(000,000); - QBENCHMARK{ - area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1); - } + QBENCHMARK{ + area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_RasterImage_getDisplayable(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->layerBundle[0].image->getDisplayable(QSize(200,200),255); - } + QBENCHMARK{ + area->layerBundle[0].image->getDisplayable(QSize(200,200),255); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_RasterImage_getPixelColor(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QPoint point(000,000); + QPoint point(000,000); - QBENCHMARK{ - area->layerBundle[0].image->getPixelColor(point); - } + QBENCHMARK{ + area->layerBundle[0].image->getPixelColor(point); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_RasterImage_getImageData(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QBENCHMARK{ - area->layerBundle[0].image->getImageData(); - } + QBENCHMARK{ + area->layerBundle[0].image->getImageData(); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_RasterImage_setImageData(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - QImage img = area->layerBundle[0].image->getImageData(); - QBENCHMARK{ - area->layerBundle[0].image->setImageData(img); - } + QImage img = area->layerBundle[0].image->getImageData(); + QBENCHMARK{ + area->layerBundle[0].image->setImageData(img); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_drawPixel(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QPoint point(0,0); + QPoint point(0,0); - QBENCHMARK{ - area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); - } + QBENCHMARK{ + area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255)); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_drawLine(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QPoint point1(000,000); - QPoint point2(200,200); + QPoint point1(000,000); + QPoint point2(200,200); - QBENCHMARK{ - area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1); - } + QBENCHMARK{ + area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_drawPoint(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QPoint point(000,000); + QPoint point(000,000); - QBENCHMARK{ - area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1); - } + QBENCHMARK{ + area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_getDisplayable(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QBENCHMARK{ - area->layerBundle[0].image->getDisplayable(QSize(200,200),255); - } + QBENCHMARK{ + area->layerBundle[0].image->getDisplayable(QSize(200,200),255); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_getPixelColor(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QPoint point(000,000); + QPoint point(000,000); - QBENCHMARK{ - area->layerBundle[0].image->getPixelColor(point); - } + QBENCHMARK{ + area->layerBundle[0].image->getPixelColor(point); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_getImageData(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QBENCHMARK{ - area->layerBundle[0].image->getImageData(); - } + QBENCHMARK{ + area->layerBundle[0].image->getImageData(); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_ShapedImage_setImageData(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - QImage img = area->layerBundle[0].image->getImageData(); - QBENCHMARK{ - area->layerBundle[0].image->setImageData(img); - } + QImage img = area->layerBundle[0].image->getImageData(); + QBENCHMARK{ + area->layerBundle[0].image->setImageData(img); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Circle_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createCircleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Circle_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createCircleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createCircleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_FloodFill_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createFloodFillTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_FloodFill_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createFloodFillTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createFloodFillTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Line_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createLineTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Line_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createLineTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createLineTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); + QPoint point1(100,100); + QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Pen_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPenTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Pen_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPenTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPenTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Plain_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPlainTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Plain_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPlainTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPlainTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,100); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,100); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Polygon_fullDraw(){ - area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); - std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) - }; + area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPolygonTool(); - area->floodFill(255,0,0,255); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseMoved(points[1].x(), points[1].y()); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); - area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); - area->Tool->onMouseMoved(points[2].x(), points[2].y()); + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); - area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); - area->Tool->onMouseMoved(points[3].x(), points[3].y()); + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); - area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); - area->Tool->onMouseMoved(points[0].x(), points[0].y()); + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + area->Tool->onMouseMoved(points[0].x(), points[0].y()); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - } + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Polygon_interruptedDraw(){ - area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); - std::vector points{ - QPoint(100,000) - }; + area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(100,000) + }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPolygonTool(); - area->floodFill(255,0,0,255); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); - area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); - } + area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); + area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Rectangle_fullDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createRectangleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,150); + QPoint point1(100,100); + QPoint point2(150,150); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Rectangle_interruptedDraw(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createRectangleTool(); - area->floodFill(255,0,0,255); + area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createRectangleTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QPoint point1(100,100); - QPoint point2(150,150); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(point1.x(), point1.y()); - area->Tool->onMouseMoved(point2.x(), point2.y()); - area->Tool->onMouseRightPressed(point2.x(), point2.y()); - area->Tool->onMouseRightReleased(point2.x(),point2.y()); - area->Tool->onMouseLeftReleased(point2.x(), point2.y()); - } + QPoint point1(100,100); + QPoint point2(150,150); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(point1.x(), point1.y()); + area->Tool->onMouseMoved(point2.x(), point2.y()); + area->Tool->onMouseRightPressed(point2.x(), point2.y()); + area->Tool->onMouseRightReleased(point2.x(),point2.y()); + area->Tool->onMouseLeftReleased(point2.x(), point2.y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Triangulation_Coverage(){ - std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) - }; - std::vector test{ - QPoint(00,00), - QPoint(00,20), - QPoint(20,00), - QPoint(20,20), - QPoint(10,10) - }; + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; + std::vector test{ + QPoint(00,00), + QPoint(00,20), + QPoint(20,00), + QPoint(20,20), + QPoint(10,10) + }; - QBENCHMARK{ - std::vector tria = IntelliTriangulation::calculateTriangles(points); - QPoint point; - for(int i=0; i<200; i++){ - point.setX(i); - for(int j=0; j<200; j++){ - point.setY(j); - IntelliTriangulation::isInPolygon(tria, point); - } - } - } + QBENCHMARK{ + std::vector tria = IntelliTriangulation::calculateTriangles(points); + QPoint point; + for(int i=0; i<200; i++) { + point.setX(i); + for(int j=0; j<200; j++) { + point.setY(j); + IntelliTriangulation::isInPolygon(tria, point); + } + } + } } - - - QTEST_MAIN(UnitTest) #include "tst_unittest.moc" From a099b2e9160df790c0bd816f4a01471655a5fa60 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 11:35:58 +0100 Subject: [PATCH 60/97] Automated Merge Preparation --- cppcheck_config.txt | 6 ++ cppcheck_errors.txt | 18 ++--- releaseprep.sh | 4 -- src/GUI/IntelliInputDialog.cpp | 84 +++++++++++------------ src/IntelliHelper/IntelliToolsettings.cpp | 28 ++++---- src/Layer/PaintingArea.cpp | 10 +-- src/Tool/IntelliTool.cpp | 2 +- src/Tool/IntelliToolPolygon.cpp | 24 +++---- src/main.cpp | 2 +- 9 files changed, 90 insertions(+), 88 deletions(-) diff --git a/cppcheck_config.txt b/cppcheck_config.txt index 65db50d..6f6a929 100644 --- a/cppcheck_config.txt +++ b/cppcheck_config.txt @@ -1,3 +1,9 @@ +src/GUI/IntelliInputDialog.h:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliInputDialog.cpp:2:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ src/GUI/IntelliPhotoGui.h:4:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] ^ diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index 0276a5e..bf06cfd 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -7,7 +7,7 @@ src/IntelliHelper/IntelliColorPicker.cpp:5:3: performance: Variable 'secondColor src/IntelliHelper/IntelliTriangulation.cpp:116:63: style: Parameter 'triangles' can be declared with const [constParameter] bool IntelliTriangulation::isInPolygon(std::vector &triangles, QPoint &point){ ^ -src/Layer/PaintingArea.cpp:334:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] +src/Layer/PaintingArea.cpp:344:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] if(activeLayer!=-1 && activeLayer>0) { ^ src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::ActiveType' is not initialized in the constructor. [uninitMemberVar] @@ -49,31 +49,31 @@ bool isDrawing; src/GUI/IntelliPhotoGui.cpp:23:0: style: The function 'closeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:261:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:271:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:242:0: style: The function 'mousePressEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:252:0: style: The function 'mousePressEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:274:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:284:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:304:0: style: The function 'paintEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:314:0: style: The function 'paintEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:315:0: style: The function 'resizeEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:325:0: style: The function 'resizeEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:320:0: style: The function 'resizeLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:330:0: style: The function 'resizeLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:168:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:170:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] ^ src/Layer/PaintingArea.cpp:88:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:289:0: style: The function 'wheelEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:299:0: style: The function 'wheelEvent' is never used. [unusedFunction] ^ nofile:0:0: information: Cppcheck cannot find all the include files (use --check-config for details) [missingInclude] diff --git a/releaseprep.sh b/releaseprep.sh index 5392a6f..53956b2 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -11,10 +11,6 @@ echo "CPPCheck finished" echo "Running Uncrustify..." find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + echo "Uncrustify finished." -# Run Unit Tests -echo "Running unit tests..." - -echo "Finished unit testing." # Remove Overhead Folders/ Files echo "Cleaning directory..." rm -r src/build-* diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index 8ed0465..2b2ac32 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -4,83 +4,83 @@ IntelliInputDialog::IntelliInputDialog(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok) { - this->valueInt = value; - this->notClosed = ok; - if(notClosed != nullptr){ - *notClosed = false; - } + this->valueInt = value; + this->notClosed = ok; + if(notClosed != nullptr) { + *notClosed = false; + } createInputBox(Title, Label, value, minValue, maxValue, step); - createConnections(); + createConnections(); setInputBoxStyle(); - this->exec(); + this->exec(); } int IntelliInputDialog::getInt(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok){ - IntelliInputDialog dialog(Title, Label, value, minValue, maxValue, step, ok); - return dialog.valueInt; + IntelliInputDialog dialog(Title, Label, value, minValue, maxValue, step, ok); + return dialog.valueInt; } void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){ - this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); if(Title == nullptr) { - this->setWindowTitle("Input Box"); + this->setWindowTitle("Input Box"); } else{ - this->setWindowTitle(Title); + this->setWindowTitle(Title); } - this->Layout = new QGridLayout(); - this->ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + this->Layout = new QGridLayout(); + this->ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - this->InputLabel = new QLabel(); + this->InputLabel = new QLabel(); if(Label == nullptr) { - this->InputLabel->setText("Width:"); + this->InputLabel->setText("Width:"); } else{ - this->InputLabel->setText(Label); + this->InputLabel->setText(Label); } - this->InputLabel->setFixedSize(Linesize); + this->InputLabel->setFixedSize(Linesize); - this->Input = new QSpinBox(); - this->Input->setFixedSize(Linesize); - this->Input->setRange(minValue,maxValue); - this->Input->setSingleStep(step); - this->Input->setValue(value); + this->Input = new QSpinBox(); + this->Input->setFixedSize(Linesize); + this->Input->setRange(minValue,maxValue); + this->Input->setSingleStep(step); + this->Input->setValue(value); - this->okButton = ButtonBox->button(QDialogButtonBox::Ok); - this->okButton->setFixedSize(Buttonsize); - this->okButton->setAutoDefault(false); - this->okButton->setDefault(false); + this->okButton = ButtonBox->button(QDialogButtonBox::Ok); + this->okButton->setFixedSize(Buttonsize); + this->okButton->setAutoDefault(false); + this->okButton->setDefault(false); - this->cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); - this->cancelButton->setFixedSize(Buttonsize); - this->cancelButton->setAutoDefault(false); - this->cancelButton->setDefault(false); + this->cancelButton = ButtonBox->button(QDialogButtonBox::Cancel); + this->cancelButton->setFixedSize(Buttonsize); + this->cancelButton->setAutoDefault(false); + this->cancelButton->setDefault(false); Layout->addWidget(InputLabel,1,1,1,1); Layout->addWidget(Input,2,1,1,1); Layout->addWidget(ButtonBox,3,1,1,1); - this->setLayout(Layout); - this->resize(172,94); - this->show(); + this->setLayout(Layout); + this->resize(172,94); + this->show(); } void IntelliInputDialog::createConnections(){ - connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe())); + connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent())); } void IntelliInputDialog::setInputBoxStyle(){ - this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);"); + this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);"); } void IntelliInputDialog::slotCloseEvent(){ - this->close(); + this->close(); } void IntelliInputDialog::slotEingabe(){ - valueInt = QString("%1").arg(Input->value()).toInt(); - if(notClosed != nullptr){ - *notClosed = true; - } - this->close(); + valueInt = QString("%1").arg(Input->value()).toInt(); + if(notClosed != nullptr) { + *notClosed = true; + } + this->close(); } diff --git a/src/IntelliHelper/IntelliToolsettings.cpp b/src/IntelliHelper/IntelliToolsettings.cpp index 07da575..c6a7cfc 100644 --- a/src/IntelliHelper/IntelliToolsettings.cpp +++ b/src/IntelliHelper/IntelliToolsettings.cpp @@ -16,13 +16,13 @@ int IntelliToolsettings::getLineWidth(){ } void IntelliToolsettings::setLineWidth(int LineWidth){ - if(LineWidth < 1){ - LineWidth = 1; - } - else if(LineWidth > 50){ - LineWidth = 50; - } - lineWidth = LineWidth; + if(LineWidth < 1) { + LineWidth = 1; + } + else if(LineWidth > 50) { + LineWidth = 50; + } + lineWidth = LineWidth; } int IntelliToolsettings::getInnerAlpha(){ @@ -30,11 +30,11 @@ int IntelliToolsettings::getInnerAlpha(){ } void IntelliToolsettings::setInnerAlpha(int innerAlpha){ - if(innerAlpha < 0){ - innerAlpha = 0; - } - else if(innerAlpha > 255){ - innerAlpha = 255; - } - this->innerAlpha = innerAlpha; + if(innerAlpha < 0) { + innerAlpha = 0; + } + else if(innerAlpha > 255) { + innerAlpha = 255; + } + this->innerAlpha = innerAlpha; } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 57b9ece..0b5913e 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -32,7 +32,7 @@ PaintingArea::~PaintingArea(){ } void PaintingArea::setRenderSettings(bool isFastRenderingOn){ - if(isFastRenderingOn != renderSettings.isFastRenderering() && !Tool->getIsDrawing()) { + if(isFastRenderingOn != renderSettings.isFastRenderering() && !Tool->getIsDrawing()) { renderSettings.setFastRendering(isFastRenderingOn); for(auto& layer : layerBundle) { layer.image->updateRendererSetting(isFastRenderingOn); @@ -110,7 +110,7 @@ void PaintingArea::setPolygon(int idx){ delete this->Tool; this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true); isSettingPolygon = true; - this->DummyGui->setToolWidth(5); + this->DummyGui->setToolWidth(5); } } } @@ -164,7 +164,7 @@ void PaintingArea::moveActiveLayer(int idx){ }else if(idx==-1) { this->selectLayerDown(); } - DummyGui->UpdateGui(); + DummyGui->UpdateGui(); } void PaintingArea::slotActivateLayer(int a){ @@ -231,11 +231,11 @@ int PaintingArea::getHeightOfActive(){ } int PaintingArea::getMaxWidth(){ - return this->maxWidth; + return this->maxWidth; } int PaintingArea::getMaxHeight(){ - return this->maxHeight; + return this->maxHeight; } IntelliImage::ImageType PaintingArea::getTypeOfImageRealLayer(){ diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index 0b9168c..9b9ffc1 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -47,7 +47,7 @@ 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()); + Area->DummyGui->setToolWidth(value + Toolsettings->getLineWidth()); } bool IntelliTool::createToolLayer(){ diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 4325ac1..9b21fe9 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -10,9 +10,9 @@ IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* c isDrawing = false; isInside = false; this->isSettingPolygon = isSettingPolygon; - if(isSettingPolygon){ - Toolsettings->setLineWidth(5); - } + if(isSettingPolygon) { + Toolsettings->setLineWidth(5); + } this->ActiveType = Tooltype::POLYGON; } @@ -124,18 +124,18 @@ void IntelliToolPolygon::onMouseRightReleased(int x, int y){ } void IntelliToolPolygon::onWheelScrolled(int value){ - if(!isSettingPolygon){ - IntelliTool::onWheelScrolled(value); - if(!isDrawing) { - Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value); - } - } + if(!isSettingPolygon) { + IntelliTool::onWheelScrolled(value); + if(!isDrawing) { + Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value); + } + } } void IntelliToolPolygon::onMouseMoved(int x, int y){ - if(!isSettingPolygon){ - IntelliTool::onMouseMoved(x,y); - } + if(!isSettingPolygon) { + IntelliTool::onMouseMoved(x,y); + } } bool IntelliToolPolygon::isNearStart(int x, int y, QPoint Startpoint){ diff --git a/src/main.cpp b/src/main.cpp index 9eec82f..30adab2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,7 @@ int main(int argc, char*argv[]){ QApplication app(argc, argv); // Create and open the main window - IntelliPhotoGui window; + IntelliPhotoGui window; window.show(); return app.exec(); From aaf5c1ddf9f7343d7333785879b789a41c517e59 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 11:37:43 +0100 Subject: [PATCH 61/97] Added Colors --- releaseprep.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/releaseprep.sh b/releaseprep.sh index 53956b2..a87f7a0 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -1,30 +1,30 @@ # Discarding local changes -echo "This will discard all your uncommited changes and restore the last commit. Continue?" +echo "\033[0;33mThis will discard all your uncommited changes and restore the last commit. Continue?" read git reset --hard # Run CPP Check echo "Running CPPCheck..." cppcheck --enable=all --output-file=cppcheck_errors.txt src/ cppcheck --check-config --output-file=cppcheck_config.txt src/ -echo "CPPCheck finished" +echo "\033[0;32mCPPCheck finished" # Uncrustify Files echo "Running Uncrustify..." find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + -echo "Uncrustify finished." +echo "\033[0;32mUncrustify finished." # Remove Overhead Folders/ Files echo "Cleaning directory..." rm -r src/build-* rm -r build-*/ rm -r Examples/ rm src/*.pro.user -echo "Directory cleaned." +echo "\033[0;32mDirectory cleaned." # Run Doxygen echo "Running Doxygen..." doxygen conf/intelliphoto_dox -echo "Doxygen finished." +echo "\033[0;32mDoxygen finished." # Adding changes to git echo "Committing Changes to Git..." git add '*' git commit -m "Automated Release Preparation" -echo "Committed." -echo "Finished." +echo "\033[0;32mCommitted." +echo "\033[0;32mFinished." From 876ceb7e39030e6cbc6c7f28ee4a2af2f6e322b1 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 11:39:03 +0100 Subject: [PATCH 62/97] Updated Colors --- releaseprep.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/releaseprep.sh b/releaseprep.sh index a87f7a0..9ab4b1f 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -1,30 +1,30 @@ # Discarding local changes -echo "\033[0;33mThis will discard all your uncommited changes and restore the last commit. Continue?" +echo "\033[0;33mThis will discard all your uncommited changes and restore the last commit. Continue?\033[0m" read git reset --hard # Run CPP Check echo "Running CPPCheck..." cppcheck --enable=all --output-file=cppcheck_errors.txt src/ cppcheck --check-config --output-file=cppcheck_config.txt src/ -echo "\033[0;32mCPPCheck finished" +echo "\033[0;32mCPPCheck finished\033[0m" # Uncrustify Files echo "Running Uncrustify..." find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + -echo "\033[0;32mUncrustify finished." +echo "\033[0;32mUncrustify finished.\033[0m" # Remove Overhead Folders/ Files echo "Cleaning directory..." rm -r src/build-* rm -r build-*/ rm -r Examples/ rm src/*.pro.user -echo "\033[0;32mDirectory cleaned." +echo "\033[0;32mDirectory cleaned.\033[0m" # Run Doxygen echo "Running Doxygen..." doxygen conf/intelliphoto_dox -echo "\033[0;32mDoxygen finished." +echo "\033[0;32mDoxygen finished.\033[0m" # Adding changes to git echo "Committing Changes to Git..." git add '*' git commit -m "Automated Release Preparation" -echo "\033[0;32mCommitted." -echo "\033[0;32mFinished." +echo "\033[0;32mCommitted.\033[0m" +echo "\033[0;32mFinished.\033[0m" From c83682a09a2d330b21a454c6fcece411ecd016fc Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 11:50:02 +0100 Subject: [PATCH 63/97] first warning fixes --- src/Image/IntelliImage.h | 10 +++++----- src/Layer/PaintingArea.h | 33 +++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/Image/IntelliImage.h b/src/Image/IntelliImage.h index 0d2fe42..116a01d 100644 --- a/src/Image/IntelliImage.h +++ b/src/Image/IntelliImage.h @@ -69,7 +69,7 @@ virtual ~IntelliImage() = 0; virtual void drawPixel(const QPoint &p1, const QColor& color); /*! - * \brief A function that draws A Line between two given Points in a given color. + * \brief A function that draws a line between two given points in a given color. * \param p1 - The coordinates of the first Point. * \param p2 - The coordinates of the second Point. * \param color - The color of the line. @@ -78,10 +78,10 @@ virtual void drawPixel(const QPoint &p1, const QColor& color); virtual void drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth); /*! - * \brief A - * \param p1 - * \param color - * \param penWidth + * \brief A function that draws a point between on a given point in a given color. + * \param p1 - The coordinates of the first Point. + * \param color - The color of the point. + * \param penWidth - The size of the point. */ virtual void drawPoint(const QPoint &p1, const QColor& color, const int& penWidth); diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index c282c39..066450c 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -16,18 +16,31 @@ /*! * \brief The LayerObject struct holds all the information needed to construct a layer - * \param width - Stores the width of a layer in pixels - * \param height - Stores the height of a layer in pixels - * \param alpha - Stores the alpha value of the layer (default=255) - * \param widthOffset - Stores the number of pixles from the left side of the painting area - * \param heightOffset - Stores the number of pixles from the top of the painting area */ struct LayerObject { + /*! + * \brief image - Stores the imageData of the current LayerObject. + */ IntelliImage* image; + /*! + * \brief width - Stores the width of a layer in pixels. + */ int width; + /*! + * \brief height - Stores the height of a layer in pixels. + */ int height; + /*! + * \brief widthOffset - Stores the number of pixles from the left side of the painting area. + */ int widthOffset; + /*! + * \brief heightOffset - Stores the number of pixles from the top of the painting area. + */ int heightOffset; + /*! + * \brief alpha - Stores the alpha value of the layer (default=255). + */ int alpha = 255; }; @@ -60,15 +73,15 @@ PaintingArea(int maxWidth = 600, int maxHeight = 600, QWidget*parent = nullptr); void setRenderSettings(bool isFastRenderingOn); /*! - * \brief The open method is used for loading a picture into the current layer - * \param fileName - Path and filename which are used to determine where the to-be-opened file is stored - * \return Returns a boolean variable whether the file was successfully opened or not + * \brief The open method is used for loading a picture into the current layer. + * \param filePath - Path and Name which are used to determine where the to-be-opened file is stored. + * \return Returns a boolean variable whether the file was successfully opened or not. */ bool open(const QString &filePath); /*! * \brief The save method is used for exporting the current project as one picture - * \param fileName - * \param fileFormat + * \param filePath - Specifies the path and name of the file to create. + * \param fileFormat - Specifies the format of the file to create. * \return Returns a boolean variable, true if the file was saved successfully, false if not */ bool save(const QString &filePath, const char*fileFormat); From c7c5567049485efeaedffee947a2334284f66100 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:00:51 +0100 Subject: [PATCH 64/97] Merged release and merge preparation scripts --- mergeprep.sh | 15 -------- releaseprep.sh | 97 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 67 insertions(+), 45 deletions(-) delete mode 100755 mergeprep.sh diff --git a/mergeprep.sh b/mergeprep.sh deleted file mode 100755 index efdb194..0000000 --- a/mergeprep.sh +++ /dev/null @@ -1,15 +0,0 @@ -# Run CPP Check -echo "Running CPPCheck..." -cppcheck --enable=all --output-file=cppcheck_errors.txt src/ -cppcheck --check-config --output-file=cppcheck_config.txt src/ -echo "CPPCheck finished" -# Uncrustify Files -echo "Running Uncrustify..." -find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + -echo "Uncrustify finished." -# Adding changes to git -echo "Committing Changes to Git..." -git add '*' -git commit -m "Automated Merge Preparation" -echo "Committed." -echo "Finished." diff --git a/releaseprep.sh b/releaseprep.sh index 9ab4b1f..4077b41 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -1,30 +1,67 @@ -# Discarding local changes -echo "\033[0;33mThis will discard all your uncommited changes and restore the last commit. Continue?\033[0m" -read -git reset --hard -# Run CPP Check -echo "Running CPPCheck..." -cppcheck --enable=all --output-file=cppcheck_errors.txt src/ -cppcheck --check-config --output-file=cppcheck_config.txt src/ -echo "\033[0;32mCPPCheck finished\033[0m" -# Uncrustify Files -echo "Running Uncrustify..." -find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + -echo "\033[0;32mUncrustify finished.\033[0m" -# Remove Overhead Folders/ Files -echo "Cleaning directory..." -rm -r src/build-* -rm -r build-*/ -rm -r Examples/ -rm src/*.pro.user -echo "\033[0;32mDirectory cleaned.\033[0m" -# Run Doxygen -echo "Running Doxygen..." -doxygen conf/intelliphoto_dox -echo "\033[0;32mDoxygen finished.\033[0m" -# Adding changes to git -echo "Committing Changes to Git..." -git add '*' -git commit -m "Automated Release Preparation" -echo "\033[0;32mCommitted.\033[0m" -echo "\033[0;32mFinished.\033[0m" +printLine(){ + echo "$2$1 \033[0m" +} + +resetGit(){ + printLine "This will discard all your uncommited changes and restore the last commit. Continue?" "\033[0;33m" + read + git reset --hard + printLine "Git resetted." "\033[0;32m" +} + +runCPPCheck(){ + printLine "Running CPPCheck..." + cppcheck --enable=all --output-file=cppcheck_errors.txt src/ + cppcheck --check-config --output-file=cppcheck_config.txt src/ + printLine "CPPCheck finished" "\033[0;32m" +} + +runUncrustify(){ + printLine "Running Uncrustify..." + find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + + printLine "Uncrustify finished." "\033[0;32m" +} + +cleanDir(){ + printLine "Cleaning directory..." + rm -r src/build-* + rm -r build-*/ + rm -r Examples/ + rm src/*.pro.user + printLine "Directory cleaned." "\033[0;32m" +} + +runDoxygen(){ + printLine "Running Doxygen..." + doxygen conf/intelliphoto_dox + printLine "Doxygen finished." "\033[0;32m" +} + +gitCommit(){ + printLine "Committing Changes to Git..." + git add '*' + git commit -m "Automated Release Preparation" + printLine "Committed." "\033[0;32m" +} + +prepareMerge(){ + printLine "Merge Preparation started..." + printLine "Finished." "\033[0;32m" + exit +} + +prepareRelease(){ + printLine "Release Preparation started..." + printLine "Finished." "\033[0;32m" + exit +} + +echo "Merge/ Release Preparation for IntelliPhoto started." +while true; do + read -p "Do you want to prepare a (m)erge or a (r)elease?" yn + case $yn in + [Mm]* ) prepareMerge;; + [Rr]* ) prepareRelease;; + * ) echo "Please answer (m)erge or (r)elease.";; + esac +done From b4a37d8bea9220a9880cadb6d8eb0f82095896c3 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:09:19 +0100 Subject: [PATCH 65/97] Improved Release Prep Script --- releaseprep.sh | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/releaseprep.sh b/releaseprep.sh index 4077b41..e496517 100755 --- a/releaseprep.sh +++ b/releaseprep.sh @@ -2,7 +2,7 @@ printLine(){ echo "$2$1 \033[0m" } -resetGit(){ +gitReset(){ printLine "This will discard all your uncommited changes and restore the last commit. Continue?" "\033[0;33m" read git reset --hard @@ -11,14 +11,14 @@ resetGit(){ runCPPCheck(){ printLine "Running CPPCheck..." - cppcheck --enable=all --output-file=cppcheck_errors.txt src/ - cppcheck --check-config --output-file=cppcheck_config.txt src/ + cppcheck -q --enable=all --output-file=cppcheck_errors.txt src/ || { printLine "ERROR: cppcheck not found!" "\033[0;33m"; return; } + cppcheck -q --check-config --output-file=cppcheck_config.txt src/ || { printLine "ERROR: cppcheck not found!" "\033[0;33m"; return; } printLine "CPPCheck finished" "\033[0;32m" } runUncrustify(){ printLine "Running Uncrustify..." - find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -c conf/uncrustify.cfg --no-backup {} + + find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -exec uncrustify -q -c conf/uncrustify.cfg --no-backup {} + || { printLine "ERROR: uncrusify not found!" "\033[0;33m"; return; } printLine "Uncrustify finished." "\033[0;32m" } @@ -33,25 +33,35 @@ cleanDir(){ runDoxygen(){ printLine "Running Doxygen..." - doxygen conf/intelliphoto_dox + doxygen conf/intelliphoto_dox || { printLine "ERROR: doxygen not found!" "\033[0;33m"; return; } printLine "Doxygen finished." "\033[0;32m" } gitCommit(){ printLine "Committing Changes to Git..." - git add '*' + git add '*' || { printLine "ERROR: git not found!" "\033[0;33m"; return; } git commit -m "Automated Release Preparation" printLine "Committed." "\033[0;32m" } prepareMerge(){ printLine "Merge Preparation started..." + runUncrustify + runCPPCheck + runDoxygen + gitCommit printLine "Finished." "\033[0;32m" exit } prepareRelease(){ printLine "Release Preparation started..." + gitReset + cleanDir + runUncrustify + runCPPCheck + runDoxygen + gitCommit printLine "Finished." "\033[0;32m" exit } From 34294ef7cbfa7b0e9aa0763964471265df90bc5b Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:09:30 +0100 Subject: [PATCH 66/97] Automated Release Preparation --- docs/html/_intelli_color_picker_8h.html | 16 +- .../html/_intelli_color_picker_8h_source.html | 18 +- ...li_helper_2_intelli_color_picker_8cpp.html | 16 +- ...er_2_intelli_color_picker_8cpp_source.html | 16 +- docs/html/_intelli_image_8cpp.html | 16 +- docs/html/_intelli_image_8cpp_source.html | 222 +-- docs/html/_intelli_image_8h.html | 16 +- docs/html/_intelli_image_8h_source.html | 49 +- docs/html/_intelli_input_dialog_8cpp.html | 105 ++ .../_intelli_input_dialog_8cpp_source.html | 193 +++ docs/html/_intelli_input_dialog_8h.html | 112 ++ .../html/_intelli_input_dialog_8h_source.html | 145 ++ docs/html/_intelli_photo_gui_8cpp.html | 16 +- docs/html/_intelli_photo_gui_8cpp_source.html | 1448 +++++++++-------- docs/html/_intelli_photo_gui_8h.html | 19 +- docs/html/_intelli_photo_gui_8h_source.html | 325 ++-- docs/html/_intelli_raster_image_8cpp.html | 16 +- .../_intelli_raster_image_8cpp_source.html | 28 +- docs/html/_intelli_raster_image_8h.html | 16 +- .../html/_intelli_raster_image_8h_source.html | 18 +- docs/html/_intelli_render_settings_8cpp.html | 16 +- .../_intelli_render_settings_8cpp_source.html | 27 +- docs/html/_intelli_render_settings_8h.html | 16 +- .../_intelli_render_settings_8h_source.html | 34 +- docs/html/_intelli_shaped_image_8cpp.html | 16 +- .../_intelli_shaped_image_8cpp_source.html | 170 +- docs/html/_intelli_shaped_image_8h.html | 16 +- .../html/_intelli_shaped_image_8h_source.html | 24 +- docs/html/_intelli_tool_8cpp.html | 16 +- docs/html/_intelli_tool_8cpp_source.html | 183 ++- docs/html/_intelli_tool_8h.html | 16 +- docs/html/_intelli_tool_8h_source.html | 138 +- docs/html/_intelli_tool_circle_8cpp.html | 16 +- .../_intelli_tool_circle_8cpp_source.html | 193 ++- docs/html/_intelli_tool_circle_8h.html | 16 +- docs/html/_intelli_tool_circle_8h_source.html | 36 +- docs/html/_intelli_tool_flood_fill_8cpp.html | 16 +- .../_intelli_tool_flood_fill_8cpp_source.html | 42 +- docs/html/_intelli_tool_flood_fill_8h.html | 16 +- .../_intelli_tool_flood_fill_8h_source.html | 24 +- docs/html/_intelli_tool_line_8cpp.html | 16 +- docs/html/_intelli_tool_line_8cpp_source.html | 70 +- docs/html/_intelli_tool_line_8h.html | 16 +- docs/html/_intelli_tool_line_8h_source.html | 26 +- docs/html/_intelli_tool_pen_8cpp.html | 16 +- docs/html/_intelli_tool_pen_8cpp_source.html | 46 +- docs/html/_intelli_tool_pen_8h.html | 16 +- docs/html/_intelli_tool_pen_8h_source.html | 24 +- docs/html/_intelli_tool_plain_8cpp.html | 16 +- .../html/_intelli_tool_plain_8cpp_source.html | 30 +- docs/html/_intelli_tool_plain_8h.html | 16 +- docs/html/_intelli_tool_plain_8h_source.html | 24 +- docs/html/_intelli_tool_polygon_8cpp.html | 16 +- .../_intelli_tool_polygon_8cpp_source.html | 332 ++-- docs/html/_intelli_tool_polygon_8h.html | 16 +- .../html/_intelli_tool_polygon_8h_source.html | 81 +- docs/html/_intelli_tool_rectangle_8cpp.html | 16 +- .../_intelli_tool_rectangle_8cpp_source.html | 48 +- docs/html/_intelli_tool_rectangle_8h.html | 16 +- .../_intelli_tool_rectangle_8h_source.html | 24 +- docs/html/_intelli_toolsettings_8cpp.html | 16 +- .../_intelli_toolsettings_8cpp_source.html | 108 +- docs/html/_intelli_toolsettings_8h.html | 16 +- .../html/_intelli_toolsettings_8h_source.html | 64 +- docs/html/_intelli_triangulation_8cpp.html | 16 +- .../_intelli_triangulation_8cpp_source.html | 116 +- docs/html/_intelli_triangulation_8h.html | 16 +- .../_intelli_triangulation_8h_source.html | 18 +- docs/html/_painting_area_8cpp.html | 16 +- docs/html/_painting_area_8cpp_source.html | 884 +++++----- docs/html/_painting_area_8h.html | 16 +- docs/html/_painting_area_8h_source.html | 286 ++-- .../_tool_2_intelli_color_picker_8cpp.html | 16 +- ...ol_2_intelli_color_picker_8cpp_source.html | 16 +- docs/html/annotated.html | 45 +- docs/html/annotated_dup.js | 1 + docs/html/bc_s.png | Bin 659 -> 678 bytes docs/html/bdwn.png | Bin 140 -> 144 bytes .../class_intelli_color_picker-members.html | 12 +- docs/html/class_intelli_color_picker.html | 16 +- docs/html/class_intelli_image-members.html | 23 +- docs/html/class_intelli_image.html | 87 +- docs/html/class_intelli_image.js | 3 +- docs/html/class_intelli_image.png | Bin 754 -> 754 bytes .../class_intelli_input_dialog-members.html | 107 ++ docs/html/class_intelli_input_dialog.html | 323 ++++ docs/html/class_intelli_input_dialog.js | 6 + docs/html/class_intelli_input_dialog.png | Bin 0 -> 469 bytes .../html/class_intelli_photo_gui-members.html | 15 +- docs/html/class_intelli_photo_gui.html | 53 +- docs/html/class_intelli_photo_gui.js | 1 + docs/html/class_intelli_photo_gui.png | Bin 471 -> 471 bytes .../class_intelli_raster_image-members.html | 25 +- docs/html/class_intelli_raster_image.html | 27 +- docs/html/class_intelli_raster_image.png | Bin 747 -> 747 bytes ...class_intelli_render_settings-members.html | 17 +- docs/html/class_intelli_render_settings.html | 59 +- docs/html/class_intelli_render_settings.js | 3 +- .../class_intelli_shaped_image-members.html | 27 +- docs/html/class_intelli_shaped_image.html | 31 +- docs/html/class_intelli_shaped_image.png | Bin 742 -> 742 bytes docs/html/class_intelli_tool-members.html | 12 +- docs/html/class_intelli_tool.html | 38 +- docs/html/class_intelli_tool.png | Bin 1396 -> 1396 bytes .../class_intelli_tool_circle-members.html | 12 +- docs/html/class_intelli_tool_circle.html | 28 +- docs/html/class_intelli_tool_circle.png | Bin 425 -> 425 bytes ...class_intelli_tool_flood_fill-members.html | 12 +- docs/html/class_intelli_tool_flood_fill.html | 16 +- docs/html/class_intelli_tool_flood_fill.png | Bin 418 -> 418 bytes .../html/class_intelli_tool_line-members.html | 12 +- docs/html/class_intelli_tool_line.html | 20 +- docs/html/class_intelli_tool_line.png | Bin 386 -> 386 bytes docs/html/class_intelli_tool_pen-members.html | 12 +- docs/html/class_intelli_tool_pen.html | 16 +- docs/html/class_intelli_tool_pen.png | Bin 376 -> 376 bytes ...class_intelli_tool_plain_tool-members.html | 12 +- docs/html/class_intelli_tool_plain_tool.html | 16 +- docs/html/class_intelli_tool_plain_tool.png | Bin 435 -> 435 bytes .../class_intelli_tool_polygon-members.html | 14 +- docs/html/class_intelli_tool_polygon.html | 49 +- docs/html/class_intelli_tool_polygon.js | 2 +- docs/html/class_intelli_tool_polygon.png | Bin 456 -> 456 bytes .../class_intelli_tool_rectangle-members.html | 12 +- docs/html/class_intelli_tool_rectangle.html | 16 +- docs/html/class_intelli_tool_rectangle.png | Bin 469 -> 469 bytes .../class_intelli_toolsettings-members.html | 22 +- docs/html/class_intelli_toolsettings.html | 135 +- docs/html/class_intelli_toolsettings.js | 7 - docs/html/class_painting_area-members.html | 22 +- docs/html/class_painting_area.html | 280 ++-- docs/html/class_painting_area.js | 8 +- docs/html/class_painting_area.png | Bin 448 -> 448 bytes docs/html/classes.html | 53 +- docs/html/closed.png | Bin 127 -> 130 bytes .../dir_13830bfc3dd6736fe878600c9081919f.html | 19 +- .../dir_4e4e2e75df7fa6971448b424c011c8b5.html | 23 +- .../dir_4e4e2e75df7fa6971448b424c011c8b5.js | 6 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 19 +- .../dir_858355f3357c73763e566ff49d1e6a7a.html | 35 +- .../dir_858355f3357c73763e566ff49d1e6a7a.js | 20 +- .../dir_8de6078cba2a961961818cf80b28fd4f.html | 26 +- .../dir_8de6078cba2a961961818cf80b28fd4f.js | 14 +- .../dir_fdbdd9841f9a730f284bb666ff3d8cfe.html | 19 +- .../dir_fdbdd9841f9a730f284bb666ff3d8cfe.js | 4 +- docs/html/doc.png | Bin 707 -> 810 bytes docs/html/doxygen.css | 199 +-- docs/html/doxygen.png | Bin 3778 -> 3861 bytes docs/html/files.html | 101 +- docs/html/files_dup.js | 2 +- docs/html/folderclosed.png | Bin 554 -> 649 bytes docs/html/folderopen.png | Bin 571 -> 651 bytes docs/html/functions.html | 73 +- docs/html/functions_enum.html | 15 +- docs/html/functions_func.html | 66 +- docs/html/functions_vars.html | 16 +- docs/html/globals.html | 12 +- docs/html/globals_defs.html | 12 +- docs/html/globals_func.html | 12 +- docs/html/hierarchy.html | 24 +- docs/html/hierarchy.js | 3 + docs/html/index.html | 12 +- docs/html/main_8cpp.html | 16 +- docs/html/main_8cpp_source.html | 18 +- docs/html/menudata.js | 1 - .../html/namespace_intelli_triangulation.html | 12 +- docs/html/namespacemembers.html | 12 +- docs/html/namespacemembers_func.html | 12 +- docs/html/namespaces.html | 12 +- docs/html/nav_f.png | Bin 143 -> 147 bytes docs/html/nav_h.png | Bin 90 -> 97 bytes docs/html/navtree.css | 2 +- docs/html/navtreedata.js | 2 +- docs/html/navtreeindex0.js | 442 ++--- docs/html/navtreeindex1.js | 98 +- docs/html/open.png | Bin 116 -> 117 bytes docs/html/resize.js | 1 + docs/html/search/all_0.html | 2 +- docs/html/search/all_1.html | 2 +- docs/html/search/all_10.html | 2 +- docs/html/search/all_10.js | 6 +- docs/html/search/all_11.html | 2 +- docs/html/search/all_11.js | 28 +- docs/html/search/all_2.html | 2 +- docs/html/search/all_3.html | 2 +- docs/html/search/all_3.js | 11 +- docs/html/search/all_4.html | 2 +- docs/html/search/all_4.js | 4 +- docs/html/search/all_5.html | 2 +- docs/html/search/all_5.js | 40 +- docs/html/search/all_6.html | 2 +- docs/html/search/all_6.js | 4 +- docs/html/search/all_7.html | 2 +- docs/html/search/all_7.js | 112 +- docs/html/search/all_8.html | 2 +- docs/html/search/all_8.js | 7 +- docs/html/search/all_9.html | 2 +- docs/html/search/all_9.js | 14 +- docs/html/search/all_a.html | 2 +- docs/html/search/all_a.js | 14 +- docs/html/search/all_b.html | 2 +- docs/html/search/all_b.js | 18 +- docs/html/search/all_c.html | 2 +- docs/html/search/all_c.js | 8 +- docs/html/search/all_d.html | 2 +- docs/html/search/all_d.js | 33 +- docs/html/search/all_e.html | 2 +- docs/html/search/all_e.js | 8 +- docs/html/search/all_f.html | 2 +- docs/html/search/all_f.js | 4 +- docs/html/search/classes_0.html | 2 +- docs/html/search/classes_0.js | 31 +- docs/html/search/classes_1.html | 2 +- docs/html/search/classes_1.js | 2 +- docs/html/search/classes_2.html | 2 +- docs/html/search/classes_2.js | 2 +- docs/html/search/classes_3.html | 2 +- docs/html/search/classes_3.js | 2 +- docs/html/search/defines_0.html | 2 +- docs/html/search/defines_0.js | 2 +- docs/html/search/enums_0.html | 2 +- docs/html/search/enums_0.js | 2 +- docs/html/search/enums_1.html | 2 +- docs/html/search/enums_1.js | 2 +- docs/html/search/enumvalues_0.html | 2 +- docs/html/search/enumvalues_0.js | 2 +- docs/html/search/enumvalues_1.html | 2 +- docs/html/search/enumvalues_1.js | 2 +- docs/html/search/enumvalues_2.html | 2 +- docs/html/search/enumvalues_2.js | 2 +- docs/html/search/enumvalues_3.html | 2 +- docs/html/search/enumvalues_3.js | 4 +- docs/html/search/enumvalues_4.html | 2 +- docs/html/search/enumvalues_4.js | 5 +- docs/html/search/enumvalues_5.html | 2 +- docs/html/search/enumvalues_5.js | 3 +- docs/html/search/files_0.html | 2 +- docs/html/search/files_0.js | 66 +- docs/html/search/files_1.html | 2 +- docs/html/search/files_1.js | 2 +- docs/html/search/files_2.html | 2 +- docs/html/search/files_2.js | 4 +- docs/html/search/functions_0.html | 2 +- docs/html/search/functions_0.js | 4 +- docs/html/search/functions_1.html | 2 +- docs/html/search/functions_1.js | 26 +- docs/html/search/functions_2.html | 2 +- docs/html/search/functions_2.js | 10 +- docs/html/search/functions_3.html | 2 +- docs/html/search/functions_3.js | 23 +- docs/html/search/functions_4.html | 2 +- docs/html/search/functions_4.js | 39 +- docs/html/search/functions_5.html | 2 +- docs/html/search/functions_5.js | 18 +- docs/html/search/functions_6.html | 2 +- docs/html/search/functions_6.js | 7 +- docs/html/search/functions_7.html | 2 +- docs/html/search/functions_7.js | 13 +- docs/html/search/functions_8.html | 2 +- docs/html/search/functions_8.js | 9 +- docs/html/search/functions_9.html | 2 +- docs/html/search/functions_9.js | 4 +- docs/html/search/functions_a.html | 2 +- docs/html/search/functions_a.js | 20 +- docs/html/search/functions_b.html | 2 +- docs/html/search/functions_b.js | 14 +- docs/html/search/functions_c.html | 2 +- docs/html/search/functions_c.js | 3 +- docs/html/search/functions_d.html | 2 +- docs/html/search/functions_d.js | 15 +- docs/html/search/namespaces_0.html | 2 +- docs/html/search/namespaces_0.js | 2 +- docs/html/search/search.css | 14 +- docs/html/search/searchdata.js | 6 +- docs/html/search/variables_0.html | 2 +- docs/html/search/variables_0.js | 10 +- docs/html/search/variables_1.html | 2 +- docs/html/search/variables_1.js | 2 +- docs/html/search/variables_2.html | 2 +- docs/html/search/variables_2.js | 6 +- docs/html/search/variables_3.html | 2 +- docs/html/search/variables_3.js | 2 +- docs/html/search/variables_4.html | 2 +- docs/html/search/variables_4.js | 4 +- docs/html/search/variables_5.html | 2 +- docs/html/search/variables_5.js | 6 +- docs/html/search/variables_6.html | 2 +- docs/html/search/variables_6.js | 2 +- docs/html/search/variables_7.html | 2 +- docs/html/search/variables_7.js | 4 +- docs/html/search/variables_8.html | 2 +- docs/html/search/variables_8.js | 4 +- docs/html/splitbar.png | Bin 282 -> 306 bytes docs/html/struct_layer_object-members.html | 12 +- docs/html/struct_layer_object.html | 18 +- docs/html/struct_triangle-members.html | 12 +- docs/html/struct_triangle.html | 14 +- docs/html/sync_off.png | Bin 843 -> 859 bytes docs/html/sync_on.png | Bin 830 -> 840 bytes docs/html/tab_a.png | Bin 127 -> 130 bytes docs/html/tab_b.png | Bin 160 -> 170 bytes docs/html/tab_h.png | Bin 155 -> 170 bytes docs/html/tab_s.png | Bin 167 -> 175 bytes 303 files changed, 5603 insertions(+), 4657 deletions(-) create mode 100644 docs/html/_intelli_input_dialog_8cpp.html create mode 100644 docs/html/_intelli_input_dialog_8cpp_source.html create mode 100644 docs/html/_intelli_input_dialog_8h.html create mode 100644 docs/html/_intelli_input_dialog_8h_source.html create mode 100644 docs/html/class_intelli_input_dialog-members.html create mode 100644 docs/html/class_intelli_input_dialog.html create mode 100644 docs/html/class_intelli_input_dialog.js create mode 100644 docs/html/class_intelli_input_dialog.png diff --git a/docs/html/_intelli_color_picker_8h.html b/docs/html/_intelli_color_picker_8h.html index 47b8e92..87bc808 100644 --- a/docs/html/_intelli_color_picker_8h.html +++ b/docs/html/_intelli_color_picker_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliColorPicker.h File Reference +IntelliPhoto: src/IntelliHelper/IntelliColorPicker.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -109,10 +105,10 @@ Classes diff --git a/docs/html/_intelli_color_picker_8h_source.html b/docs/html/_intelli_color_picker_8h_source.html index 5efb6e4..26bc4f1 100644 --- a/docs/html/_intelli_color_picker_8h_source.html +++ b/docs/html/_intelli_color_picker_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliColorPicker.h Source File +IntelliPhoto: src/IntelliHelper/IntelliColorPicker.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -119,7 +115,7 @@ $(document).ready(function(){initNavTree('_intelli_color_picker_8h_source.html',
61 QColor secondColor;
62 };
63 
-
64 #endif // INTELLITOOLSETCOLORTOOL_H
+
64 #endif
virtual ~IntelliColorPicker()
IntelliColorPicker destructor clears up his used memory, if there is some.
@@ -133,10 +129,10 @@ $(document).ready(function(){initNavTree('_intelli_color_picker_8h_source.html', diff --git a/docs/html/_intelli_helper_2_intelli_color_picker_8cpp.html b/docs/html/_intelli_helper_2_intelli_color_picker_8cpp.html index c03d538..c91b3b8 100644 --- a/docs/html/_intelli_helper_2_intelli_color_picker_8cpp.html +++ b/docs/html/_intelli_helper_2_intelli_color_picker_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliColorPicker.cpp File Reference +IntelliPhoto: src/IntelliHelper/IntelliColorPicker.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -98,10 +94,10 @@ $(document).ready(function(){initNavTree('_intelli_helper_2_intelli_color_picker diff --git a/docs/html/_intelli_helper_2_intelli_color_picker_8cpp_source.html b/docs/html/_intelli_helper_2_intelli_color_picker_8cpp_source.html index 3625595..5ff0ba5 100644 --- a/docs/html/_intelli_helper_2_intelli_color_picker_8cpp_source.html +++ b/docs/html/_intelli_helper_2_intelli_color_picker_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliColorPicker.cpp Source File +IntelliPhoto: src/IntelliHelper/IntelliColorPicker.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -133,10 +129,10 @@ $(document).ready(function(){initNavTree('_intelli_helper_2_intelli_color_picker diff --git a/docs/html/_intelli_image_8cpp.html b/docs/html/_intelli_image_8cpp.html index 04c96c5..48082b7 100644 --- a/docs/html/_intelli_image_8cpp.html +++ b/docs/html/_intelli_image_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliImage.cpp File Reference +IntelliPhoto: src/Image/IntelliImage.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -100,10 +96,10 @@ $(document).ready(function(){initNavTree('_intelli_image_8cpp.html','');}); diff --git a/docs/html/_intelli_image_8cpp_source.html b/docs/html/_intelli_image_8cpp_source.html index abbb094..f28a53f 100644 --- a/docs/html/_intelli_image_8cpp_source.html +++ b/docs/html/_intelli_image_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliImage.cpp Source File +IntelliPhoto: src/Image/IntelliImage.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -103,7 +99,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8cpp_source.html','');}
11  if(fastRendererOn) {
12  imageData = imageData.convertToFormat(QImage::Format_Indexed8);
13  }
-
14  this->fastRenderer = fastRendererOn;
+
14  this->fastRenderering = fastRendererOn;
15 
16 }
17 
@@ -122,7 +118,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8cpp_source.html','');}
30  // scaled Image to size of Layer
31  loadedImage = loadedImage.scaled(imageData.size(),Qt::IgnoreAspectRatio);
32 
-
33  imageData = loadedImage.convertToFormat(fastRenderer ? QImage::Format_Indexed8 : QImage::Format_ARGB32);
+
33  imageData = loadedImage.convertToFormat(fastRenderering ? QImage::Format_Indexed8 : QImage::Format_ARGB32);
34  return true;
35 }
36 
@@ -138,111 +134,133 @@ $(document).ready(function(){initNavTree('_intelli_image_8cpp_source.html','');}
46  // Draw the image
47  QPainter painter(&newImage);
48  painter.drawImage(QPoint(0, 0), *image);
-
49  *image = newImage;
-
50  if(fastRenderer) {
-
51  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
-
52  }
-
53 }
-
54 
-
55 void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){
-
56  if(fastRenderer) {
-
57  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
-
58  }
-
59  // Used to draw on the widget
-
60  QPainter painter(&imageData);
-
61 
-
62  // Set the current settings for the pen
-
63  painter.setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
-
64 
-
65  // Draw a line from the last registered point to the current
-
66  painter.drawPoint(p1);
-
67  if(fastRenderer) {
-
68  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
-
69  }
-
70 }
-
71 
-
72 void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& penWidth){
-
73  if(fastRenderer) {
-
74  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
-
75  }
-
76  // Used to draw on the widget
-
77  QPainter painter(&imageData);
-
78 
-
79  // Set the current settings for the pen
-
80  painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
-
81  // Draw a line from the last registered point to the current
-
82  painter.drawPoint(p1);
-
83  if(fastRenderer) {
-
84  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
-
85  }
-
86 }
-
87 
-
88 void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth){
-
89  if(fastRenderer) {
-
90  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
-
91  }
-
92  // Used to draw on the widget
-
93  QPainter painter(&imageData);
-
94 
-
95  // Set the current settings for the pen
-
96  painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
-
97 
-
98  // Draw a line from the last registered point to the current
-
99  painter.drawLine(p1, p2);
-
100  if(fastRenderer) {
-
101  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
-
102  }
-
103 }
-
104 
-
105 void IntelliImage::drawPlain(const QColor& color){
-
106  if(fastRenderer) {
-
107  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
-
108  }
-
109  imageData.fill(color);
-
110  if(fastRenderer) {
-
111  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
-
112  }
-
113 }
-
114 
-
115 QColor IntelliImage::getPixelColor(QPoint& point){
-
116  if(fastRenderer) {
-
117  QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32);
-
118  return copy.pixelColor(point);
-
119  }
-
120  return imageData.pixelColor(point);
-
121 }
-
122 
- -
124  return this->imageData;
-
125 }
-
126 
-
127 void IntelliImage::updateRendererSetting(bool fastRendererOn){
-
128  this->fastRenderer = fastRendererOn;
-
129  this->imageData = this->imageData.convertToFormat(fastRenderer ? QImage::Format_Indexed8 : QImage::Format_ARGB32);
-
130 }
+
49  if(fastRenderering) {
+
50  *image = newImage.convertToFormat(QImage::Format_Indexed8);
+
51  }
+
52  else{
+
53  *image = newImage;
+
54  }
+
55 }
+
56 
+
57 void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){
+
58  if(fastRenderering) {
+
59  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
+
60  }
+
61  // Used to draw on the widget
+
62  QPainter painter(&imageData);
+
63 
+
64  // Set the current settings for the pen
+
65  painter.setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+
66 
+
67  // Draw a line from the last registered point to the current
+
68  painter.drawPoint(p1);
+
69  if(fastRenderering) {
+
70  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
71  }
+
72 }
+
73 
+
74 void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& penWidth){
+
75  if(fastRenderering) {
+
76  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
+
77  }
+
78  // Used to draw on the widget
+
79  QPainter painter(&imageData);
+
80 
+
81  // Set the current settings for the pen
+
82  painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+
83  // Draw a line from the last registered point to the current
+
84  painter.drawPoint(p1);
+
85  if(fastRenderering) {
+
86  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
87  }
+
88 }
+
89 
+
90 void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth){
+
91  if(fastRenderering) {
+
92  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
+
93  }
+
94  // Used to draw on the widget
+
95  QPainter painter(&imageData);
+
96 
+
97  // Set the current settings for the pen
+
98  painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+
99 
+
100  // Draw a line from the last registered point to the current
+
101  painter.drawLine(p1, p2);
+
102  if(fastRenderering) {
+
103  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
104  }
+
105 }
+
106 
+
107 void IntelliImage::drawPlain(const QColor& color){
+
108  if(fastRenderering) {
+
109  this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
+
110  }
+
111  imageData.fill(color);
+
112  if(fastRenderering) {
+
113  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
114  }
+
115 }
+
116 
+
117 QColor IntelliImage::getPixelColor(QPoint& point){
+
118  if(fastRenderering) {
+
119  QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32);
+
120  return copy.pixelColor(point);
+
121  }
+
122  return imageData.pixelColor(point);
+
123 }
+
124 
+ +
126  QImage copy = imageData;
+
127  if(fastRenderering) {
+
128  copy = copy.convertToFormat(QImage::Format_ARGB32);
+
129  }
+
130  return copy;
+
131 }
+
132 
+
133 void IntelliImage::setImageData(const QImage& newData){
+
134  imageData = newData;
+
135  if(fastRenderering) {
+
136  this->imageData = imageData.convertToFormat(QImage::Format_Indexed8);
+
137  }
+
138  else {
+
139  this->imageData = imageData.convertToFormat(QImage::Format_ARGB32);
+
140  }
+
141 }
+
142 
+
143 void IntelliImage::updateRendererSetting(bool fastRendererOn){
+
144  this->fastRenderering = fastRendererOn;
+
145  if(fastRenderering) {
+
146  this->imageData = imageData.convertToFormat(QImage::Format_Indexed8);
+
147  }
+
148  else {
+
149  this->imageData = imageData.convertToFormat(QImage::Format_ARGB32);
+
150  }
+
151 }
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
virtual ~IntelliImage()=0
An Abstract Destructor.
-
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
+
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
IntelliImage(int width, int height, bool fastRendererOn)
The Construcor of the IntelliImage. Given the Image dimensions.
Definition: IntelliImage.cpp:5
-
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
-
virtual void updateRendererSetting(bool fastRendererOn)
updateRendererSetting updates the existing image format to the new format.
-
virtual QImage getImageData()
getImageData returns the data of the current image.
+
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
+
virtual void updateRendererSetting(bool fastRendererOn)
updateRendererSetting updates the existing image format to the new format.
+
bool fastRenderering
fastRendering is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
+
virtual QImage getImageData()
getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
void resizeImage(QImage *image, const QSize &newSize)
-
virtual QColor getPixelColor(QPoint &point)
A function that returns the pixelcolor at a certain point.
-
bool fastRenderer
fastRenderer is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
+
virtual void setImageData(const QImage &newData)
setImageData overwrites the old imageData the new imageData.
+
virtual QColor getPixelColor(QPoint &point)
A function that returns the pixelcolor at a certain point.
QImage imageData
The underlying image data.
Definition: IntelliImage.h:37
virtual bool loadImage(const QString &filePath)
A function that loads and sclaes an image to the fitting dimensions.
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
+
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
diff --git a/docs/html/_intelli_image_8h.html b/docs/html/_intelli_image_8h.html index 358f3b6..dc44395 100644 --- a/docs/html/_intelli_image_8h.html +++ b/docs/html/_intelli_image_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliImage.h File Reference +IntelliPhoto: src/Image/IntelliImage.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -114,10 +110,10 @@ Classes diff --git a/docs/html/_intelli_image_8h_source.html b/docs/html/_intelli_image_8h_source.html index ebcec11..1ef7617 100644 --- a/docs/html/_intelli_image_8h_source.html +++ b/docs/html/_intelli_image_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliImage.h Source File +IntelliPhoto: src/Image/IntelliImage.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -121,7 +117,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html','');});
38 
43 
- +
48 
49 public:
56 IntelliImage(int width, int height, bool fastRendererOn);
@@ -139,7 +135,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html','');});
93 
100 virtual QImage getDisplayable(const QSize& displaySize, int alpha) = 0;
101 
-
107 virtual QImage getDisplayable(int alpha=255) = 0;
+
107 virtual QImage getDisplayable(int alpha = 255) = 0;
108 
113 virtual IntelliImage* getDeepCopy() = 0;
114 
@@ -163,29 +159,32 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html','');});
157 
161 virtual QImage getImageData();
162 
-
163 };
-
164 
-
165 #endif
+
167 virtual void setImageData(const QImage& newData);
+
168 
+
169 };
+
170 
+
171 #endif
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
virtual ~IntelliImage()=0
An Abstract Destructor.
-
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
+
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
virtual QImage getDisplayable(const QSize &displaySize, int alpha)=0
A function returning the displayable ImageData in a requested transparence and size.
virtual ImageType getTypeOfImage()
Definition: IntelliImage.h:134
virtual std::vector< QPoint > getPolygonData()
A function that returns the Polygondata if existent.
Definition: IntelliImage.h:130
IntelliImage(int width, int height, bool fastRendererOn)
The Construcor of the IntelliImage. Given the Image dimensions.
Definition: IntelliImage.cpp:5
-
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
-
virtual void updateRendererSetting(bool fastRendererOn)
updateRendererSetting updates the existing image format to the new format.
+
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
+
virtual void updateRendererSetting(bool fastRendererOn)
updateRendererSetting updates the existing image format to the new format.
+
bool fastRenderering
fastRendering is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
- -
virtual QImage getImageData()
getImageData returns the data of the current image.
+ +
virtual QImage getImageData()
getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
void resizeImage(QImage *image, const QSize &newSize)
+
virtual void setImageData(const QImage &newData)
setImageData overwrites the old imageData the new imageData.
ImageType TypeOfImage
The Type, an Image is.
Definition: IntelliImage.h:42
-
virtual QColor getPixelColor(QPoint &point)
A function that returns the pixelcolor at a certain point.
-
bool fastRenderer
fastRenderer is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
- +
virtual QColor getPixelColor(QPoint &point)
A function that returns the pixelcolor at a certain point.
+
QImage imageData
The underlying image data.
Definition: IntelliImage.h:37
virtual bool loadImage(const QString &filePath)
A function that loads and sclaes an image to the fitting dimensions.
An abstract class which manages the basic IntelliImage operations.
Definition: IntelliImage.h:19
@@ -193,15 +192,15 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html','');});
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
ImageType
The Types, which an Image can be.
Definition: IntelliImage.h:26
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
+
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
An abstract function that sets the data of the visible Polygon, if needed.
diff --git a/docs/html/_intelli_input_dialog_8cpp.html b/docs/html/_intelli_input_dialog_8cpp.html new file mode 100644 index 0000000..b686439 --- /dev/null +++ b/docs/html/_intelli_input_dialog_8cpp.html @@ -0,0 +1,105 @@ + + + + + + + +IntelliPhoto: src/GUI/IntelliInputDialog.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.5 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntelliInputDialog.cpp File Reference
+
+
+
#include "IntelliInputDialog.h"
+#include <QFile>
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/docs/html/_intelli_input_dialog_8cpp_source.html b/docs/html/_intelli_input_dialog_8cpp_source.html new file mode 100644 index 0000000..3c4b0db --- /dev/null +++ b/docs/html/_intelli_input_dialog_8cpp_source.html @@ -0,0 +1,193 @@ + + + + + + + +IntelliPhoto: src/GUI/IntelliInputDialog.cpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.5 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntelliInputDialog.cpp
+
+
+Go to the documentation of this file.
1 #include "IntelliInputDialog.h"
+
2 #include <QFile>
+
3 
+
4 
+
5 IntelliInputDialog::IntelliInputDialog(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok)
+
6 {
+
7  this->valueInt = value;
+
8  this->notClosed = ok;
+
9  if(notClosed != nullptr) {
+
10  *notClosed = false;
+
11  }
+
12  createInputBox(Title, Label, value, minValue, maxValue, step);
+
13  createConnections();
+
14  setInputBoxStyle();
+
15  this->exec();
+
16 }
+
17 
+
18 int IntelliInputDialog::getInt(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok){
+
19  IntelliInputDialog dialog(Title, Label, value, minValue, maxValue, step, ok);
+
20  return dialog.valueInt;
+
21 }
+
22 
+
23 void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){
+
24  this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
+
25  if(Title == nullptr) {
+
26  this->setWindowTitle("Input Box");
+
27  }
+
28  else{
+
29  this->setWindowTitle(Title);
+
30  }
+
31  this->Layout = new QGridLayout();
+
32  this->ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+
33 
+
34  this->InputLabel = new QLabel();
+
35  if(Label == nullptr) {
+
36  this->InputLabel->setText("Width:");
+
37  }
+
38  else{
+
39  this->InputLabel->setText(Label);
+
40  }
+
41  this->InputLabel->setFixedSize(Linesize);
+
42 
+
43  this->Input = new QSpinBox();
+
44  this->Input->setFixedSize(Linesize);
+
45  this->Input->setRange(minValue,maxValue);
+
46  this->Input->setSingleStep(step);
+
47  this->Input->setValue(value);
+
48 
+
49  this->okButton = ButtonBox->button(QDialogButtonBox::Ok);
+
50  this->okButton->setFixedSize(Buttonsize);
+
51  this->okButton->setAutoDefault(false);
+
52  this->okButton->setDefault(false);
+
53 
+
54  this->cancelButton = ButtonBox->button(QDialogButtonBox::Cancel);
+
55  this->cancelButton->setFixedSize(Buttonsize);
+
56  this->cancelButton->setAutoDefault(false);
+
57  this->cancelButton->setDefault(false);
+
58 
+
59  Layout->addWidget(InputLabel,1,1,1,1);
+
60  Layout->addWidget(Input,2,1,1,1);
+
61  Layout->addWidget(ButtonBox,3,1,1,1);
+
62  this->setLayout(Layout);
+
63  this->resize(172,94);
+
64  this->show();
+
65 }
+
66 
+
67 void IntelliInputDialog::createConnections(){
+
68  connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe()));
+
69  connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent()));
+
70 }
+
71 
+
72 void IntelliInputDialog::setInputBoxStyle(){
+
73  this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);");
+
74 }
+
75 
+ +
77  this->close();
+
78 }
+
79 
+ +
81  valueInt = QString("%1").arg(Input->value()).toInt();
+
82  if(notClosed != nullptr) {
+
83  *notClosed = true;
+
84  }
+
85  this->close();
+
86 }
+
+
+ + + +
IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
+
static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
+ + + + + diff --git a/docs/html/_intelli_input_dialog_8h.html b/docs/html/_intelli_input_dialog_8h.html new file mode 100644 index 0000000..219dbf3 --- /dev/null +++ b/docs/html/_intelli_input_dialog_8h.html @@ -0,0 +1,112 @@ + + + + + + + +IntelliPhoto: src/GUI/IntelliInputDialog.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.5 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
IntelliInputDialog.h File Reference
+
+
+
#include <QtWidgets>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  IntelliInputDialog
 
+
+
+ + + + diff --git a/docs/html/_intelli_input_dialog_8h_source.html b/docs/html/_intelli_input_dialog_8h_source.html new file mode 100644 index 0000000..b2db70e --- /dev/null +++ b/docs/html/_intelli_input_dialog_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + +IntelliPhoto: src/GUI/IntelliInputDialog.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.5 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntelliInputDialog.h
+
+
+Go to the documentation of this file.
1 #ifndef INTELLIINPUTDIALOG_H
+
2 #define INTELLIINPUTDIALOG_H
+
3 
+
4 #include <QtWidgets>
+
5 
+
6 class IntelliInputDialog : public QDialog
+
7 {
+
8 Q_OBJECT
+
9 public:
+
10 IntelliInputDialog(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
+
11 
+
12 
+
13 static int getInt(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
+
14 
+
15 public slots:
+
16 void slotCloseEvent();
+
17 void slotEingabe();
+
18 
+
19 private:
+
20 void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1);
+
21 void createConnections();
+
22 void setInputBoxStyle();
+
23 
+
24 int valueInt;
+
25 
+
26 QGridLayout* Layout;
+
27 QDialogButtonBox* ButtonBox;
+
28 QEventLoop loop;
+
29 bool* notClosed;
+
30 
+
31 const QSize Linesize = QSize(150,20);
+
32 const QSize Buttonsize = QSize(72,20);
+
33 QLabel* InputLabel;
+
34 QSpinBox* Input;
+
35 QPushButton* okButton;
+
36 QPushButton* cancelButton;
+
37 };
+
38 
+
39 #endif // INTELLIINPUTDIALOG_H
+
+
+ + +
IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
+
static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
+ + + + + diff --git a/docs/html/_intelli_photo_gui_8cpp.html b/docs/html/_intelli_photo_gui_8cpp.html index 44c3c0a..780817b 100644 --- a/docs/html/_intelli_photo_gui_8cpp.html +++ b/docs/html/_intelli_photo_gui_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/GUI/IntelliPhotoGui.cpp File Reference +IntelliPhoto: src/GUI/IntelliPhotoGui.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -99,10 +95,10 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8cpp.html','');}); diff --git a/docs/html/_intelli_photo_gui_8cpp_source.html b/docs/html/_intelli_photo_gui_8cpp_source.html index fab2947..f419c5f 100644 --- a/docs/html/_intelli_photo_gui_8cpp_source.html +++ b/docs/html/_intelli_photo_gui_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/GUI/IntelliPhotoGui.cpp Source File +IntelliPhoto: src/GUI/IntelliPhotoGui.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -107,7 +103,7 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8cpp_source.html','
15  setIntelliStyle();
16  // Size the app
17  resize(600,600);
-
18  showMaximized();
+
18  //showMaximized();
19  setDefaultToolValue();
20 }
21 
@@ -138,706 +134,826 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8cpp_source.html','
46 
47  // If we have a file name load the image and place
48  // it in the paintingArea
-
49  if (!fileName.isEmpty())
+
49  if (!fileName.isEmpty()) {
50  paintingArea->open(fileName);
-
51  }
-
52 }
-
53 
-
54 // Called when the user clicks Save As in the menu
-
55 void IntelliPhotoGui::slotSave(){
-
56  // A QAction represents the action of the user clicking
-
57  QAction*action = qobject_cast<QAction*>(sender());
-
58 
-
59  // Stores the array of bytes of the users data
-
60  QByteArray fileFormat = action->data().toByteArray();
-
61 
-
62  // Pass it to be saved
-
63  saveFile(fileFormat);
-
64 }
-
65 
-
66 // Opens a dialog that allows the user to create a New Layer
-
67 void IntelliPhotoGui::slotCreateNewLayer(){
-
68  // Stores button value
-
69  bool ok1, ok2;
-
70 
-
71  // "New Layer" is the title of the window
-
72  // the next tr is the text to display
-
73  // Define the standard Value, min, max, step and ok button
-
74  int width = QInputDialog::getInt(this, tr("New Layer"),
-
75  tr("Width:"),
-
76  200,1, 500, 1, &ok1);
-
77  int height = QInputDialog::getInt(this, tr("New Layer"),
-
78  tr("Height:"),
-
79  200,1, 500, 1, &ok2);
+
51  UpdateGui();
+
52  }
+
53  }
+
54 }
+
55 
+
56 // Called when the user clicks Save As in the menu
+
57 void IntelliPhotoGui::slotSave(){
+
58  // A QAction represents the action of the user clicking
+
59  QAction*action = qobject_cast<QAction*>(sender());
+
60 
+
61  // Stores the array of bytes of the users data
+
62  QByteArray fileFormat = action->data().toByteArray();
+
63 
+
64  // Pass it to be saved
+
65  saveFile(fileFormat);
+
66 }
+
67 
+
68 // Opens a dialog that allows the user to create a New RASTER Layer
+
69 void IntelliPhotoGui::slotCreateNewRasterLayer(){
+
70  // Stores button value
+
71  bool ok1, ok2;
+
72 
+
73  // "New Layer" is the title of the window
+
74  // the next tr is the text to display
+
75  // Define the standard Value, min, max, step and ok button
+
76  int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
+
77 
+
78  int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
+
79 
80  // Create New Layer
-
81  if (ok1&&ok2)
-
82  {
-
83  int layer = paintingArea->addLayer(width,height,0,0);
-
84  UpdateGui();
-
85  }
-
86 }
-
87 
-
88 // Opens a dialog that allows the user to delete a Layer
-
89 void IntelliPhotoGui::slotDeleteLayer(){
-
90  // Stores button value
-
91  bool ok;
-
92 
-
93  // "delete Layer" is the title of the window
-
94  // the next tr is the text to display
-
95  // Define the standard Value, min, max, step and ok button
-
96  int layerNumber = QInputDialog::getInt(this, tr("delete Layer"),
-
97  tr("Number:"),
-
98  paintingArea->getNumberOfActiveLayer(),0, 500, 1, &ok);
+
81  if (ok1&&ok2) {
+
82  paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::RASTERIMAGE);
+
83  UpdateGui();
+
84  }
+
85 }
+
86 
+
87 // Opens a dialog that allows the user to create a New SHAPED Layer
+
88 void IntelliPhotoGui::slotCreateNewShapedLayer(){
+
89  // Stores button value
+
90  bool ok1, ok2;
+
91 
+
92  // "New Layer" is the title of the window
+
93  // the next tr is the text to display
+
94  // Define the standard Value, min, max, step and ok button
+
95  int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
+
96 
+
97  int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
+
98 
99  // Create New Layer
-
100  if (ok) {
-
101  paintingArea->deleteLayer(layerNumber);
+
100  if (ok1&&ok2) {
+
101  paintingArea->addLayer(width, height, 0, 0, IntelliImage::ImageType::SHAPEDIMAGE);
102  UpdateGui();
103  }
104 }
105 
-
106 void IntelliPhotoGui::slotSetActiveAlpha(){
-
107  // Stores button value
-
108  bool ok1, ok2;
-
109 
-
110  // "Layer to set on" is the title of the window
+
106 // Opens a dialog that allows the user to delete a Layer
+
107 void IntelliPhotoGui::slotDeleteLayer(){
+
108 
+
109  bool ok1;
+
110  // "delete Layer" is the title of the window
111  // the next tr is the text to display
112  // Define the standard Value, min, max, step and ok button
-
113  int layer = QInputDialog::getInt(this, tr("Layer to set on"),
-
114  tr("Layer:"),
-
115  -1,-1,100,1, &ok1);
-
116  // "New Alpha" is the title of the window
-
117  int alpha = QInputDialog::getInt(this, tr("New Alpha"),
-
118  tr("Alpha:"),
-
119  255,0, 255, 1, &ok2);
-
120  if (ok1&&ok2)
-
121  {
-
122  paintingArea->setLayerAlpha(layer,alpha);
-
123  UpdateGui();
-
124  }
-
125 }
-
126 
-
127 void IntelliPhotoGui::slotPositionMoveUp(){
-
128  paintingArea->movePositionActive(0,-20);
-
129  update();
-
130 }
-
131 
-
132 void IntelliPhotoGui::slotPositionMoveDown(){
-
133  paintingArea->movePositionActive(0,20);
-
134  update();
-
135 }
-
136 
-
137 void IntelliPhotoGui::slotPositionMoveLeft(){
-
138  paintingArea->movePositionActive(-20,0);
-
139  update();
-
140 }
-
141 
-
142 void IntelliPhotoGui::slotPositionMoveRight(){
-
143  paintingArea->movePositionActive(20,0);
-
144  update();
-
145 }
-
146 
-
147 void IntelliPhotoGui::slotMoveLayerUp(){
-
148  paintingArea->moveActiveLayer(1);
-
149  update();
-
150 }
-
151 
-
152 void IntelliPhotoGui::slotMoveLayerDown(){
-
153  paintingArea->moveActiveLayer(-1);
-
154  update();
+
113  int layerNumber = IntelliInputDialog::getInt("Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
114 
+
115  // Create New Layer
+
116  if(ok1) {
+
117  paintingArea->deleteLayer(layerNumber - 1);
+
118  UpdateGui();
+
119  }
+
120 }
+
121 
+
122 void IntelliPhotoGui::slotSetActiveAlpha(){
+
123 
+
124  bool ok1, ok2;
+
125  // "Layer to set on" is the title of the window
+
126  // the next tr is the text to display
+
127  // Define the standard Value, min, max, step and ok button
+
128 
+
129  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
130 
+
131  // "New Alpha" is the title of the window
+
132  int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2);
+
133 
+
134  if (ok1&&ok2)
+
135  {
+
136  paintingArea->setLayerAlpha(layer - 1,alpha);
+
137  UpdateGui();
+
138  }
+
139 }
+
140 
+
141 void IntelliPhotoGui::slotSetPolygon(){
+
142  // Stores button value
+
143  bool ok1;
+
144 
+
145  // "Layer to set on" is the title of the window
+
146  // the next tr is the text to display
+
147  // Define the standard Value, min, max, step and ok button
+
148  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
149 
+
150  if (ok1)
+
151  {
+
152  paintingArea->setPolygon(layer - 1);
+
153  UpdateGui();
+
154  }
155 }
156 
-
157 void IntelliPhotoGui::slotClearActiveLayer(){
-
158  // Stores button value
-
159  bool ok1, ok2, ok3, ok4;
-
160 
-
161  // "Red Input" is the title of the window
-
162  // the next tr is the text to display
-
163  // Define the standard Value, min, max, step and ok button
-
164  int red = QInputDialog::getInt(this, tr("Red Input"),
-
165  tr("Red:"),
-
166  255,0, 255,1, &ok1);
-
167  // "Green Input" is the title of the window
-
168  int green = QInputDialog::getInt(this, tr("Green Input"),
-
169  tr("Green:"),
-
170  255,0, 255, 1, &ok2);
-
171  // "Blue Input" is the title of the window
-
172  int blue = QInputDialog::getInt(this, tr("Blue Input"),
-
173  tr("Blue:"),
-
174  255,0, 255, 1, &ok3);
-
175  // "Alpha Input" is the title of the window
-
176  int alpha = QInputDialog::getInt(this, tr("Alpha Input"),
-
177  tr("Alpha:"),
-
178  255,0, 255, 1, &ok4);
-
179  if (ok1&&ok2&&ok3&&ok4)
-
180  {
-
181  paintingArea->floodFill(red, green, blue, alpha);
-
182  UpdateGui();
-
183  }
-
184 }
-
185 
-
186 void IntelliPhotoGui::slotSetActiveLayer(){
-
187  // Stores button value
+
157 void IntelliPhotoGui::slotPositionMoveUp(){
+
158  paintingArea->movePositionActive(0,-20);
+
159  update();
+
160 }
+
161 
+
162 void IntelliPhotoGui::slotPositionMoveDown(){
+
163  paintingArea->movePositionActive(0,20);
+
164  update();
+
165 }
+
166 
+
167 void IntelliPhotoGui::slotPositionMoveLeft(){
+
168  paintingArea->movePositionActive(-20,0);
+
169  update();
+
170 }
+
171 
+
172 void IntelliPhotoGui::slotPositionMoveRight(){
+
173  paintingArea->movePositionActive(20,0);
+
174  update();
+
175 }
+
176 
+
177 void IntelliPhotoGui::slotMoveLayerUp(){
+
178  paintingArea->moveActiveLayer(1);
+
179  update();
+
180 }
+
181 
+
182 void IntelliPhotoGui::slotMoveLayerDown(){
+
183  paintingArea->moveActiveLayer(-1);
+
184  update();
+
185 }
+
186 
+
187 void IntelliPhotoGui::slotSetActiveLayer(){
188  bool ok1;
-
189 
-
190  // "Layer to set on" is the title of the window
-
191  // the next tr is the text to display
-
192  // Define the standard Value, min, max, step and ok button
-
193  int layer = QInputDialog::getInt(this, tr("Layer to set on"),
-
194  tr("Layer:"),
-
195  -1,0,255,1, &ok1);
-
196  if (ok1)
-
197  {
-
198  paintingArea->setLayerActive(layer);
-
199  UpdateGui();
-
200  }
-
201 }
-
202 
-
203 void IntelliPhotoGui::slotSetFirstColor(){
-
204  paintingArea->colorPickerSetFirstColor();
-
205  UpdateGui();
-
206 }
-
207 
-
208 void IntelliPhotoGui::slotSetSecondColor(){
-
209  paintingArea->colorPickerSetSecondColor();
-
210  UpdateGui();
-
211 }
-
212 
-
213 void IntelliPhotoGui::slotSwapColor(){
-
214  paintingArea->colorPickerSwapColors();
-
215  UpdateGui();
-
216 }
-
217 
-
218 void IntelliPhotoGui::slotCreatePenTool(){
-
219  PenButton->setChecked(true);
-
220  paintingArea->createPenTool();
-
221 }
-
222 
-
223 void IntelliPhotoGui::slotCreatePlainTool(){
-
224  PlainButton->setChecked(true);
-
225  paintingArea->createPlainTool();
-
226 }
-
227 
-
228 void IntelliPhotoGui::slotCreateLineTool(){
-
229  LineButton->setChecked(true);
-
230  paintingArea->createLineTool();
-
231 }
-
232 
-
233 void IntelliPhotoGui::slotCreateRectangleTool(){
-
234  RectangleButton->setChecked(true);
-
235  paintingArea->createRectangleTool();
-
236 }
-
237 
-
238 void IntelliPhotoGui::slotCreateCircleTool(){
-
239  CircleButton->setChecked(true);
-
240  paintingArea->createCircleTool();
-
241 }
-
242 
-
243 void IntelliPhotoGui::slotCreatePolygonTool(){
-
244  PolygonButton->setChecked(true);
-
245  paintingArea->createPolygonTool();
-
246 }
-
247 
-
248 void IntelliPhotoGui::slotCreateFloodFillTool(){
-
249  FloodFillButton->setChecked(true);
-
250  paintingArea->createFloodFillTool();
-
251 }
-
252 
-
253 // Open an about dialog
-
254 void IntelliPhotoGui::slotAboutDialog(){
-
255  // Window title and text to display
-
256  QMessageBox::about(this, tr("About Painting"),
-
257  tr("<p><b>IntelliPhoto</b>Pretty basic editor.</p>"));
+
189  // "Layer to set on" is the title of the window
+
190  // the next tr is the text to display
+
191  // Define the standard Value, min, max, step and ok button
+
192  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
193 
+
194  if(ok1) {
+
195  paintingArea->setLayerActive(layer - 1);
+
196  UpdateGui();
+
197  }
+
198 }
+
199 
+
200 void IntelliPhotoGui::slotUpdateRenderSettingsOn(){
+
201  paintingArea->setRenderSettings(true);
+
202  UpdateGui();
+
203 }
+
204 
+
205 void IntelliPhotoGui::slotUpdateRenderSettingsOff(){
+
206  paintingArea->setRenderSettings(false);
+
207  UpdateGui();
+
208 }
+
209 
+
210 void IntelliPhotoGui::slotSetFirstColor(){
+
211  paintingArea->colorPickerSetFirstColor();
+
212  UpdateGui();
+
213 }
+
214 
+
215 void IntelliPhotoGui::slotSetSecondColor(){
+
216  paintingArea->colorPickerSetSecondColor();
+
217  UpdateGui();
+
218 }
+
219 
+
220 void IntelliPhotoGui::slotSwapColor(){
+
221  paintingArea->colorPickerSwapColors();
+
222  UpdateGui();
+
223 }
+
224 
+
225 void IntelliPhotoGui::slotCreatePenTool(){
+
226  PenButton->setChecked(true);
+
227  paintingArea->createPenTool();
+
228 }
+
229 
+
230 void IntelliPhotoGui::slotCreatePlainTool(){
+
231  PlainButton->setChecked(true);
+
232  paintingArea->createPlainTool();
+
233 }
+
234 
+
235 void IntelliPhotoGui::slotCreateLineTool(){
+
236  LineButton->setChecked(true);
+
237  paintingArea->createLineTool();
+
238 }
+
239 
+
240 void IntelliPhotoGui::slotCreateRectangleTool(){
+
241  RectangleButton->setChecked(true);
+
242  paintingArea->createRectangleTool();
+
243 }
+
244 
+
245 void IntelliPhotoGui::slotCreateCircleTool(){
+
246  CircleButton->setChecked(true);
+
247  paintingArea->createCircleTool();
+
248 }
+
249 
+
250 void IntelliPhotoGui::slotCreatePolygonTool(){
+
251  PolygonButton->setChecked(true);
+
252  paintingArea->createPolygonTool();
+
253 }
+
254 
+
255 void IntelliPhotoGui::slotCreateFloodFillTool(){
+
256  FloodFillButton->setChecked(true);
+
257  paintingArea->createFloodFillTool();
258 }
259 
-
260 void IntelliPhotoGui::slotEnterPressed(){
-
261  QString string = EditLineWidth->text();
-
262  if(string.toInt() > 50) {
-
263  EditLineWidth->setText("50");
-
264  }
-
265  paintingArea->Toolsettings.setLineWidth(string.toInt());
-
266  string = EditLineInnerAlpha->text();
-
267  if(string.toInt() > 255) {
-
268  EditLineInnerAlpha->setText("255");
-
269  }
-
270  paintingArea->Toolsettings.setInnerAlpha(string.toInt());
-
271 }
-
272 
-
273 void IntelliPhotoGui::slotResetTools(){
-
274  CircleButton->setChecked(false);
-
275  FloodFillButton->setChecked(false);
-
276  LineButton->setChecked(false);
-
277  PenButton->setChecked(false);
-
278  PlainButton->setChecked(false);
-
279  PolygonButton->setChecked(false);
-
280  RectangleButton->setChecked(false);
-
281 }
-
282 
-
283 // Define menu actions that call functions
-
284 void IntelliPhotoGui::createActions(){
-
285  // Get a list of the supported file formats
-
286  // QImageWriter is used to write images to files
-
287  foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
-
288  QString text = tr("%1...").arg(QString(format).toUpper());
+
260 // Open an about dialog
+
261 void IntelliPhotoGui::slotAboutDialog(){
+
262  // Window title and text to display
+
263  QMessageBox::about(this, tr("About Painting"),
+
264  tr("<p><b>IntelliPhoto - </b>A Pretty basic editor.</p> <br>Developed by Team 7."));
+
265 }
+
266 
+
267 void IntelliPhotoGui::slotEnterPressed(){
+
268  QString string = EditLineWidth->text();
+
269  if(string.toInt() > 50) {
+
270  EditLineWidth->setText("50");
+
271  }
+
272  paintingArea->Toolsettings.setLineWidth(string.toInt());
+
273  string = EditLineInnerAlpha->text();
+
274  if(string.toInt() > 255) {
+
275  EditLineInnerAlpha->setText("255");
+
276  }
+
277  paintingArea->Toolsettings.setInnerAlpha(string.toInt());
+
278 }
+
279 
+
280 void IntelliPhotoGui::slotResetTools(){
+
281  CircleButton->setChecked(false);
+
282  FloodFillButton->setChecked(false);
+
283  LineButton->setChecked(false);
+
284  PenButton->setChecked(false);
+
285  PlainButton->setChecked(false);
+
286  PolygonButton->setChecked(false);
+
287  RectangleButton->setChecked(false);
+
288 }
289 
-
290  // Create an action for each file format
-
291  QAction*action = new QAction(text, this);
-
292 
-
293  // Set an action for each file format
-
294  action->setData(format);
-
295 
-
296  // When clicked call IntelliPhotoGui::save()
-
297  connect(action, SIGNAL(triggered()), this, SLOT(slotSave()));
+
290 void IntelliPhotoGui::slotSetWidth(){
+
291  bool ok1;
+
292  int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1);
+
293  if(ok1) {
+
294  paintingArea->Toolsettings.setLineWidth(temp);
+
295  EditLineWidth->setText(QString("%1").arg(temp));
+
296  }
+
297 }
298 
-
299  // Attach each file format option menu item to Save As
-
300  actionSaveAs.append(action);
-
301  }
-
302 
-
303  //set exporter to actions
-
304  QAction*pngSaveAction = new QAction("PNG-8", this);
-
305  pngSaveAction->setData("PNG");
-
306  // When clicked call IntelliPhotoGui::save()
-
307  connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave()));
-
308  // Attach each PNG in save Menu
-
309  actionSaveAs.append(pngSaveAction);
-
310 
-
311  // Create exit action and tie to IntelliPhotoGui::close()
-
312  actionExit = new QAction(tr("&Exit"), this);
-
313  actionExit->setShortcuts(QKeySequence::Quit);
-
314  connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
-
315 
-
316  actionOpen = new QAction(tr("&Open"), this);
-
317  actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
-
318  connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()));
-
319 
-
320  // Create New Layer action and tie to IntelliPhotoGui::newLayer()
-
321  actionCreateNewLayer = new QAction(tr("&New Layer..."), this);
-
322  actionCreateNewLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
-
323  connect(actionCreateNewLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewLayer()));
-
324 
-
325  // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer()
-
326  actionDeleteLayer = new QAction(tr("&Delete Layer..."), this);
-
327  connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer()));
-
328 
-
329  actionSetActiveLayer = new QAction(tr("&set Active"), this);
-
330  connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer()));
-
331 
-
332  actionSetActiveAlpha = new QAction(tr("&set Alpha"), this);
-
333  connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha()));
-
334 
-
335  actionMovePositionUp = new QAction(tr("&move Up"), this);
-
336  actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up));
-
337  connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp()));
-
338 
-
339  actionMovePositionDown = new QAction(tr("&move Down"), this);
-
340  actionMovePositionDown->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down));
-
341  connect(actionMovePositionDown, SIGNAL(triggered()), this, SLOT(slotPositionMoveDown()));
-
342 
-
343  actionMovePositionLeft = new QAction(tr("&move Left"), this);
-
344  actionMovePositionLeft->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left));
-
345  connect(actionMovePositionLeft, SIGNAL(triggered()), this, SLOT(slotPositionMoveLeft()));
-
346 
-
347  actionMovePositionRight = new QAction(tr("&move Right"), this);
-
348  actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right));
-
349  connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight()));
+
299 void IntelliPhotoGui::slotSetInnerAlpha(){
+
300  bool ok1;
+
301  int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1);
+
302  if(ok1) {
+
303  paintingArea->Toolsettings.setInnerAlpha(temp);
+
304  EditLineInnerAlpha->setText(QString("%1").arg(temp));
+
305  }
+
306 }
+
307 
+
308 // Define menu actions that call functions
+
309 void IntelliPhotoGui::createActions(){
+
310  // Get a list of the supported file formats
+
311  // QImageWriter is used to write images to files
+
312  foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
+
313  QString text = tr("%1...").arg(QString(format).toUpper());
+
314 
+
315  // Create an action for each file format
+
316  QAction*action = new QAction(text, this);
+
317 
+
318  // Set an action for each file format
+
319  action->setData(format);
+
320 
+
321  // When clicked call IntelliPhotoGui::save()
+
322  connect(action, SIGNAL(triggered()), this, SLOT(slotSave()));
+
323 
+
324  // Attach each file format option menu item to Save As
+
325  actionSaveAs.append(action);
+
326  }
+
327 
+
328  //set exporter to actions
+
329  QAction*pngSaveAction = new QAction("PNG-8", this);
+
330  pngSaveAction->setData("PNG");
+
331  // When clicked call IntelliPhotoGui::save()
+
332  connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave()));
+
333  // Attach each PNG in save Menu
+
334  actionSaveAs.append(pngSaveAction);
+
335  pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S));
+
336 
+
337  // Create exit action and tie to IntelliPhotoGui::close()
+
338  actionExit = new QAction(tr("&Exit"), this);
+
339  actionExit->setShortcuts(QKeySequence::Quit);
+
340  connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
+
341 
+
342  actionOpen = new QAction(tr("&Open"), this);
+
343  actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
+
344  connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()));
+
345 
+
346  // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer()
+
347  actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this);
+
348  actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
+
349  connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer()));
350 
-
351  actionMoveLayerUp = new QAction(tr("&move Layer Up"), this);
-
352  actionMoveLayerUp->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Up));
-
353  connect(actionMoveLayerUp, SIGNAL(triggered()), this, SLOT(slotMoveLayerUp()));
-
354 
-
355  actionMoveLayerDown= new QAction(tr("&move Layer Down"), this);
-
356  actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down));
-
357  connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown()));
-
358 
-
359  //Create Color Actions here
-
360  actionColorPickerFirstColor = new QAction(tr("&Main"), this);
-
361  connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor()));
-
362  connect(FirstColorButton, SIGNAL(clicked()), this, SLOT(slotSetFirstColor()));
-
363 
-
364  actionColorPickerSecondColor = new QAction(tr("&Secondary"), this);
-
365  connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor()));
-
366  connect(SecondColorButton, SIGNAL(clicked()), this, SLOT(slotSetSecondColor()));
-
367 
-
368  actionColorSwap = new QAction(tr("&Switch"), this);
-
369  actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S));
-
370  connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor()));
-
371  connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor()));
-
372 
-
373  //Create Tool actions down here
-
374  actionCreatePlainTool = new QAction(tr("&Plain"), this);
-
375  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
376  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool()));
+
351 
+
352  // Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer()
+
353  actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this);
+
354  actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT));
+
355  connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer()));
+
356 
+
357  // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer()
+
358  actionDeleteLayer = new QAction(tr("&Delete Layer..."), this);
+
359  actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D));
+
360  connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer()));
+
361 
+
362  actionSetActiveLayer = new QAction(tr("&set Active"), this);
+
363  actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));
+
364  connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer()));
+
365 
+
366  actionSetActiveAlpha = new QAction(tr("&set Alpha"), this);
+
367  actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A));
+
368  connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha()));
+
369 
+
370  actionSetPolygon = new QAction(tr("&set new Polygondata"), this);
+
371  actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P));
+
372  connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon()));
+
373 
+
374  actionMovePositionUp = new QAction(tr("&move Up"), this);
+
375  actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up));
+
376  connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp()));
377 
-
378 
-
379  actionCreatePenTool = new QAction(tr("&Pen"),this);
-
380  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
381  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool()));
-
382 
-
383  actionCreateLineTool = new QAction(tr("&Line"), this);
-
384  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
385  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool()));
-
386 
-
387  actionCreateCircleTool = new QAction(tr("&Circle"), this);
-
388  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
389  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool()));
-
390 
-
391  actionCreateRectangleTool = new QAction(tr("&Rectangle"), this);
-
392  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
393  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool()));
-
394 
-
395  actionCreatePolygonTool = new QAction(tr("&Polygon"), this);
-
396  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
397  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool()));
-
398 
-
399  actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this);
-
400  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
401  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool()));
+
378  actionMovePositionDown = new QAction(tr("&move Down"), this);
+
379  actionMovePositionDown->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down));
+
380  connect(actionMovePositionDown, SIGNAL(triggered()), this, SLOT(slotPositionMoveDown()));
+
381 
+
382  actionMovePositionLeft = new QAction(tr("&move Left"), this);
+
383  actionMovePositionLeft->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left));
+
384  connect(actionMovePositionLeft, SIGNAL(triggered()), this, SLOT(slotPositionMoveLeft()));
+
385 
+
386  actionMovePositionRight = new QAction(tr("&move Right"), this);
+
387  actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right));
+
388  connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight()));
+
389 
+
390  actionMoveLayerUp = new QAction(tr("&move Layer Up"), this);
+
391  actionMoveLayerUp->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Up));
+
392  connect(actionMoveLayerUp, SIGNAL(triggered()), this, SLOT(slotMoveLayerUp()));
+
393 
+
394  actionMoveLayerDown = new QAction(tr("&move Layer Down"), this);
+
395  actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down));
+
396  connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown()));
+
397 
+
398  //Create Update RenderSettings Actions here
+
399  actionUpdateRenderSettingsOn = new QAction(tr("&On"), this);
+
400  actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A));
+
401  connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn()));
402 
-
403  // Create about action and tie to IntelliPhotoGui::about()
-
404  actionAboutDialog = new QAction(tr("&About"), this);
-
405  connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog()));
+
403  actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this);
+
404  actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D));
+
405  connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff()));
406 
-
407  // Create about Qt action and tie to IntelliPhotoGui::aboutQt()
-
408  actionAboutQtDialog = new QAction(tr("About &Qt"), this);
-
409  connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-
410 
-
411  connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
-
412  connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
-
413 
-
414  connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
415  connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool()));
-
416 
-
417  connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
418  connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool()));
-
419 
-
420  connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
421  connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool()));
+
407  //Create Color Actions here
+
408  actionColorPickerFirstColor = new QAction(tr("&Main"), this);
+
409  actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N));
+
410  connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor()));
+
411  connect(FirstColorButton, SIGNAL(clicked()), this, SLOT(slotSetFirstColor()));
+
412 
+
413  actionColorPickerSecondColor = new QAction(tr("&Secondary"), this);
+
414  actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M));
+
415  connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor()));
+
416  connect(SecondColorButton, SIGNAL(clicked()), this, SLOT(slotSetSecondColor()));
+
417 
+
418  actionColorSwap = new QAction(tr("&Switch"), this);
+
419  actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S));
+
420  connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor()));
+
421  connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor()));
422 
-
423  connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
424  connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool()));
-
425 
-
426  connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
427  connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool()));
+
423  //Create Tool actions down here
+
424  actionCreatePlainTool = new QAction(tr("&Plain"), this);
+
425  actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P));
+
426  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
427  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool()));
428 
-
429  connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
430  connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool()));
-
431 
-
432  connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
433  connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool()));
-
434 }
-
435 
-
436 // Create the menubar
-
437 void IntelliPhotoGui::createMenus(){
-
438  // Create Save As option and the list of file types
-
439  saveAsMenu = new QMenu(tr("&Save As"), this);
-
440  foreach (QAction *action, actionSaveAs)
-
441  saveAsMenu->addAction(action);
-
442 
-
443 
-
444  // Attach all actions to File
-
445  fileMenu = new QMenu(tr("&File"), this);
-
446  fileMenu->addAction(actionOpen);
-
447  fileMenu->addMenu(saveAsMenu);
-
448  fileMenu->addSeparator();
-
449  fileMenu->addAction(actionExit);
-
450 
-
451  // Attach all actions to Options
-
452  optionMenu = new QMenu(tr("&Options"), this);
-
453  optionMenu->addAction(actionSetActiveLayer);
-
454  optionMenu->addAction(actionSetActiveAlpha);
-
455  optionMenu->addAction(actionMovePositionUp);
-
456  optionMenu->addAction(actionMovePositionDown);
-
457  optionMenu->addAction(actionMovePositionLeft);
-
458  optionMenu->addAction(actionMovePositionRight);
-
459  optionMenu->addAction(actionMoveLayerUp);
-
460  optionMenu->addAction(actionMoveLayerDown);
-
461 
-
462  // Attach all actions to Layer
-
463  layerMenu = new QMenu(tr("&Layer"), this);
-
464  layerMenu->addAction(actionCreateNewLayer);
-
465  layerMenu->addAction(actionDeleteLayer);
-
466 
-
467  //Attach all Color Options
-
468  colorMenu = new QMenu(tr("&Color"), this);
-
469  colorMenu->addAction(actionColorPickerFirstColor);
-
470  colorMenu->addAction(actionColorPickerSecondColor);
-
471  colorMenu->addAction(actionColorSwap);
+
429 
+
430  actionCreatePenTool = new QAction(tr("&Pen"),this);
+
431  actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S));
+
432  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
433  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool()));
+
434 
+
435  actionCreateLineTool = new QAction(tr("&Line"), this);
+
436  actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_L));
+
437  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
438  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool()));
+
439 
+
440  actionCreateCircleTool = new QAction(tr("&Circle"), this);
+
441  actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_C));
+
442  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
443  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool()));
+
444 
+
445  actionCreateRectangleTool = new QAction(tr("&Rectangle"), this);
+
446  actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_R));
+
447  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
448  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool()));
+
449 
+
450  actionCreatePolygonTool = new QAction(tr("&Polygon"), this);
+
451  actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V));
+
452  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
453  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool()));
+
454 
+
455  actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this);
+
456  actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_F));
+
457  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
+
458  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool()));
+
459 
+
460  // Create about action and tie to IntelliPhotoGui::about()
+
461  actionAboutDialog = new QAction(tr("&About"), this);
+
462  actionAboutDialog->setShortcut(Qt::Key_F2);
+
463  connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog()));
+
464 
+
465  // Create about Qt action and tie to IntelliPhotoGui::aboutQt()
+
466  actionAboutQtDialog = new QAction(tr("About &Qt"), this);
+
467  actionAboutQtDialog->setShortcut(Qt::Key_F3);
+
468  connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
+
469 
+
470  connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
+
471  connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
472 
-
473  //Attach all Tool Options
-
474  toolMenu = new QMenu(tr("&Tools"), this);
-
475  toolMenu->addAction(actionCreateCircleTool);
-
476  toolMenu->addAction(actionCreateFloodFillTool);
-
477  toolMenu->addAction(actionCreateLineTool);
-
478  toolMenu->addAction(actionCreatePenTool);
-
479  toolMenu->addAction(actionCreatePlainTool);
-
480  toolMenu->addAction(actionCreatePolygonTool);
-
481  toolMenu->addAction(actionCreateRectangleTool);
-
482  toolMenu->addSeparator();
-
483  toolMenu->addMenu(colorMenu);
+
473  connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
474  connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool()));
+
475 
+
476  connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
477  connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool()));
+
478 
+
479  connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
480  connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool()));
+
481 
+
482  connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
483  connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool()));
484 
-
485  // Attach all actions to Help
-
486  helpMenu = new QMenu(tr("&Help"), this);
-
487  helpMenu->addAction(actionAboutDialog);
-
488  helpMenu->addAction(actionAboutQtDialog);
-
489 
-
490  // Add menu items to the menubar
-
491  menuBar()->addMenu(fileMenu);
-
492  menuBar()->addMenu(optionMenu);
-
493  menuBar()->addMenu(layerMenu);
-
494  menuBar()->addMenu(toolMenu);
-
495  menuBar()->addMenu(helpMenu);
-
496 }
+
485  connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
486  connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool()));
+
487 
+
488  connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
489  connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool()));
+
490 
+
491  connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
+
492  connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool()));
+
493 
+
494  actionSetWidth = new QAction(tr("&Set Width"),this);
+
495  actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W));
+
496  connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth()));
497 
-
498 void IntelliPhotoGui::createGui(){
-
499  // create a central widget to work on
-
500  centralGuiWidget = new QWidget(this);
-
501  setCentralWidget(centralGuiWidget);
+
498  actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this);
+
499  actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A));
+
500  connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha()));
+
501 }
502 
-
503  // create the grid for the layout
-
504  mainLayout = new QGridLayout(centralGuiWidget);
-
505  centralGuiWidget->setLayout(mainLayout);
-
506 
-
507  // create Gui elements
-
508  paintingArea = new PaintingArea();
-
509  paintingArea->DumpyGui = this;
-
510 
-
511  p = QPixmap(":/Icons/Buttons/icons/circle-tool.svg");
-
512  CircleButton = new QPushButton();
-
513  CircleButton->setFixedSize(Buttonsize);
-
514  CircleButton->setIcon(p);
-
515  CircleButton->setIconSize(Buttonsize);
-
516  CircleButton->setCheckable(true);
-
517 
-
518  p = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg");
-
519  FloodFillButton = new QPushButton();
-
520  FloodFillButton->setFixedSize(Buttonsize);
-
521  FloodFillButton->setIcon(p);
-
522  FloodFillButton->setIconSize(Buttonsize);
-
523  FloodFillButton->setCheckable(true);
-
524 
-
525  p = QPixmap(":/Icons/Buttons/icons/icon.png");
-
526  LineButton = new QPushButton();
-
527  LineButton->setFixedSize(Buttonsize);
-
528  LineButton->setIcon(p);
-
529  LineButton->setIconSize(Buttonsize);
-
530  LineButton->setCheckable(true);
-
531 
-
532  p = QPixmap(":/Icons/Buttons/icons/pen-tool.svg");
-
533  PenButton = new QPushButton();
-
534  PenButton->setFixedSize(Buttonsize);
-
535  PenButton->setIcon(p);
-
536  PenButton->setIconSize(Buttonsize);
-
537  PenButton->setCheckable(true);
-
538 
-
539  p = QPixmap(":/Icons/Buttons/icons/icon.png");
-
540  PlainButton = new QPushButton();
-
541  PlainButton->setFixedSize(Buttonsize);
-
542  PlainButton->setIcon(p);
-
543  PlainButton->setIconSize(Buttonsize);
-
544  PlainButton->setCheckable(true);
-
545 
-
546  p = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg");
-
547  PolygonButton = new QPushButton();
-
548  PolygonButton->setFixedSize(Buttonsize);
-
549  PolygonButton->setIcon(p);
-
550  PolygonButton->setIconSize(Buttonsize);
-
551  PolygonButton->setCheckable(true);
-
552 
-
553  p = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg");
-
554  RectangleButton = new QPushButton();
-
555  RectangleButton->setFixedSize(Buttonsize);
-
556  RectangleButton->setIcon(p);
-
557  RectangleButton->setIconSize(Buttonsize);
-
558  RectangleButton->setCheckable(true);
-
559 
-
560  WidthLine = new QLabel();
-
561  WidthLine->setText("Width");
-
562  WidthLine->setFixedSize(Buttonsize.width(),Buttonsize.height()/3);
+
503 // Create the menubar
+
504 void IntelliPhotoGui::createMenus(){
+
505  // Create Save As option and the list of file types
+
506  saveAsMenu = new QMenu(tr("&Save As"), this);
+
507  foreach (QAction * action, actionSaveAs)
+
508  saveAsMenu->addAction(action);
+
509 
+
510  // Attach all actions to File
+
511  fileMenu = new QMenu(tr("&File"), this);
+
512  fileMenu->addAction(actionOpen);
+
513  fileMenu->addMenu(saveAsMenu);
+
514  fileMenu->addSeparator();
+
515  fileMenu->addAction(actionExit);
+
516 
+
517  //Attach all actions to Render Settings
+
518  renderMenu = new QMenu(tr("&Fast Renderer"), this);
+
519  renderMenu->addAction(actionUpdateRenderSettingsOn);
+
520  renderMenu->addAction(actionUpdateRenderSettingsOff);
+
521 
+
522  //Attach all Layer Creations to Menu
+
523  layerCreationMenu = new QMenu(tr("&Create new Layer"), this);
+
524  layerCreationMenu->addAction(actionCreateNewRasterLayer);
+
525  layerCreationMenu->addAction(actionCreateNewShapedLayer);
+
526  // Attach all actions to Layer
+
527  layerMenu = new QMenu(tr("&Layer"), this);
+
528  layerMenu->addMenu(layerCreationMenu);
+
529  layerMenu->addSeparator();
+
530  layerMenu->addAction(actionSetActiveAlpha);
+
531  layerMenu->addAction(actionSetActiveLayer);
+
532  layerMenu->addAction(actionSetPolygon);
+
533  layerMenu->addSeparator();
+
534  layerMenu->addAction(actionMovePositionUp);
+
535  layerMenu->addAction(actionMovePositionDown);
+
536  layerMenu->addAction(actionMovePositionLeft);
+
537  layerMenu->addAction(actionMovePositionRight);
+
538  layerMenu->addAction(actionMoveLayerUp);
+
539  layerMenu->addAction(actionMoveLayerDown);
+
540  layerMenu->addSeparator();
+
541  layerMenu->addAction(actionDeleteLayer);
+
542 
+
543  //Attach all Color Options
+
544  colorMenu = new QMenu(tr("&Color"), this);
+
545  colorMenu->addAction(actionColorPickerFirstColor);
+
546  colorMenu->addAction(actionColorPickerSecondColor);
+
547  colorMenu->addAction(actionColorSwap);
+
548 
+
549  //Attach all Tool Creation Actions
+
550  toolCreationMenu = new QMenu(tr("&Drawingtools"), this);
+
551  toolCreationMenu->addAction(actionCreateCircleTool);
+
552  toolCreationMenu->addAction(actionCreateFloodFillTool);
+
553  toolCreationMenu->addAction(actionCreateLineTool);
+
554  toolCreationMenu->addAction(actionCreatePenTool);
+
555  toolCreationMenu->addAction(actionCreatePlainTool);
+
556  toolCreationMenu->addAction(actionCreatePolygonTool);
+
557  toolCreationMenu->addAction(actionCreateRectangleTool);
+
558 
+
559  //Attach all Tool Setting Actions
+
560  toolSettingsMenu = new QMenu(tr("&Toolsettings"), this);
+
561  toolSettingsMenu->addAction(actionSetWidth);
+
562  toolSettingsMenu->addAction(actionSetInnerAlpha);
563 
-
564  EditLineWidth = new QLineEdit();
-
565  EditLineWidth->setFixedSize(Buttonsize.width(),Buttonsize.height()/3);
-
566  EditLineWidth->setText("5");
-
567  ValidatorLineWidth = new QIntValidator();
-
568  ValidatorLineWidth->setTop(99);
-
569  ValidatorLineWidth->setBottom(1);
-
570  EditLineWidth->setValidator(ValidatorLineWidth);
-
571 
-
572  innerAlphaLine = new QLabel();
-
573  innerAlphaLine->setText("Inner Alpha");
-
574  innerAlphaLine->setFixedSize(Buttonsize.width(),Buttonsize.height()/3);
-
575 
-
576  EditLineInnerAlpha = new QLineEdit();
-
577  EditLineInnerAlpha->setFixedSize(Buttonsize.width(),Buttonsize.height()/3);
-
578  EditLineInnerAlpha->setText("255");
-
579  ValidatorInnerAlpha = new QIntValidator();
-
580  ValidatorInnerAlpha->setTop(999);
-
581  ValidatorInnerAlpha->setBottom(0);
-
582  EditLineInnerAlpha->setValidator(ValidatorInnerAlpha);
-
583 
-
584  FirstColorButton = new QPushButton();
-
585  FirstColorButton->setFixedSize(Buttonsize/2);
-
586 
-
587  SecondColorButton = new QPushButton();
-
588  SecondColorButton->setFixedSize(Buttonsize/2);
-
589 
-
590  p = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png");
-
591  SwitchColorButton = new QPushButton();
-
592  SwitchColorButton->setFixedSize(Buttonsize.width(),Buttonsize.height()/2);
-
593  SwitchColorButton->setIcon(p);
-
594  SwitchColorButton->setIconSize(QSize(Buttonsize.width(),Buttonsize.height()/2));
-
595 
-
596  ActiveLayerLine = new QLabel();
-
597  QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer());
-
598  ActiveLayerLine->setText(string);
-
599  ActiveLayerLine->setFixedSize(Buttonsize.width()+10,Buttonsize.height()/3);
-
600 
-
601  p = p.fromImage(paintingArea->getImageOfActiveLayer()->getImageData());
-
602 
-
603  ActiveLayerImageButton = new QPushButton();
-
604  ActiveLayerImageButton->setFixedSize(Buttonsize);
-
605  ActiveLayerImageButton->setIcon(p);
-
606  ActiveLayerImageButton->setIconSize(Buttonsize);
-
607 
-
608  // set gui elements
-
609 
-
610  mainLayout->addWidget(paintingArea,1,1,20,1);
-
611  mainLayout->addWidget(CircleButton,1,2,1,2);
-
612  mainLayout->addWidget(FloodFillButton,2,2,1,2);
-
613  mainLayout->addWidget(LineButton,3,2,1,2);
-
614  mainLayout->addWidget(PenButton,4,2,1,2);
-
615  mainLayout->addWidget(PlainButton,5,2,1,2);
-
616  mainLayout->addWidget(PolygonButton,6,2,1,2);
-
617  mainLayout->addWidget(RectangleButton,7,2,1,2);
-
618  mainLayout->addWidget(WidthLine,8,2,1,2);
-
619  mainLayout->addWidget(EditLineWidth,9,2,1,2);
-
620  mainLayout->addWidget(innerAlphaLine,10,2,1,2);
-
621  mainLayout->addWidget(EditLineInnerAlpha,11,2,1,2);
-
622  mainLayout->addWidget(FirstColorButton,12,2,1,1);
-
623  mainLayout->addWidget(SecondColorButton,12,3,1,1);
-
624  mainLayout->addWidget(SwitchColorButton,13,2,1,2);
-
625  mainLayout->addWidget(ActiveLayerLine,14,2,1,2);
-
626  mainLayout->addWidget(ActiveLayerImageButton,15,2,1,2);
-
627 }
-
628 
-
629 void IntelliPhotoGui::setIntelliStyle(){
-
630  // Set the title
-
631  setWindowTitle("IntelliPhoto Prototype");
-
632  // Set style sheet
-
633  this->setStyleSheet("background-color:rgb(64,64,64)");
-
634  this->centralGuiWidget->setStyleSheet("color:rgb(255,255,255)");
-
635  this->menuBar()->setStyleSheet("color:rgb(255,255,255)");
-
636  QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
-
637  FirstColorButton->setStyleSheet(string);
-
638  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
-
639  SecondColorButton->setStyleSheet(string);
-
640 }
-
641 
-
642 bool IntelliPhotoGui::maybeSave(){
-
643  // Check for changes since last save
-
644 
-
645  // TODO insert variable for modified status here to make an save exit message
-
646  if (false) {
-
647  QMessageBox::StandardButton ret;
-
648 
-
649  // Painting is the title of the window
-
650  // Add text and the buttons
-
651  ret = QMessageBox::warning(this, tr("Painting"),
-
652  tr("The image has been modified.\n"
-
653  "Do you want to save your changes?"),
-
654  QMessageBox::Save | QMessageBox::Discard
-
655  | QMessageBox::Cancel);
-
656 
-
657  // If save button clicked call for file to be saved
-
658  if (ret == QMessageBox::Save) {
-
659  return saveFile("png");
-
660 
-
661  // If cancel do nothing
-
662  } else if (ret == QMessageBox::Cancel) {
-
663  return false;
-
664  }
-
665  }
-
666  return true;
-
667 }
-
668 
-
669 bool IntelliPhotoGui::saveFile(const QByteArray &fileFormat){
-
670  // Define path, name and default file type
-
671  QString initialPath = QDir::currentPath() + "/untitled." + fileFormat;
-
672 
-
673  // Get selected file from dialog
-
674  // Add the proper file formats and extensions
-
675  QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
-
676  initialPath,
-
677  tr("%1 Files (*.%2);;All Files (*)")
-
678  .arg(QString::fromLatin1(fileFormat.toUpper()))
-
679  .arg(QString::fromLatin1(fileFormat)), nullptr, QFileDialog::DontUseNativeDialog);
+
564  //Attach all Tool Options
+
565  toolMenu = new QMenu(tr("&Tools"), this);
+
566  toolMenu->addMenu(toolCreationMenu);
+
567  toolMenu->addMenu(toolSettingsMenu);
+
568  toolMenu->addSeparator();
+
569  toolMenu->addMenu(colorMenu);
+
570 
+
571  // Attach all actions to Options
+
572  optionMenu = new QMenu(tr("&Options"), this);
+
573  optionMenu->addMenu(layerMenu);
+
574  optionMenu->addMenu(toolMenu);
+
575  optionMenu->addSeparator();
+
576  optionMenu->addMenu(renderMenu);
+
577 
+
578  // Attach all actions to Help
+
579  helpMenu = new QMenu(tr("&Help"), this);
+
580  helpMenu->addAction(actionAboutDialog);
+
581  helpMenu->addAction(actionAboutQtDialog);
+
582 
+
583  // Add menu items to the menubar
+
584  menuBar()->addMenu(fileMenu);
+
585  menuBar()->addMenu(optionMenu);
+
586  menuBar()->addMenu(helpMenu);
+
587 }
+
588 
+
589 void IntelliPhotoGui::createGui(){
+
590  // create a central widget to work on
+
591  centralGuiWidget = new QWidget(this);
+
592  setCentralWidget(centralGuiWidget);
+
593 
+
594  // create the grid for the layout
+
595  mainLayout = new QGridLayout(centralGuiWidget);
+
596  centralGuiWidget->setLayout(mainLayout);
+
597 
+
598  // create Gui elements
+
599  paintingArea = new PaintingArea();
+
600  paintingArea->DummyGui = this;
+
601 
+
602  preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg");
+
603  CircleButton = new QPushButton();
+
604  CircleButton->setFixedSize(Buttonsize);
+
605  CircleButton->setIcon(preview);
+
606  CircleButton->setIconSize(Buttonsize);
+
607  CircleButton->setCheckable(true);
+
608 
+
609  preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg");
+
610  FloodFillButton = new QPushButton();
+
611  FloodFillButton->setFixedSize(Buttonsize);
+
612  FloodFillButton->setIcon(preview);
+
613  FloodFillButton->setIconSize(Buttonsize);
+
614  FloodFillButton->setCheckable(true);
+
615 
+
616  preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg");
+
617  LineButton = new QPushButton();
+
618  LineButton->setFixedSize(Buttonsize);
+
619  LineButton->setIcon(preview);
+
620  LineButton->setIconSize(Buttonsize);
+
621  LineButton->setCheckable(true);
+
622 
+
623  preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg");
+
624  PenButton = new QPushButton();
+
625  PenButton->setFixedSize(Buttonsize);
+
626  PenButton->setIcon(preview);
+
627  PenButton->setIconSize(Buttonsize);
+
628  PenButton->setCheckable(true);
+
629 
+
630  preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg");
+
631  PlainButton = new QPushButton();
+
632  PlainButton->setFixedSize(Buttonsize);
+
633  PlainButton->setIcon(preview);
+
634  PlainButton->setIconSize(Buttonsize);
+
635  PlainButton->setCheckable(true);
+
636 
+
637  preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg");
+
638  PolygonButton = new QPushButton();
+
639  PolygonButton->setFixedSize(Buttonsize);
+
640  PolygonButton->setIcon(preview);
+
641  PolygonButton->setIconSize(Buttonsize);
+
642  PolygonButton->setCheckable(true);
+
643 
+
644  preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg");
+
645  RectangleButton = new QPushButton();
+
646  RectangleButton->setFixedSize(Buttonsize);
+
647  RectangleButton->setIcon(preview);
+
648  RectangleButton->setIconSize(Buttonsize);
+
649  RectangleButton->setCheckable(true);
+
650 
+
651  WidthLine = new QLabel();
+
652  WidthLine->setText("Width");
+
653  WidthLine->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
654 
+
655  EditLineWidth = new QLineEdit();
+
656  EditLineWidth->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
657  EditLineWidth->setText("5");
+
658  ValidatorLineWidth = new QIntValidator();
+
659  ValidatorLineWidth->setTop(99);
+
660  ValidatorLineWidth->setBottom(1);
+
661  EditLineWidth->setValidator(ValidatorLineWidth);
+
662 
+
663  innerAlphaLine = new QLabel();
+
664  innerAlphaLine->setText("Inner Alpha");
+
665  innerAlphaLine->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
666 
+
667  EditLineInnerAlpha = new QLineEdit();
+
668  EditLineInnerAlpha->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
669  EditLineInnerAlpha->setText("255");
+
670  ValidatorInnerAlpha = new QIntValidator();
+
671  ValidatorInnerAlpha->setTop(999);
+
672  ValidatorInnerAlpha->setBottom(0);
+
673  EditLineInnerAlpha->setValidator(ValidatorInnerAlpha);
+
674 
+
675  FirstColorButton = new QPushButton();
+
676  FirstColorButton->setFixedSize(Buttonsize);
+
677 
+
678  SecondColorButton = new QPushButton();
+
679  SecondColorButton->setFixedSize(Buttonsize);
680 
-
681  // If no file do nothing
-
682  if (fileName.isEmpty()) {
-
683  return false;
-
684  } else {
-
685  // Call for the file to be saved
-
686  return paintingArea->save(fileName, fileFormat.constData());
-
687  }
-
688 }
-
689 
-
690 void IntelliPhotoGui::setDefaultToolValue(){
-
691  slotEnterPressed();
-
692 }
-
693 
- -
695  QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer());
-
696  ActiveLayerLine->setText(string);
-
697  p = p.fromImage(paintingArea->getImageOfActiveLayer()->getImageData());
-
698  ActiveLayerImageButton->setIcon(p);
-
699  ActiveLayerImageButton->setIconSize(Buttonsize);
+
681  preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png");
+
682  SwitchColorButton = new QPushButton();
+
683  SwitchColorButton->setFixedSize(Buttonsize.width() * 2,Buttonsize.height());
+
684  SwitchColorButton->setIcon(preview);
+
685  SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height()));
+
686 
+
687  ActiveLayerLine = new QLabel();
+
688  QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1);
+
689  ActiveLayerLine->setText(string);
+
690  ActiveLayerLine->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3);
+
691 
+
692  IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
+
693  if(activePicture) {
+
694  preview = preview.fromImage(activePicture->getImageData());
+
695  }else{
+
696  QImage tmp(1,1,QImage::Format_ARGB32);
+
697  tmp.fill(Qt::transparent);
+
698  preview = preview.fromImage(tmp);
+
699  }
700 
-
701  string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
-
702  FirstColorButton->setStyleSheet(string);
-
703  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
-
704  SecondColorButton->setStyleSheet(string);
-
705 }
+
701  ActiveLayerImageLabel = new QLabel();
+
702  ActiveLayerImageLabel->setFixedSize(Buttonsize * 2);
+
703  ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
+
704 
+
705  // set gui elements
+
706  mainLayout->addWidget(paintingArea,1,1,20,1);
+
707  mainLayout->addWidget(CircleButton,1,2,1,1);
+
708  mainLayout->addWidget(FloodFillButton,1,3,1,1);
+
709  mainLayout->addWidget(LineButton,2,2,1,1);
+
710  mainLayout->addWidget(PenButton,2,3,1,1);
+
711  mainLayout->addWidget(PlainButton,3,2,1,1);
+
712  mainLayout->addWidget(PolygonButton,3,3,1,1);
+
713  mainLayout->addWidget(RectangleButton,4,2,1,1);
+
714  mainLayout->addWidget(WidthLine,5,2,1,2);
+
715  mainLayout->addWidget(EditLineWidth,6,2,1,2);
+
716  mainLayout->addWidget(innerAlphaLine,7,2,1,2);
+
717  mainLayout->addWidget(EditLineInnerAlpha,8,2,1,2);
+
718  mainLayout->addWidget(FirstColorButton,9,2,1,1);
+
719  mainLayout->addWidget(SecondColorButton,9,3,1,1);
+
720  mainLayout->addWidget(SwitchColorButton,10,2,1,2);
+
721  mainLayout->addWidget(ActiveLayerLine,11,2,1,2);
+
722  mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2);
+
723  mainLayout->setHorizontalSpacing(0);
+
724 }
+
725 
+
726 void IntelliPhotoGui::setIntelliStyle(){
+
727  // Set the title
+
728  setWindowTitle("IntelliPhoto Prototype");
+
729  // Set style sheet
+
730  this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);");
+
731 
+
732  QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
+
733  FirstColorButton->setStyleSheet(string);
+
734  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
+
735  SecondColorButton->setStyleSheet(string);
+
736 }
+
737 
+
738 bool IntelliPhotoGui::maybeSave(){
+
739  // Check for changes since last save
+
740 
+
741  // TODO insert variable for modified status here to make an save exit message
+
742  if (false) {
+
743  QMessageBox::StandardButton ret;
+
744 
+
745  // Painting is the title of the window
+
746  // Add text and the buttons
+
747  ret = QMessageBox::warning(this, tr("Painting"),
+
748  tr("The image has been modified.\n"
+
749  "Do you want to save your changes?"),
+
750  QMessageBox::Save | QMessageBox::Discard
+
751  | QMessageBox::Cancel);
+
752 
+
753  // If save button clicked call for file to be saved
+
754  if (ret == QMessageBox::Save) {
+
755  return saveFile("png");
+
756 
+
757  // If cancel do nothing
+
758  } else if (ret == QMessageBox::Cancel) {
+
759  return false;
+
760  }
+
761  }
+
762  return true;
+
763 }
+
764 
+
765 bool IntelliPhotoGui::saveFile(const QByteArray &fileFormat){
+
766  // Define path, name and default file type
+
767  QString initialPath = QDir::currentPath() + "/untitled." + fileFormat;
+
768 
+
769  // Get selected file from dialog
+
770  // Add the proper file formats and extensions
+
771  QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
+
772  initialPath,
+
773  tr("%1 Files (*.%2);;All Files (*)")
+
774  .arg(QString::fromLatin1(fileFormat.toUpper()))
+
775  .arg(QString::fromLatin1(fileFormat)), nullptr, QFileDialog::DontUseNativeDialog);
+
776 
+
777  // If no file do nothing
+
778  if (fileName.isEmpty()) {
+
779  return false;
+
780  } else {
+
781  // Call for the file to be saved
+
782  return paintingArea->save(fileName, fileFormat.constData());
+
783  }
+
784 }
+
785 
+
786 void IntelliPhotoGui::setDefaultToolValue(){
+
787  slotEnterPressed();
+
788 }
+
789 
+ +
791  if(value < 1) {
+
792  value = 1;
+
793  }else if(value > 50) {
+
794  value = 50;
+
795  }
+
796  EditLineWidth->setText(QString("%1").arg(value));
+
797 }
+
798 
+ +
800  QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1);
+
801  ActiveLayerLine->setText(string);
+
802 
+
803  IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
+
804  if(activePicture) {
+
805  preview = preview.fromImage(activePicture->getImageData());
+
806  }else{
+
807  QImage tmp(1,1,QImage::Format_ARGB32);
+
808  tmp.fill(Qt::transparent);
+
809  preview = preview.fromImage(tmp);
+
810  }
+
811  ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
+
812 
+
813  string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
+
814  FirstColorButton->setStyleSheet(string);
+
815  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
+
816  SecondColorButton->setStyleSheet(string);
+
817 }
-
void createCircleTool()
-
IntelliImage * getImageOfActiveLayer()
-
void createRectangleTool()
- -
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
-
void setLayerAlpha(int idx, int alpha)
The setAlphaOfLayer method sets the alpha value of a specific layer.
-
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
-
void floodFill(int r, int g, int b, int a)
The floodFill method fills a the active layer with a given color.
+
void createCircleTool()
+
void setRenderSettings(bool isFastRenderingOn)
setRenderSettings updates all Images to the new Rendersetting.
+
IntelliImage * getImageOfActiveLayer()
+
void createRectangleTool()
+ +
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
+
void setLayerAlpha(int idx, int alpha)
The setAlphaOfLayer method sets the alpha value of a specific layer.
+
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
+ +
void deleteLayer(int idx, bool isTool=false)
The deleteLayer method removes a layer at a given idx.
QColor getSecondColor()
A function to read the secondary selected color.
-
void deleteLayer(int idx)
The deleteLayer method removes a layer at a given idx.
-
void createPlainTool()
+
void createPlainTool()
IntelliPhotoGui()
The IntelliPhotoGui method is the constructor and is used to create a new instance of the main progra...
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
void createPenTool()
-
void createLineTool()
-
void colorPickerSetSecondColor()
The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
-
void colorPickerSetFirstColor()
The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
+
void createPenTool()
+
void createLineTool()
+
void colorPickerSetSecondColor()
The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
+
void colorPickerSetFirstColor()
The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
+
static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
-
int getNumberOfActiveLayer()
-
void closeEvent(QCloseEvent *event) override
-
virtual QImage getImageData()
getImageData returns the data of the current image.
-
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
-
void createPolygonTool()
+
int getNumberOfActiveLayer()
+ +
void closeEvent(QCloseEvent *event) override
The closeEvent function handles closing events.
+
virtual QImage getImageData()
getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
+
void setToolWidth(int value)
+
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
+
void createPolygonTool()
void moveActiveLayer(int idx)
The moveActiveLayer moves the active layer to a specific position in the layer stack.
-
IntelliColorPicker colorPicker
Definition: PaintingArea.h:175
+
IntelliColorPicker colorPicker
Definition: PaintingArea.h:182
QColor getFirstColor()
A function to read the primary selected color.
-
void createFloodFillTool()
- -
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:174
-
void colorPickerSwapColors()
The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
-
void movePositionActive(int x, int y)
The movePositionActive method moves the active layer to certain position.
- -
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
+
void createFloodFillTool()
+
void setInnerAlpha(int innerAlpha)
+ + +
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:181
+
void setPolygon(int idx)
setPolygon is used for setting polygondata, it only works on RASTER images
+
void setLineWidth(int LineWidth)
+
void colorPickerSwapColors()
The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
+
void movePositionActive(int x, int y)
The movePositionActive method moves the active layer to certain position.
+
An abstract class which manages the basic IntelliImage operations.
Definition: IntelliImage.h:19
+
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
diff --git a/docs/html/_intelli_photo_gui_8h.html b/docs/html/_intelli_photo_gui_8h.html index e64e9bf..f25a4c2 100644 --- a/docs/html/_intelli_photo_gui_8h.html +++ b/docs/html/_intelli_photo_gui_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/GUI/IntelliPhotoGui.h File Reference +IntelliPhoto: src/GUI/IntelliPhotoGui.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -101,13 +97,14 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8h.html','');}); #include <QTextEdit>
#include <QLabel>
#include <QLineEdit>
+#include "IntelliInputDialog.h"

Go to the source code of this file.

- +

Classes

class  IntelliPhotoGui
 The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program. More...
 The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program. More...
 
@@ -115,10 +112,10 @@ Classes diff --git a/docs/html/_intelli_photo_gui_8h_source.html b/docs/html/_intelli_photo_gui_8h_source.html index 2646100..bf41cbc 100644 --- a/docs/html/_intelli_photo_gui_8h_source.html +++ b/docs/html/_intelli_photo_gui_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/GUI/IntelliPhotoGui.h Source File +IntelliPhoto: src/GUI/IntelliPhotoGui.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -103,177 +99,194 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8h_source.html','')
11 #include <QLabel>
12 #include <QLineEdit>
13 
-
14 // PaintingArea used to paint the image
-
15 class PaintingArea;
+
14 #include "IntelliInputDialog.h"
+
15 
16 
-
17 class IntelliTool;
-
18 
-
19 class IntelliColorPicker;
-
20 
-
24 class IntelliPhotoGui : public QMainWindow {
-
25 // Declares our class as a QObject which is the base class
-
26 // for all Qt objects
-
27 // QObjects handle events
+
17 // PaintingArea used to paint the image
+
18 class PaintingArea;
+
19 
+
20 class IntelliTool;
+
21 
+
22 class IntelliColorPicker;
+
23 
+
27 class IntelliPhotoGui : public QMainWindow {
28 Q_OBJECT
29 public:
34 
35 void UpdateGui();
36 
-
37 protected:
-
38 // Function used to close an event
-
39 void closeEvent(QCloseEvent*event) override;
-
40 
-
41 private slots:
-
42 // meta slots here (need further )
-
43 void slotOpen();
-
44 void slotSave();
-
45 
-
46 // layer slots here
-
47 void slotCreateNewLayer();
-
48 void slotDeleteLayer();
-
49 void slotClearActiveLayer();
-
50 void slotSetActiveLayer();
-
51 void slotSetActiveAlpha();
-
52 void slotPositionMoveUp();
-
53 void slotPositionMoveDown();
-
54 void slotPositionMoveLeft();
-
55 void slotPositionMoveRight();
-
56 void slotMoveLayerUp();
-
57 void slotMoveLayerDown();
-
58 
-
59 // color Picker slots here
-
60 void slotSetFirstColor();
-
61 void slotSetSecondColor();
-
62 void slotSwapColor();
-
63 
-
64 // tool slots here
-
65 void slotCreatePenTool();
-
66 void slotCreatePlainTool();
-
67 void slotCreateLineTool();
-
68 void slotCreateRectangleTool();
-
69 void slotCreateCircleTool();
-
70 void slotCreatePolygonTool();
-
71 void slotCreateFloodFillTool();
-
72 
-
73 // slots for dialogs
-
74 void slotAboutDialog();
-
75 
-
76 void slotEnterPressed();
+
37 void setToolWidth(int value);
+
38 
+
39 protected:
+
43 void closeEvent(QCloseEvent*event) override;
+
44 
+
45 private slots:
+
46 void slotOpen();
+
47 void slotSave();
+
48 
+
49 // layer slots here
+
50 void slotCreateNewRasterLayer();
+
51 void slotCreateNewShapedLayer();
+
52 void slotDeleteLayer();
+
53 void slotSetActiveLayer();
+
54 void slotSetActiveAlpha();
+
55 void slotSetPolygon();
+
56 void slotPositionMoveUp();
+
57 void slotPositionMoveDown();
+
58 void slotPositionMoveLeft();
+
59 void slotPositionMoveRight();
+
60 void slotMoveLayerUp();
+
61 void slotMoveLayerDown();
+
62 
+
63 void slotUpdateRenderSettingsOn();
+
64 void slotUpdateRenderSettingsOff();
+
65 
+
66 void slotSetFirstColor();
+
67 void slotSetSecondColor();
+
68 void slotSwapColor();
+
69 
+
70 void slotCreatePenTool();
+
71 void slotCreatePlainTool();
+
72 void slotCreateLineTool();
+
73 void slotCreateRectangleTool();
+
74 void slotCreateCircleTool();
+
75 void slotCreatePolygonTool();
+
76 void slotCreateFloodFillTool();
77 
-
78 void slotResetTools();
+
78 void slotAboutDialog();
79 
-
80 private:
-
81 // Will tie user actions to functions
-
82 void createActions();
-
83 void createMenus();
-
84 // setup GUI elements
-
85 void createGui();
-
86 // set style of the GUI
-
87 void setIntelliStyle();
-
88 
-
89 // Will check if changes have occurred since last save
-
90 bool maybeSave();
-
91 // Opens the Save dialog and saves
-
92 bool saveFile(const QByteArray &fileFormat);
+
80 void slotEnterPressed();
+
81 
+
82 void slotSetWidth();
+
83 void slotSetInnerAlpha();
+
84 
+
85 void slotResetTools();
+
86 
+
87 private:
+
88 void createActions();
+
89 void createMenus();
+
90 void createGui();
+
91 // Set the style of the GUI
+
92 void setIntelliStyle();
93 
-
94 void setDefaultToolValue();
-
95 
-
96 // What we'll draw on
-
97 PaintingArea* paintingArea;
+
94 // Will check if changes have occurred since last save
+
95 bool maybeSave();
+
96 // Opens the Save dialog and saves
+
97 bool saveFile(const QByteArray &fileFormat);
98 
-
99 const QSize Buttonsize = QSize(70,70);
-
100 QPixmap p;
-
101 QPushButton* CircleButton;
-
102 QPushButton* FloodFillButton;
-
103 QPushButton* LineButton;
-
104 QPushButton* PenButton;
-
105 QPushButton* PlainButton;
-
106 QPushButton* PolygonButton;
-
107 QPushButton* RectangleButton;
-
108 QLabel* WidthLine;
-
109 QLabel* innerAlphaLine;
-
110 QLineEdit* EditLineWidth;
-
111 QLineEdit* EditLineInnerAlpha;
-
112 QIntValidator* ValidatorLineWidth;
-
113 QIntValidator* ValidatorInnerAlpha;
-
114 
-
115 QPushButton* FirstColorButton;
-
116 QPushButton* SecondColorButton;
-
117 QPushButton* SwitchColorButton;
-
118 
-
119 QLabel* ActiveLayerLine;
-
120 QPushButton* ActiveLayerImageButton;
-
121 
-
122 // The menu widgets
-
123 QMenu*saveAsMenu;
-
124 QMenu*fileMenu;
-
125 QMenu*optionMenu;
-
126 QMenu*layerMenu;
-
127 QMenu*colorMenu;
-
128 QMenu*toolMenu;
-
129 QMenu*helpMenu;
-
130 
-
131 // All the actions that can occur
-
132 // meta image actions (need further modularisation)
-
133 QAction*actionOpen;
-
134 QAction*actionExit;
-
135 
-
136 // color Picker actions
-
137 QAction*actionColorPickerFirstColor;
-
138 QAction*actionColorPickerSecondColor;
-
139 QAction*actionColorSwap;
-
140 
-
141 // tool actions
-
142 QAction*actionCreatePenTool;
-
143 QAction*actionCreatePlainTool;
-
144 QAction*actionCreateLineTool;
-
145 QAction*actionCreateRectangleTool;
-
146 QAction*actionCreateCircleTool;
-
147 QAction*actionCreatePolygonTool;
-
148 QAction*actionCreateFloodFillTool;
-
149 
-
150 // dialog actions
-
151 QAction*actionAboutDialog;
-
152 QAction*actionAboutQtDialog;
+
99 void setDefaultToolValue();
+
100 
+
101 // What we'll draw on
+
102 PaintingArea* paintingArea;
+
103 
+
104 const QSize Buttonsize = QSize(35,35);
+
105 QPixmap preview;
+
106 QPushButton* CircleButton;
+
107 QPushButton* FloodFillButton;
+
108 QPushButton* LineButton;
+
109 QPushButton* PenButton;
+
110 QPushButton* PlainButton;
+
111 QPushButton* PolygonButton;
+
112 QPushButton* RectangleButton;
+
113 QLabel* WidthLine;
+
114 QLabel* innerAlphaLine;
+
115 QLineEdit* EditLineWidth;
+
116 QLineEdit* EditLineInnerAlpha;
+
117 QIntValidator* ValidatorLineWidth;
+
118 QIntValidator* ValidatorInnerAlpha;
+
119 
+
120 QPushButton* FirstColorButton;
+
121 QPushButton* SecondColorButton;
+
122 QPushButton* SwitchColorButton;
+
123 
+
124 QLabel* ActiveLayerLine;
+
125 QLabel* ActiveLayerImageLabel;
+
126 
+
127 // The menu widgets
+
128 QMenu*saveAsMenu;
+
129 QMenu*fileMenu;
+
130 QMenu*renderMenu;
+
131 QMenu*optionMenu;
+
132 QMenu*layerCreationMenu;
+
133 QMenu*layerMenu;
+
134 QMenu*colorMenu;
+
135 QMenu*toolCreationMenu;
+
136 QMenu*toolSettingsMenu;
+
137 QMenu*toolMenu;
+
138 QMenu*helpMenu;
+
139 
+
140 // All the actions that can occur
+
141 // meta image actions (need further modularisation)
+
142 QAction*actionOpen;
+
143 QAction*actionExit;
+
144 
+
145 //Rendersetting actions
+
146 QAction*actionUpdateRenderSettingsOn;
+
147 QAction*actionUpdateRenderSettingsOff;
+
148 
+
149 // color Picker actions
+
150 QAction*actionColorPickerFirstColor;
+
151 QAction*actionColorPickerSecondColor;
+
152 QAction*actionColorSwap;
153 
-
154 // layer change actions
-
155 QAction*actionCreateNewLayer;
-
156 QAction*actionDeleteLayer;
-
157 QAction* actionSetActiveLayer;
-
158 QAction* actionSetActiveAlpha;
-
159 QAction* actionMovePositionUp;
-
160 QAction* actionMovePositionDown;
-
161 QAction* actionMovePositionLeft;
-
162 QAction* actionMovePositionRight;
-
163 QAction* actionMoveLayerUp;
-
164 QAction* actionMoveLayerDown;
-
165 
-
166 // Actions tied to specific file formats
-
167 QList<QAction*> actionSaveAs;
-
168 
-
169 // main GUI elements
-
170 QWidget* centralGuiWidget;
-
171 QGridLayout* mainLayout;
-
172 };
-
173 
-
174 #endif
+
154 // tool actions
+
155 QAction*actionCreatePenTool;
+
156 QAction*actionCreatePlainTool;
+
157 QAction*actionCreateLineTool;
+
158 QAction*actionCreateRectangleTool;
+
159 QAction*actionCreateCircleTool;
+
160 QAction*actionCreatePolygonTool;
+
161 QAction*actionCreateFloodFillTool;
+
162 
+
163 // dialog actions
+
164 QAction*actionAboutDialog;
+
165 QAction*actionAboutQtDialog;
+
166 
+
167 // layer change actions
+
168 QAction* actionCreateNewRasterLayer;
+
169 QAction* actionCreateNewShapedLayer;
+
170 QAction* actionDeleteLayer;
+
171 QAction* actionSetActiveLayer;
+
172 QAction* actionSetActiveAlpha;
+
173 QAction* actionSetPolygon;
+
174 QAction* actionMovePositionUp;
+
175 QAction* actionMovePositionDown;
+
176 QAction* actionMovePositionLeft;
+
177 QAction* actionMovePositionRight;
+
178 QAction* actionMoveLayerUp;
+
179 QAction* actionMoveLayerDown;
+
180 
+
181 // Actions tied to specific file formats
+
182 QList<QAction*> actionSaveAs;
+
183 
+
184 QAction* actionSetWidth;
+
185 QAction* actionSetInnerAlpha;
+
186 
+
187 // main GUI elements
+
188 QWidget* centralGuiWidget;
+
189 QGridLayout* mainLayout;
+
190 };
+
191 
+
192 #endif
-
The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program.
+ +
The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
IntelliPhotoGui()
The IntelliPhotoGui method is the constructor and is used to create a new instance of the main progra...
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
-
void closeEvent(QCloseEvent *event) override
+
void closeEvent(QCloseEvent *event) override
The closeEvent function handles closing events.
+
void setToolWidth(int value)
The IntelliColorPicker manages the selected colors for one whole project.
- + diff --git a/docs/html/_intelli_raster_image_8cpp.html b/docs/html/_intelli_raster_image_8cpp.html index fce04ab..00fea0b 100644 --- a/docs/html/_intelli_raster_image_8cpp.html +++ b/docs/html/_intelli_raster_image_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliRasterImage.cpp File Reference +IntelliPhoto: src/Image/IntelliRasterImage.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -101,10 +97,10 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp.html','');} diff --git a/docs/html/_intelli_raster_image_8cpp_source.html b/docs/html/_intelli_raster_image_8cpp_source.html index 0ce5b69..2551964 100644 --- a/docs/html/_intelli_raster_image_8cpp_source.html +++ b/docs/html/_intelli_raster_image_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliRasterImage.cpp Source File +IntelliPhoto: src/Image/IntelliRasterImage.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -98,7 +94,7 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html
6 IntelliRasterImage::IntelliRasterImage(int width, int height, bool fastRendererOn)
7  : IntelliImage(width, height, fastRendererOn){
-
9  this->fastRenderer = fastRendererOn;
+
9  this->fastRenderering = fastRendererOn;
10 }
11 
@@ -122,7 +118,7 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html
30 
31 QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){
32  QImage copy = imageData;
-
33  if(fastRenderer) {
+
33  if(fastRenderering) {
34  copy = copy.convertToFormat(QImage::Format_ARGB32);
35  }
36  for(int y = 0; y<copy.height(); y++) {
@@ -132,14 +128,14 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html
40  copy.setPixelColor(x,y, clr);
41  }
42  }
-
43  if(fastRenderer) {
+
43  if(fastRenderering) {
44  copy = copy.convertToFormat(QImage::Format_Indexed8);
45  }
46  return copy.scaled(displaySize,Qt::IgnoreAspectRatio);
47 }
48 
49 void IntelliRasterImage::setPolygon(const std::vector<QPoint>& polygonData){
-
50  qDebug() << "Raster Image has no polygon data " << polygonData.size() <<"\n";
+
50  qDebug() << "Raster Image has no polygon data " << polygonData.size() << "\n";
51  return;
52 }
@@ -147,10 +143,10 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html
virtual ~IntelliRasterImage() override
An Destructor.
IntelliRasterImage(int width, int height, bool fastRendererOn)
The Construcor of the IntelliRasterImage. Given the Image dimensions.
+
bool fastRenderering
fastRendering is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
virtual QImage getDisplayable(const QSize &displaySize, int alpha) override
A function returning the displayable ImageData in a requested transparence and size.
ImageType TypeOfImage
The Type, an Image is.
Definition: IntelliImage.h:42
-
bool fastRenderer
fastRenderer is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
- +
QImage imageData
The underlying image data.
Definition: IntelliImage.h:37
An abstract class which manages the basic IntelliImage operations.
Definition: IntelliImage.h:19
virtual IntelliImage * getDeepCopy() override
A function that copys all that returns a [allocated] Image.
@@ -160,10 +156,10 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html diff --git a/docs/html/_intelli_raster_image_8h.html b/docs/html/_intelli_raster_image_8h.html index 8875fba..bbb081a 100644 --- a/docs/html/_intelli_raster_image_8h.html +++ b/docs/html/_intelli_raster_image_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliRasterImage.h File Reference +IntelliPhoto: src/Image/IntelliRasterImage.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -107,10 +103,10 @@ Classes diff --git a/docs/html/_intelli_raster_image_8h_source.html b/docs/html/_intelli_raster_image_8h_source.html index 768a7de..674da4f 100644 --- a/docs/html/_intelli_raster_image_8h_source.html +++ b/docs/html/_intelli_raster_image_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliRasterImage.h Source File +IntelliPhoto: src/Image/IntelliRasterImage.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -106,7 +102,7 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8h_source.html',
29 
36 virtual QImage getDisplayable(const QSize& displaySize,int alpha) override;
37 
-
43 virtual QImage getDisplayable(int alpha=255) override;
+
43 virtual QImage getDisplayable(int alpha = 255) override;
44 
49 virtual IntelliImage* getDeepCopy() override;
50 
@@ -129,10 +125,10 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8h_source.html', diff --git a/docs/html/_intelli_render_settings_8cpp.html b/docs/html/_intelli_render_settings_8cpp.html index 5893ff2..713fb11 100644 --- a/docs/html/_intelli_render_settings_8cpp.html +++ b/docs/html/_intelli_render_settings_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliRenderSettings.cpp File Reference +IntelliPhoto: src/IntelliHelper/IntelliRenderSettings.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -98,10 +94,10 @@ $(document).ready(function(){initNavTree('_intelli_render_settings_8cpp.html','' diff --git a/docs/html/_intelli_render_settings_8cpp_source.html b/docs/html/_intelli_render_settings_8cpp_source.html index 217f8d6..ddb0034 100644 --- a/docs/html/_intelli_render_settings_8cpp_source.html +++ b/docs/html/_intelli_render_settings_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliRenderSettings.cpp Source File +IntelliPhoto: src/IntelliHelper/IntelliRenderSettings.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -97,21 +93,26 @@ $(document).ready(function(){initNavTree('_intelli_render_settings_8cpp_source.h
5 
6 }
7 
- -
9  return fastRenderer;
+
8 void IntelliRenderSettings::setFastRendering(bool Updatedsetting){
+
9  this->fastRenderering = Updatedsetting;
10 }
+
11 
+ +
13  return fastRenderering;
+
14 }
-
bool getFastRenderer()
The getfastRenderer gets the value of the flag for the fastRenderer setting.
+
bool isFastRenderering()
The getfastRenderer gets the value of the flag for the fastRenderer setting.
+
void setFastRendering(bool Updatedsetting)
setFastRendering sets fastRendering to Updatedsetting.
diff --git a/docs/html/_intelli_render_settings_8h.html b/docs/html/_intelli_render_settings_8h.html index 352ce0b..a0073c8 100644 --- a/docs/html/_intelli_render_settings_8h.html +++ b/docs/html/_intelli_render_settings_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliRenderSettings.h File Reference +IntelliPhoto: src/IntelliHelper/IntelliRenderSettings.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -105,10 +101,10 @@ Classes diff --git a/docs/html/_intelli_render_settings_8h_source.html b/docs/html/_intelli_render_settings_8h_source.html index af97456..d0c24c4 100644 --- a/docs/html/_intelli_render_settings_8h_source.html +++ b/docs/html/_intelli_render_settings_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliRenderSettings.h Source File +IntelliPhoto: src/IntelliHelper/IntelliRenderSettings.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -99,25 +95,27 @@ $(document).ready(function(){initNavTree('_intelli_render_settings_8h_source.htm
7 public:
9 
-
14 bool getFastRenderer();
-
15 
-
16 private:
-
17 bool fastRenderer = true;
-
18 };
-
19 
-
20 #endif // INTELLIRENDERSETTINGS_H
+
14 void setFastRendering(bool Updatedsetting);
+
19 bool isFastRenderering();
+
20 
+
21 private:
+
22 bool fastRenderering = true;
+
23 };
+
24 
+
25 #endif
-
bool getFastRenderer()
The getfastRenderer gets the value of the flag for the fastRenderer setting.
+
bool isFastRenderering()
The getfastRenderer gets the value of the flag for the fastRenderer setting.
+
void setFastRendering(bool Updatedsetting)
setFastRendering sets fastRendering to Updatedsetting.
diff --git a/docs/html/_intelli_shaped_image_8cpp.html b/docs/html/_intelli_shaped_image_8cpp.html index 9b83df9..e512cef 100644 --- a/docs/html/_intelli_shaped_image_8cpp.html +++ b/docs/html/_intelli_shaped_image_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliShapedImage.cpp File Reference +IntelliPhoto: src/Image/IntelliShapedImage.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -102,10 +98,10 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp.html','');} diff --git a/docs/html/_intelli_shaped_image_8cpp_source.html b/docs/html/_intelli_shaped_image_8cpp_source.html index 7e34b9c..3d2cda0 100644 --- a/docs/html/_intelli_shaped_image_8cpp_source.html +++ b/docs/html/_intelli_shaped_image_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliShapedImage.cpp Source File +IntelliPhoto: src/Image/IntelliShapedImage.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -99,7 +95,7 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
7 IntelliShapedImage::IntelliShapedImage(int width, int height, bool fastRendererOn)
8  : IntelliRasterImage(width, height, fastRendererOn){
-
10  this->fastRenderer = fastRendererOn;
+
10  this->fastRenderering = fastRendererOn;
11 }
12 
@@ -119,85 +115,101 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
27 }
28 
29 void IntelliShapedImage::calculateVisiblity(){
-
30  if(fastRenderer) {
-
31  this->imageData = imageData.convertToFormat(QImage::Format_ARGB32);
+
30  if(polygonData.size()<2) {
+
31  return;
32  }
-
33 
-
34  if(polygonData.size()<=2) {
-
35  QColor clr;
-
36  for(int y=0; y<imageData.height(); y++) {
-
37  for(int x=0; x<imageData.width(); x++) {
-
38  clr = imageData.pixel(x,y);
-
39  clr.setAlpha(255);
-
40  imageData.setPixelColor(x,y,clr);
-
41  }
-
42  }
-
43  if(fastRenderer) {
-
44  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
33  if(fastRenderering) {
+
34  this->imageData = imageData.convertToFormat(QImage::Format_ARGB32);
+
35  }
+
36 
+
37  if(polygonData.size()<=2) {
+
38  QColor clr;
+
39  for(int y = 0; y<imageData.height(); y++) {
+
40  for(int x = 0; x<imageData.width(); x++) {
+
41  clr = imageData.pixel(x,y);
+
42  clr.setAlpha(255);
+
43  imageData.setPixelColor(x,y,clr);
+
44  }
45  }
-
46  return;
-
47  }
-
48  QColor clr;
-
49  for(int y=0; y<imageData.height(); y++) {
-
50  for(int x=0; x<imageData.width(); x++) {
-
51  QPoint ptr(x,y);
-
52  clr = imageData.pixelColor(x,y);
-
53  bool isInPolygon = IntelliTriangulation::isInPolygon(triangles, ptr);
-
54  if(isInPolygon) {
-
55  clr.setAlpha(std::min(255, clr.alpha()));
-
56  }else{
-
57  clr.setAlpha(0);
-
58  }
-
59  imageData.setPixelColor(x,y,clr);
-
60  }
-
61  }
-
62  if(fastRenderer) {
-
63  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
46  if(fastRenderering) {
+
47  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
48  }
+
49  return;
+
50  }
+
51  QColor clr;
+
52  for(int y = 0; y<imageData.height(); y++) {
+
53  for(int x = 0; x<imageData.width(); x++) {
+
54  QPoint ptr(x,y);
+
55  clr = imageData.pixelColor(x,y);
+
56  bool isInPolygon = IntelliTriangulation::isInPolygon(triangles, ptr);
+
57  if(isInPolygon) {
+
58  clr.setAlpha(std::min(255, clr.alpha()));
+
59  }else{
+
60  clr.setAlpha(0);
+
61  }
+
62  imageData.setPixelColor(x,y,clr);
+
63  }
64  }
-
65 }
-
66 
-
67 QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){
-
68  QImage copy = imageData;
-
69  if(fastRenderer) {
-
70  copy = copy.convertToFormat(QImage::Format_ARGB32);
-
71  }
-
72  for(int y = 0; y<copy.height(); y++) {
-
73  for(int x = 0; x<copy.width(); x++) {
-
74  QColor clr = copy.pixelColor(x,y);
-
75  clr.setAlpha(std::min(alpha,clr.alpha()));
-
76  copy.setPixelColor(x,y, clr);
-
77  }
-
78  }
-
79  if(fastRenderer) {
-
80  copy = copy.convertToFormat(QImage::Format_Indexed8);
+
65  if(fastRenderering) {
+
66  this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
+
67  }
+
68 }
+
69 
+
70 QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){
+
71  QImage copy = imageData;
+
72  if(fastRenderering) {
+
73  copy = copy.convertToFormat(QImage::Format_ARGB32);
+
74  }
+
75  for(int y = 0; y<copy.height(); y++) {
+
76  for(int x = 0; x<copy.width(); x++) {
+
77  QColor clr = copy.pixelColor(x,y);
+
78  clr.setAlpha(std::min(alpha,clr.alpha()));
+
79  copy.setPixelColor(x,y, clr);
+
80  }
81  }
-
82  return copy.scaled(displaySize,Qt::IgnoreAspectRatio);
-
83 }
-
84 
-
85 void IntelliShapedImage::setPolygon(const std::vector<QPoint>& polygonData){
-
86  if(polygonData.size()<3) {
-
87  this->polygonData.clear();
-
88  }else{
-
89  this->polygonData.clear();
-
90  for(auto element:polygonData) {
-
91  this->polygonData.push_back(QPoint(element.x(), element.y()));
-
92  }
- -
94  }
-
95  calculateVisiblity();
-
96  return;
-
97 }
+
82  if(fastRenderering) {
+
83  copy = copy.convertToFormat(QImage::Format_Indexed8);
+
84  }
+
85  return copy.scaled(displaySize,Qt::IgnoreAspectRatio);
+
86 }
+
87 
+
88 void IntelliShapedImage::setPolygon(const std::vector<QPoint>& polygonData){
+
89  if(polygonData.size()<3) {
+
90  this->polygonData.clear();
+
91  }else{
+
92  this->polygonData.clear();
+
93  for(auto element:polygonData) {
+
94  this->polygonData.push_back(QPoint(element.x(), element.y()));
+
95  }
+ +
97  if(fastRenderering) {
+
98  imageData = imageData.convertToFormat(QImage::Format_ARGB32);
+
99  }
+
100  for(int y = 0; y<imageData.height(); y++) {
+
101  for(int x = 0; x<imageData.width(); x++) {
+
102  QColor clr = imageData.pixelColor(x,y);
+
103  clr.setAlpha(255);
+
104  imageData.setPixelColor(x,y,clr);
+
105  }
+
106  }
+
107  if(fastRenderering) {
+
108  imageData = imageData.convertToFormat(QImage::Format_Indexed8);
+
109  }
+
110  }
+
111  calculateVisiblity();
+
112  return;
+
113 }
-
virtual QImage getDisplayable(const QSize &displaySize, int alpha=255) override
A function returning the displayable ImageData in a requested transparence and size.
+
virtual QImage getDisplayable(const QSize &displaySize, int alpha=255) override
A function returning the displayable ImageData in a requested transparence and size.
std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
The IntelliShapedImage manages a Shapedimage.
virtual IntelliImage * getDeepCopy() override
A function that copys all that returns a [allocated] Image.
- +
bool fastRenderering
fastRendering is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
+
bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
A function to check if a point lies in a polygon by checking its spanning triangles.
ImageType TypeOfImage
The Type, an Image is.
Definition: IntelliImage.h:42
-
bool fastRenderer
fastRenderer is the flag that represents the usage of 8bit pictures.
Definition: IntelliImage.h:47
QImage imageData
The underlying image data.
Definition: IntelliImage.h:37
An abstract class which manages the basic IntelliImage operations.
Definition: IntelliImage.h:19
std::vector< QPoint > polygonData
The Vertices of The Polygon. Needs to be a planar Polygon.
@@ -205,14 +217,14 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
virtual ~IntelliShapedImage() override
An Destructor.
The IntelliRasterImage manages a RASTERIMAGE.
-
virtual void setPolygon(const std::vector< QPoint > &polygonData) override
A function that sets the data of the visible Polygon.
+
virtual void setPolygon(const std::vector< QPoint > &polygonData) override
A function that sets the data of the visible Polygon.
diff --git a/docs/html/_intelli_shaped_image_8h.html b/docs/html/_intelli_shaped_image_8h.html index 40a02ce..d213348 100644 --- a/docs/html/_intelli_shaped_image_8h.html +++ b/docs/html/_intelli_shaped_image_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliShapedImage.h File Reference +IntelliPhoto: src/Image/IntelliShapedImage.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -108,10 +104,10 @@ Classes diff --git a/docs/html/_intelli_shaped_image_8h_source.html b/docs/html/_intelli_shaped_image_8h_source.html index 34b790f..188019d 100644 --- a/docs/html/_intelli_shaped_image_8h_source.html +++ b/docs/html/_intelli_shaped_image_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Image/IntelliShapedImage.h Source File +IntelliPhoto: src/Image/IntelliShapedImage.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -110,9 +106,9 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8h_source.html',
36 
40 virtual ~IntelliShapedImage() override;
41 
-
48 virtual QImage getDisplayable(const QSize& displaySize, int alpha=255) override;
+
48 virtual QImage getDisplayable(const QSize& displaySize, int alpha = 255) override;
49 
-
55 virtual QImage getDisplayable(int alpha=255) override;
+
55 virtual QImage getDisplayable(int alpha = 255) override;
56 
61 virtual IntelliImage* getDeepCopy() override;
62 
@@ -126,7 +122,7 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8h_source.html',
78 #endif
-
virtual QImage getDisplayable(const QSize &displaySize, int alpha=255) override
A function returning the displayable ImageData in a requested transparence and size.
+
virtual QImage getDisplayable(const QSize &displaySize, int alpha=255) override
A function returning the displayable ImageData in a requested transparence and size.
The IntelliShapedImage manages a Shapedimage.
virtual IntelliImage * getDeepCopy() override
A function that copys all that returns a [allocated] Image.
@@ -137,14 +133,14 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8h_source.html',
IntelliShapedImage(int width, int height, bool fastRendererOn)
The Construcor of the IntelliShapedImage. Given the Image dimensions.
virtual ~IntelliShapedImage() override
An Destructor.
The IntelliRasterImage manages a RASTERIMAGE.
-
virtual void setPolygon(const std::vector< QPoint > &polygonData) override
A function that sets the data of the visible Polygon.
+
virtual void setPolygon(const std::vector< QPoint > &polygonData) override
A function that sets the data of the visible Polygon.
diff --git a/docs/html/_intelli_tool_8cpp.html b/docs/html/_intelli_tool_8cpp.html index 966693d..485b5c6 100644 --- a/docs/html/_intelli_tool_8cpp.html +++ b/docs/html/_intelli_tool_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliTool.cpp File Reference +IntelliPhoto: src/Tool/IntelliTool.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -99,10 +95,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_8cpp.html','');}); diff --git a/docs/html/_intelli_tool_8cpp_source.html b/docs/html/_intelli_tool_8cpp_source.html index 29774cd..def0e86 100644 --- a/docs/html/_intelli_tool_8cpp_source.html +++ b/docs/html/_intelli_tool_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliTool.cpp Source File +IntelliPhoto: src/Tool/IntelliTool.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -94,9 +90,9 @@ $(document).ready(function(){initNavTree('_intelli_tool_8cpp_source.html','');})
2 #include "Layer/PaintingArea.h"
3 
-
5  this->Area=Area;
-
6  this->colorPicker=colorPicker;
-
7  this->Toolsettings=Toolsettings;
+
5  this->Area = Area;
+
6  this->colorPicker = colorPicker;
+
7  this->Toolsettings = Toolsettings;
8 }
9 
10 
@@ -106,7 +102,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_8cpp_source.html','');})
14 
16  if(isDrawing) {
-
17  isDrawing=false;
+
17  isDrawing = false;
18  this->deleteToolLayer();
19  }
20 }
@@ -116,110 +112,127 @@ $(document).ready(function(){initNavTree('_intelli_tool_8cpp_source.html','');})
24 }
25 
-
27  this->isDrawing=true;
-
28  //create drawing layer
-
29  this->createToolLayer();
- +
27  this->isDrawing = this->createToolLayer();
+
28  if(isDrawing) {
+ +
30  }
31 }
32 
34  if(isDrawing) {
-
35  isDrawing=false;
+
35  isDrawing = false;
36  this->mergeToolLayer();
37  this->deleteToolLayer();
-
39  }
-
40 }
-
41 
-
42 void IntelliTool::onMouseMoved(int x, int y){
-
43  if(isDrawing)
- -
45 }
-
46 
- -
48  //if needed for future general tasks implement in here
-
49 }
-
50 
-
51 void IntelliTool::createToolLayer(){
-
52  Area->createTempTopLayer(Area->activeLayer);
-
53  this->activeLayer=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
-
54  this->Canvas=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer+1)];
-
55 }
-
56 
-
57 void IntelliTool::mergeToolLayer(){
-
58  QColor clr_0;
-
59  QColor clr_1;
-
60  for(int y=0; y<activeLayer->height; y++) {
-
61  for(int x=0; x<activeLayer->width; x++) {
-
62  clr_0=activeLayer->image->imageData.pixelColor(x,y);
-
63  clr_1=Canvas->image->imageData.pixelColor(x,y);
-
64  float t = static_cast<float>(clr_1.alpha())/255.f;
-
65  int r =static_cast<int>(static_cast<float>(clr_1.red())*(t)+static_cast<float>(clr_0.red())*(1.f-t)+0.5f);
-
66  int g =static_cast<int>(static_cast<float>(clr_1.green())*(t)+static_cast<float>(clr_0.green())*(1.f-t)+0.5f);
-
67  int b =static_cast<int>(static_cast<float>(clr_1.blue())*(t)+static_cast<float>(clr_0.blue()*(1.f-t))+0.5f);
-
68  int a =std::min(clr_0.alpha()+clr_1.alpha(), 255);
-
69  clr_0.setRed(r);
-
70  clr_0.setGreen(g);
-
71  clr_0.setBlue(b);
-
72  clr_0.setAlpha(a);
-
73 
-
74  activeLayer->image->imageData.setPixelColor(x, y, clr_0);
-
75  }
-
76  }
-
77  Area->DumpyGui->UpdateGui();
-
78 }
-
79 
-
80 void IntelliTool::deleteToolLayer(){
-
81  Area->deleteLayer(Area->activeLayer+1);
-
82  this->Canvas=nullptr;
-
83 }
-
84 
- -
86  return ActiveType;
-
87 }
-
88 
- -
90  return isDrawing;
-
91 }
+
39 
+
40  }
+
41 }
+
42 
+
43 void IntelliTool::onMouseMoved(int x, int y){
+
44  if(isDrawing)
+ +
46 }
+
47 
+ +
49  //if needed for future general tasks implement in here
+
50  Area->DummyGui->setToolWidth(value + Toolsettings->getLineWidth());
+
51 }
+
52 
+
53 bool IntelliTool::createToolLayer(){
+
54  if(Area->createTempTopLayer(Area->activeLayer)) {
+
55  this->activeLayer = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
+
56  this->Canvas = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer + 1)];
+
57  return true;
+
58  }
+
59  return false;
+
60 }
+
61 
+
62 void IntelliTool::mergeToolLayer(){
+
63  QColor clr_0;
+
64  QColor clr_1;
+
65  QImage updatedImage = activeLayer->image->getImageData();
+
66 
+
67  for(int y = 0; y<activeLayer->height; y++) {
+
68  for(int x = 0; x<activeLayer->width; x++) {
+
69  clr_0 = updatedImage.pixelColor(x,y);
+
70  clr_1 = Canvas->image->imageData.pixelColor(x,y);
+
71  float t = static_cast<float>(clr_1.alpha()) / 255.f;
+
72  int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
+
73  int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
+
74  int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
+
75  int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
+
76  clr_0.setRed(r);
+
77  clr_0.setGreen(g);
+
78  clr_0.setBlue(b);
+
79  clr_0.setAlpha(a);
+
80 
+
81  updatedImage.setPixelColor(x, y, clr_0);
+
82  }
+
83  }
+
84  activeLayer->image->setImageData(updatedImage);
+
85  if(Canvas->image->getPolygonData().size() > 0) {
+ +
87  }
+
88  Area->DummyGui->UpdateGui();
+
89 }
+
90 
+
91 void IntelliTool::deleteToolLayer(){
+
92  Area->deleteLayer(Area->activeLayer + 1, true);
+
93  this->Canvas = nullptr;
+
94 }
+
95 
+ +
97  return ActiveType;
+
98 }
+
99 
+ +
101  return isDrawing;
+
102 }
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
-
void deleteLayer(int idx)
The deleteLayer method removes a layer at a given idx.
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+
void deleteLayer(int idx, bool isTool=false)
The deleteLayer method removes a layer at a given idx.
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:68
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:69
+
virtual std::vector< QPoint > getPolygonData()
A function that returns the Polygondata if existent.
Definition: IntelliImage.h:130
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:58
-
Tooltype getTooltype()
Definition: IntelliTool.cpp:85
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:59
+
Tooltype getTooltype()
Definition: IntelliTool.cpp:96
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
-
bool getIsDrawing()
Definition: IntelliTool.cpp:89
+
virtual QImage getImageData()
getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
+
virtual void setImageData(const QImage &newData)
setImageData overwrites the old imageData the new imageData.
+
void setToolWidth(int value)
+
bool getIsDrawing()
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general Painting Area and colorPicker.
Definition: IntelliTool.cpp:4
- +
QImage imageData
The underlying image data.
Definition: IntelliImage.h:37
IntelliImage * image
Definition: PaintingArea.h:26
-
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+ +
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
virtual ~IntelliTool()=0
An abstract Destructor.
Definition: IntelliTool.cpp:11
+
virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
An abstract function that sets the data of the visible Polygon, if needed.
diff --git a/docs/html/_intelli_tool_8h.html b/docs/html/_intelli_tool_8h.html index 7ce29fc..982c659 100644 --- a/docs/html/_intelli_tool_8h.html +++ b/docs/html/_intelli_tool_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliTool.h File Reference +IntelliPhoto: src/Tool/IntelliTool.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -109,10 +105,10 @@ Classes diff --git a/docs/html/_intelli_tool_8h_source.html b/docs/html/_intelli_tool_8h_source.html index b8832db..2785156 100644 --- a/docs/html/_intelli_tool_8h_source.html +++ b/docs/html/_intelli_tool_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliTool.h Source File +IntelliPhoto: src/Tool/IntelliTool.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -112,90 +108,90 @@ $(document).ready(function(){initNavTree('_intelli_tool_8h_source.html','');});
23  RECTANGLE
24 };
25 private:
-
29 void createToolLayer();
-
30 
-
34 void mergeToolLayer();
-
35 
-
39 void deleteToolLayer();
-
40 protected:
- -
45 
- -
47 
- -
52 
- -
54 
- -
59 
- -
64 
-
68 bool isDrawing = false;
-
69 
-
70 public:
- -
77 
-
81 virtual ~IntelliTool() = 0;
-
82 
-
88 virtual void onMouseRightPressed(int x, int y);
-
89 
-
95 virtual void onMouseRightReleased(int x, int y);
-
96 
-
102 virtual void onMouseLeftPressed(int x, int y);
-
103 
-
109 virtual void onMouseLeftReleased(int x, int y);
-
110 
-
115 virtual void onWheelScrolled(int value);
-
116 
-
122 virtual void onMouseMoved(int x, int y);
-
123 
- -
125 
-
126 bool getIsDrawing();
-
127 
-
128 };
-
129 #endif
+
30 bool createToolLayer();
+
31 
+
35 void mergeToolLayer();
+
36 
+
40 void deleteToolLayer();
+
41 protected:
+ +
46 
+ +
48 
+ +
53 
+ +
55 
+ +
60 
+ +
65 
+
69 bool isDrawing = false;
+
70 
+
71 public:
+ +
78 
+
82 virtual ~IntelliTool() = 0;
+
83 
+
89 virtual void onMouseRightPressed(int x, int y);
+
90 
+
96 virtual void onMouseRightReleased(int x, int y);
+
97 
+
103 virtual void onMouseLeftPressed(int x, int y);
+
104 
+
110 virtual void onMouseLeftReleased(int x, int y);
+
111 
+
116 virtual void onWheelScrolled(int value);
+
117 
+
123 virtual void onMouseMoved(int x, int y);
+
124 
+ +
126 
+
127 bool getIsDrawing();
+
128 
+
129 };
+
130 #endif
- +
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
- +
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+ -
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:68
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:69
The LayerObject struct holds all the information needed to construct a layer.
Definition: PaintingArea.h:25
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:58
- +
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:59
+ - -
Tooltype getTooltype()
Definition: IntelliTool.cpp:85
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+ +
Tooltype getTooltype()
Definition: IntelliTool.cpp:96
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
-
bool getIsDrawing()
Definition: IntelliTool.cpp:89
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
bool getIsDrawing()
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general Painting Area and colorPicker.
Definition: IntelliTool.cpp:4
- - -
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+ + +
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
virtual ~IntelliTool()=0
An abstract Destructor.
Definition: IntelliTool.cpp:11
- + diff --git a/docs/html/_intelli_tool_circle_8cpp.html b/docs/html/_intelli_tool_circle_8cpp.html index 75f7613..88dac33 100644 --- a/docs/html/_intelli_tool_circle_8cpp.html +++ b/docs/html/_intelli_tool_circle_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolCircle.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolCircle.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -101,10 +97,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8cpp.html','');}) diff --git a/docs/html/_intelli_tool_circle_8cpp_source.html b/docs/html/_intelli_tool_circle_8cpp_source.html index 1b2e28c..21aef0b 100644 --- a/docs/html/_intelli_tool_circle_8cpp_source.html +++ b/docs/html/_intelli_tool_circle_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolCircle.cpp Source File +IntelliPhoto: src/Tool/IntelliToolCircle.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -105,119 +101,120 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8cpp_source.html'
13 }
14 
15 void IntelliToolCircle::drawCircle(int radius){
-
16  int outer = radius+20;
-
17  QColor inner = this->colorPicker->getSecondColor();
-
18  inner.setAlpha(Toolsettings->getInnerAlpha());
-
19  int yMin, yMax, xMin, xMax;
-
20  yMin = centerPoint.y()-radius;
-
21  yMax = centerPoint.y()+radius;
-
22  // x = x0+-sqrt(r2-(y-y0)2)
-
23  for(int i=yMin; i<=yMax; i++) {
-
24  xMin = static_cast<int>(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
-
25  xMax = static_cast<int>(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
-
26  this->Canvas->image->drawLine(QPoint(xMin,i), QPoint(xMax,i),inner,1);
-
27  }
-
28 
-
29  //TODO implement circle drawing algorithm bresenham
-
30  radius = static_cast<int>(radius +(Toolsettings->getLineWidth()/2.)-1.);
-
31  yMin = (centerPoint.y()-radius);
-
32  yMax = (centerPoint.y()+radius);
-
33  for(int i=yMin; i<=yMax; i++) {
-
34  xMin = static_cast<int>(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
-
35  xMax = static_cast<int>(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
- - -
38  }
-
39 
-
40  xMin = (centerPoint.x()-radius);
-
41  xMax = (centerPoint.x()+radius);
-
42  for(int i=xMin; i<=xMax; i++) {
-
43  int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
-
44  int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
- - -
47  }
-
48 }
-
49 
- - -
52 }
-
53 
- - -
56 }
-
57 
- - -
60  this->centerPoint=QPoint(x,y);
-
61  int radius = 1;
-
62  drawCircle(radius);
- -
64 }
-
65 
- - -
68 }
-
69 
- - - -
73 }
-
74 
- -
76  if(this->isDrawing) {
-
77  this->Canvas->image->drawPlain(Qt::transparent);
-
78  QPoint next(x,y);
-
79  int radius = static_cast<int>(sqrt(pow((centerPoint.x()-x),2)+pow((centerPoint.y()-y),2)));
-
80  drawCircle(radius);
-
81  }
- -
83 }
+
16  QColor inner = this->colorPicker->getSecondColor();
+
17  inner.setAlpha(Toolsettings->getInnerAlpha());
+
18  int yMin, yMax, xMin, xMax;
+
19  yMin = centerPoint.y() - radius;
+
20  yMax = centerPoint.y() + radius;
+
21  // x = x0+-sqrt(r2-(y-y0)2)
+
22  for(int i = yMin; i<=yMax; i++) {
+
23  xMin = static_cast<int>(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
+
24  xMax = static_cast<int>(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
+
25  this->Canvas->image->drawLine(QPoint(xMin,i), QPoint(xMax,i),inner,1);
+
26  }
+
27 
+
28  //TODO implement circle drawing algorithm bresenham
+
29  radius = static_cast<int>(radius + (Toolsettings->getLineWidth() / 2.));
+
30  yMin = (centerPoint.y() - radius);
+
31  yMax = (centerPoint.y() + radius);
+
32  for(int i = yMin; i<=yMax; i++) {
+
33  xMin = static_cast<int>(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
+
34  xMax = static_cast<int>(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
+ + +
37  }
+
38 
+
39  xMin = (centerPoint.x() - radius);
+
40  xMax = (centerPoint.x() + radius);
+
41  for(int i = xMin; i<=xMax; i++) {
+
42  int yMin = static_cast<int>(centerPoint.y() - sqrt(pow(radius,2) - pow(i - centerPoint.x(),2)));
+
43  int yMax = static_cast<int>(centerPoint.y() + sqrt(pow(radius,2) - pow(i - centerPoint.x(),2)));
+ + +
46  }
+
47 }
+
48 
+ + +
51 }
+
52 
+ + +
55 }
+
56 
+ + +
59  if(this->isDrawing) {
+
60  this->centerPoint = QPoint(x,y);
+
61  int radius = 1;
+
62  drawCircle(radius);
+ +
64  }
+
65 }
+
66 
+ + +
69 }
+
70 
+ + + +
74 }
+
75 
+ +
77  if(this->isDrawing) {
+
78  this->Canvas->image->drawPlain(Qt::transparent);
+
79  QPoint next(x,y);
+
80  int radius = static_cast<int>(sqrt(pow((centerPoint.x() - x),2) + pow((centerPoint.y() - y),2)));
+
81  drawCircle(radius);
+
82  }
+ +
84 }
-
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Clearing the canvas layer.
+
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Clearing the canvas layer.
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
-
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the edge Width relative to value.
+
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
+
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the edge Width relative to value.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
- +
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
QColor getSecondColor()
A function to read the secondary selected color.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:68
- -
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:69
+ +
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
IntelliToolCircle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and ed...
virtual ~IntelliToolCircle() override
A Destructor.
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
QColor getFirstColor()
A function to read the primary selected color.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
-
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
+
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
IntelliImage * image
Definition: PaintingArea.h:26
-
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
- -
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
+
void setLineWidth(int LineWidth)
+ +
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
- -
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Sets the middle point of the cricle.
+
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
+ +
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Sets the middle point of the cricle.
diff --git a/docs/html/_intelli_tool_circle_8h.html b/docs/html/_intelli_tool_circle_8h.html index 1e2602d..0b2df6e 100644 --- a/docs/html/_intelli_tool_circle_8h.html +++ b/docs/html/_intelli_tool_circle_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolCircle.h File Reference +IntelliPhoto: src/Tool/IntelliToolCircle.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -109,10 +105,10 @@ Classes diff --git a/docs/html/_intelli_tool_circle_8h_source.html b/docs/html/_intelli_tool_circle_8h_source.html index 7eb05f7..c75d116 100644 --- a/docs/html/_intelli_tool_circle_8h_source.html +++ b/docs/html/_intelli_tool_circle_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolCircle.h Source File +IntelliPhoto: src/Tool/IntelliToolCircle.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -119,33 +115,33 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8h_source.html','
74 virtual void onMouseMoved(int x, int y) override;
75 };
76 
-
77 #endif // INTELLITOOLCIRCLE_H
+
77 #endif
-
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Clearing the canvas layer.
-
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Clearing the canvas layer.
+
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
-
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the edge Width relative to value.
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the edge Width relative to value.
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
IntelliToolCircle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and ed...
virtual ~IntelliToolCircle() override
A Destructor.
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
The IntelliColorPicker manages the selected colors for one whole project.
-
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
-
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
+
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
+
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
The IntelliToolCircle class represents a tool to draw a circle.
-
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Sets the middle point of the cricle.
+
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Sets the middle point of the cricle.
diff --git a/docs/html/_intelli_tool_flood_fill_8cpp.html b/docs/html/_intelli_tool_flood_fill_8cpp.html index d78ffb0..be3c43f 100644 --- a/docs/html/_intelli_tool_flood_fill_8cpp.html +++ b/docs/html/_intelli_tool_flood_fill_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolFloodFill.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolFloodFill.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -103,10 +99,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp.html','' diff --git a/docs/html/_intelli_tool_flood_fill_8cpp_source.html b/docs/html/_intelli_tool_flood_fill_8cpp_source.html index 30e6814..c0d8dba 100644 --- a/docs/html/_intelli_tool_flood_fill_8cpp_source.html +++ b/docs/html/_intelli_tool_flood_fill_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolFloodFill.cpp Source File +IntelliPhoto: src/Tool/IntelliToolFloodFill.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -133,10 +129,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp_source.h
41  QPoint Current = Q.front();
42  Q.pop();
43 
-
44  left = QPoint(Current.x()-1,Current.y() );
-
45  right = QPoint(Current.x()+1,Current.y() );
-
46  top = QPoint(Current.x(),Current.y()-1);
-
47  down = QPoint(Current.x(),Current.y()+1);
+
44  left = QPoint(Current.x() - 1,Current.y() );
+
45  right = QPoint(Current.x() + 1,Current.y() );
+
46  top = QPoint(Current.x(),Current.y() - 1);
+
47  down = QPoint(Current.x(),Current.y() + 1);
48  if((right.x() < Canvas->width) && (Canvas->image->getPixelColor(right) != newColor) && (activeLayer->image->getPixelColor(right) == oldColor)) {
49  Canvas->image->drawPixel(right,newColor);
50  Q.push(right);
@@ -174,11 +170,11 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp_source.h
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
- +
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
+
IntelliToolFloodFill(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
virtual void onWheelScrolled(int value) override
A function managing the scroll event.
@@ -187,30 +183,30 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp_source.h
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
virtual ~IntelliToolFloodFill() override
A Destructor.
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:58
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:59
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
QColor getFirstColor()
A function to read the primary selected color.
-
virtual QColor getPixelColor(QPoint &point)
A function that returns the pixelcolor at a certain point.
+
virtual QColor getPixelColor(QPoint &point)
A function that returns the pixelcolor at a certain point.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Clearing the canvas.
IntelliImage * image
Definition: PaintingArea.h:26
-
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
diff --git a/docs/html/_intelli_tool_flood_fill_8h.html b/docs/html/_intelli_tool_flood_fill_8h.html index c519fe0..4f2496e 100644 --- a/docs/html/_intelli_tool_flood_fill_8h.html +++ b/docs/html/_intelli_tool_flood_fill_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolFloodFill.h File Reference +IntelliPhoto: src/Tool/IntelliToolFloodFill.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -108,10 +104,10 @@ Classes diff --git a/docs/html/_intelli_tool_flood_fill_8h_source.html b/docs/html/_intelli_tool_flood_fill_8h_source.html index 8b7db74..2b5c6f2 100644 --- a/docs/html/_intelli_tool_flood_fill_8h_source.html +++ b/docs/html/_intelli_tool_flood_fill_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolFloodFill.h Source File +IntelliPhoto: src/Tool/IntelliToolFloodFill.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -116,17 +112,17 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8h_source.htm
64 virtual void onMouseMoved(int x, int y) override;
65 };
66 
-
67 #endif // INTELLITOOLFLOODFILL_H
+
67 #endif
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
IntelliToolFloodFill(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
virtual void onWheelScrolled(int value) override
A function managing the scroll event.
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Sets the point to flood fill around and does t...
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
virtual ~IntelliToolFloodFill() override
A Destructor.
@@ -139,10 +135,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8h_source.htm diff --git a/docs/html/_intelli_tool_line_8cpp.html b/docs/html/_intelli_tool_line_8cpp.html index bcb96e7..4090c1e 100644 --- a/docs/html/_intelli_tool_line_8cpp.html +++ b/docs/html/_intelli_tool_line_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolLine.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolLine.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -101,10 +97,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8cpp.html','');}); diff --git a/docs/html/_intelli_tool_line_8cpp_source.html b/docs/html/_intelli_tool_line_8cpp_source.html index 74bdc0e..9296aab 100644 --- a/docs/html/_intelli_tool_line_8cpp_source.html +++ b/docs/html/_intelli_tool_line_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolLine.cpp Source File +IntelliPhoto: src/Tool/IntelliToolLine.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -114,7 +110,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8cpp_source.html','
22 
-
25  this->lineStartingPoint=QPoint(x,y);
+
25  this->lineStartingPoint = QPoint(x,y);
26  this->Canvas->image->drawPoint(lineStartingPoint, colorPicker->getFirstColor(),Toolsettings->getLineWidth());
28 }
@@ -125,74 +121,60 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8cpp_source.html','
33 
- +
37 }
38 
39 void IntelliToolLine::onMouseMoved(int x, int y){
40  if(this->isDrawing) {
41  this->Canvas->image->drawPlain(Qt::transparent);
42  QPoint next(x,y);
-
43  switch(Toolsettings->getLinestyle()) {
- -
45  this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),Toolsettings->getLineWidth());
-
46  break;
- -
48  QPoint p1 =lineStartingPoint.x() <= next.x() ? lineStartingPoint : next;
-
49  QPoint p2 =lineStartingPoint.x() < next.x() ? next : lineStartingPoint;
-
50  int m = static_cast<int>(static_cast<float>(p2.y()-p1.y())/static_cast<float>(p2.x()-p1.x())+0.5f);
-
51  int c = lineStartingPoint.y()-lineStartingPoint.x()*m;
-
52 
-
53  break;
-
54  }
-
55  }
- -
57 }
+
43  this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),Toolsettings->getLineWidth());
+
44  }
+ +
46 }
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
-
IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. And reading in the lineWidth and line...
- - - +
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+
IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. Drawing a Line from the startpoint to the current mouse po...
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the lineWidth relative to value.
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:68
- +
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:69
virtual ~IntelliToolLine() override
An abstract Destructor.
-
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
+
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Clearing the canvas.
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
QColor getFirstColor()
A function to read the primary selected color.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
IntelliImage * image
Definition: PaintingArea.h:26
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Sets the starting point of the line.
- - -
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+ +
void setLineWidth(int LineWidth)
+ +
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
+
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
diff --git a/docs/html/_intelli_tool_line_8h.html b/docs/html/_intelli_tool_line_8h.html index 3c23196..b32eec0 100644 --- a/docs/html/_intelli_tool_line_8h.html +++ b/docs/html/_intelli_tool_line_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolLine.h File Reference +IntelliPhoto: src/Tool/IntelliToolLine.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -108,10 +104,10 @@ Classes diff --git a/docs/html/_intelli_tool_line_8h_source.html b/docs/html/_intelli_tool_line_8h_source.html index 7217625..dd5a532 100644 --- a/docs/html/_intelli_tool_line_8h_source.html +++ b/docs/html/_intelli_tool_line_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolLine.h Source File +IntelliPhoto: src/Tool/IntelliToolLine.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -118,17 +114,17 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8h_source.html','')
69 virtual void onMouseMoved(int x, int y) override;
70 };
71 
-
72 #endif // INTELLITOOLLINE_H
+
72 #endif
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
-
IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. And reading in the lineWidth and line...
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+
IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. Drawing a Line from the startpoint to the current mouse po...
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the lineWidth relative to value.
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
virtual ~IntelliToolLine() override
An abstract Destructor.
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
@@ -141,10 +137,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8h_source.html','') diff --git a/docs/html/_intelli_tool_pen_8cpp.html b/docs/html/_intelli_tool_pen_8cpp.html index d321921..e52b2b4 100644 --- a/docs/html/_intelli_tool_pen_8cpp.html +++ b/docs/html/_intelli_tool_pen_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPen.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolPen.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -102,10 +98,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8cpp.html','');}); diff --git a/docs/html/_intelli_tool_pen_8cpp_source.html b/docs/html/_intelli_tool_pen_8cpp_source.html index c75e60f..9954a96 100644 --- a/docs/html/_intelli_tool_pen_8cpp_source.html +++ b/docs/html/_intelli_tool_pen_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPen.cpp Source File +IntelliPhoto: src/Tool/IntelliToolPen.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -115,7 +111,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8cpp_source.html',''
23 
-
26  this->previousPoint=QPoint(x,y);
+
26  this->previousPoint = QPoint(x,y);
29 }
@@ -128,57 +124,57 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8cpp_source.html',''
36  if(this->isDrawing) {
37  QPoint newPoint(x,y);
38  this->Canvas->image->drawLine(this->previousPoint, newPoint, colorPicker->getFirstColor(), Toolsettings->getLineWidth());
-
39  this->previousPoint=newPoint;
+
39  this->previousPoint = newPoint;
40  }
42 }
43 
- +
47 }
- +
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
- +
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
virtual ~IntelliToolPen() override
A Destructor.
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. To draw the line.
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current draw.
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:68
-
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:69
+
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing penWidth relativ to value.
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the drawing to the active layer.
QColor getFirstColor()
A function to read the primary selected color.
IntelliToolPen(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. Reading the penWidth.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
IntelliImage * image
Definition: PaintingArea.h:26
- +
void setLineWidth(int LineWidth)
+ -
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Starting the drawing procedure.
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
diff --git a/docs/html/_intelli_tool_pen_8h.html b/docs/html/_intelli_tool_pen_8h.html index 02a6c32..160dbc8 100644 --- a/docs/html/_intelli_tool_pen_8h.html +++ b/docs/html/_intelli_tool_pen_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPen.h File Reference +IntelliPhoto: src/Tool/IntelliToolPen.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -109,10 +105,10 @@ Classes diff --git a/docs/html/_intelli_tool_pen_8h_source.html b/docs/html/_intelli_tool_pen_8h_source.html index 34b054d..f57a115 100644 --- a/docs/html/_intelli_tool_pen_8h_source.html +++ b/docs/html/_intelli_tool_pen_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPen.h Source File +IntelliPhoto: src/Tool/IntelliToolPen.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -116,14 +112,14 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8h_source.html','');
67 virtual void onMouseMoved(int x, int y) override;
68 };
69 
-
70 #endif // INTELLITOOLPEN_H
+
70 #endif
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
virtual ~IntelliToolPen() override
A Destructor.
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event. To draw the line.
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current draw.
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
@@ -139,10 +135,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8h_source.html',''); diff --git a/docs/html/_intelli_tool_plain_8cpp.html b/docs/html/_intelli_tool_plain_8cpp.html index 080106d..cd9d19a 100644 --- a/docs/html/_intelli_tool_plain_8cpp.html +++ b/docs/html/_intelli_tool_plain_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPlain.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolPlain.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -100,10 +96,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8cpp.html','');}); diff --git a/docs/html/_intelli_tool_plain_8cpp_source.html b/docs/html/_intelli_tool_plain_8cpp_source.html index dc9398c..68861e5 100644 --- a/docs/html/_intelli_tool_plain_8cpp_source.html +++ b/docs/html/_intelli_tool_plain_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPlain.cpp Source File +IntelliPhoto: src/Tool/IntelliToolPlain.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -132,7 +128,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8cpp_source.html',
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the fill to the active layer.
virtual void onWheelScrolled(int value) override
A function managing the scroll event.
@@ -141,30 +137,30 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8cpp_source.html',
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Filling the whole canvas.
- -
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+ +
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
QColor getFirstColor()
A function to read the primary selected color.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current fill.
IntelliImage * image
Definition: PaintingArea.h:26
IntelliToolPlainTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.
-
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
virtual ~IntelliToolPlainTool() override
A Destructor.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
+
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
diff --git a/docs/html/_intelli_tool_plain_8h.html b/docs/html/_intelli_tool_plain_8h.html index 20e755e..32446ae 100644 --- a/docs/html/_intelli_tool_plain_8h.html +++ b/docs/html/_intelli_tool_plain_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPlain.h File Reference +IntelliPhoto: src/Tool/IntelliToolPlain.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -108,10 +104,10 @@ Classes diff --git a/docs/html/_intelli_tool_plain_8h_source.html b/docs/html/_intelli_tool_plain_8h_source.html index aba7ae2..ec7e3ab 100644 --- a/docs/html/_intelli_tool_plain_8h_source.html +++ b/docs/html/_intelli_tool_plain_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPlain.h Source File +IntelliPhoto: src/Tool/IntelliToolPlain.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -114,14 +110,14 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8h_source.html',''
62 
63 };
64 
-
65 #endif // INTELLITOOLFLOODFILLTOOL_H
+
65 #endif
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the fill to the active layer.
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
virtual void onWheelScrolled(int value) override
A function managing the scroll event.
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
@@ -137,10 +133,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8h_source.html','' diff --git a/docs/html/_intelli_tool_polygon_8cpp.html b/docs/html/_intelli_tool_polygon_8cpp.html index 8729530..3190650 100644 --- a/docs/html/_intelli_tool_polygon_8cpp.html +++ b/docs/html/_intelli_tool_polygon_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPolygon.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolPolygon.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -102,10 +98,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8cpp.html','');} diff --git a/docs/html/_intelli_tool_polygon_8cpp_source.html b/docs/html/_intelli_tool_polygon_8cpp_source.html index 611ad6c..5341219 100644 --- a/docs/html/_intelli_tool_polygon_8cpp_source.html +++ b/docs/html/_intelli_tool_polygon_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPolygon.cpp Source File +IntelliPhoto: src/Tool/IntelliToolPolygon.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -96,182 +92,212 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8cpp_source.html
4 #include <QInputDialog>
5 #include <QDebug>
6 
- +
7 IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon)
8  : IntelliTool(Area, colorPicker, Toolsettings){
9  isPointNearStart = false;
10  isDrawing = false;
11  isInside = false;
- -
13 }
-
14 
- -
16  if(isDrawing) {
- -
18  }
-
19 }
-
20 
- -
22  if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) {
-
23  std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer());
-
24  QPoint Point(x,y);
-
25  isInside = IntelliTriangulation::isInPolygon(Triangles,Point);
-
26  }
-
27  else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) {
-
28  isInside = true;
-
29  }
-
30 
-
31  if(isInside && !isDrawing) {
- -
33  QPoint drawingPoint = QPoint(x,y);
-
34 
-
35  isDrawing = true;
-
36  QPointList.push_back(drawingPoint);
-
37 
-
38  this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth());
- -
40  }
-
41  else if(isDrawing && isNearStart(x,y,QPointList.front())) {
-
42  if(QPointList.size() > 2) {
-
43  isPointNearStart = true;
-
44  this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth());
- -
46  }
-
47  else{
-
48  isInside = false;
-
49  isDrawing = false;
-
50  QPointList.clear();
- -
52  }
-
53 
+
12  this->isSettingPolygon = isSettingPolygon;
+
13  if(isSettingPolygon) {
+ +
15  }
+ +
17 }
+
18 
+ +
20  if(isDrawing) {
+ +
22  }
+
23 }
+
24 
+ +
26  if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) {
+
27  if(Area->getPolygonDataOfRealLayer().size()>2) {
+
28  std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer());
+
29  QPoint Point(x,y);
+
30  isInside = IntelliTriangulation::isInPolygon(Triangles,Point);
+
31  }
+
32  else{
+
33  isInside = true;
+
34  }
+
35  if(isSettingPolygon) {
+
36  isInside = true;
+
37  }
+
38  }
+
39  else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) {
+
40  isInside = true;
+
41  }
+
42 
+
43  if(isInside && !isDrawing) {
+ +
45  QPoint drawingPoint = QPoint(x,y);
+
46 
+
47  isDrawing = true;
+
48  QPointList.push_back(drawingPoint);
+
49 
+
50  this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth());
+
51  if(!isSettingPolygon) {
+ +
53  }
54  }
-
55  else if(isDrawing) {
-
56  QPoint drawingPoint(x,y);
-
57  QPointList.push_back(drawingPoint);
-
58  this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
- -
60  }
-
61 }
-
62 
- -
64  isInside = false;
-
65  isDrawing = false;
-
66  isPointNearStart = false;
-
67  QPointList.clear();
- -
69 }
-
70 
- -
72  if(isPointNearStart) {
-
73  isInside = false;
-
74  isPointNearStart = false;
-
75  isDrawing = false;
-
76  std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(QPointList);
-
77  QPoint Point;
-
78  QColor colorTwo(colorPicker->getSecondColor());
-
79  colorTwo.setAlpha(Toolsettings->getInnerAlpha());
-
80  for(int i = 0; i < activeLayer->width; i++) {
-
81  for(int j = 0; j < activeLayer->height; j++) {
-
82  Point = QPoint(i,j);
-
83  if(IntelliTriangulation::isInPolygon(Triangles,Point)) {
-
84  this->Canvas->image->drawPixel(Point, colorTwo);
-
85  }
-
86  }
-
87  }
-
88  for(int i=0; i<static_cast<int>(QPointList.size()); i++) {
-
89  int next = static_cast<int>((i+static_cast<int>(1))%static_cast<int>(QPointList.size()));
-
90  this->Canvas->image->drawLine(QPointList[static_cast<unsigned long long>(i)], QPointList[static_cast<unsigned long long>(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
-
91  }
-
92  QPointList.clear();
- -
94  }
-
95 }
-
96 
- - -
99 }
-
100 
- - -
103  if(!isDrawing) {
- -
105  }
-
106 }
-
107 
- - -
110 }
+
55  else if(isDrawing && isNearStart(x,y,QPointList.front())) {
+
56  if(QPointList.size() > 2) {
+
57  isPointNearStart = true;
+
58  this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth());
+
59  if(!isSettingPolygon) {
+ +
61  }
+
62  }
+
63  else{
+
64  isInside = false;
+
65  isDrawing = false;
+
66  QPointList.clear();
+ +
68  }
+
69 
+
70  }
+
71  else if(isDrawing) {
+
72  QPoint drawingPoint(x,y);
+
73  QPointList.push_back(drawingPoint);
+
74  this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
+
75  if(!isSettingPolygon) {
+ +
77  }
+
78  }
+
79 }
+
80 
+ +
82  isInside = false;
+
83  isDrawing = false;
+
84  isPointNearStart = false;
+
85  QPointList.clear();
+ +
87 }
+
88 
+ +
90  if(isPointNearStart) {
+
91  isInside = false;
+
92  isPointNearStart = false;
+
93  isDrawing = false;
+
94  if(!isSettingPolygon) {
+
95  std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(QPointList);
+
96  QPoint Point;
+
97  QColor colorTwo(colorPicker->getSecondColor());
+
98  colorTwo.setAlpha(Toolsettings->getInnerAlpha());
+
99  for(int i = 0; i < activeLayer->width; i++) {
+
100  for(int j = 0; j < activeLayer->height; j++) {
+
101  Point = QPoint(i,j);
+
102  if(IntelliTriangulation::isInPolygon(Triangles,Point)) {
+
103  this->Canvas->image->drawPixel(Point, colorTwo);
+
104  }
+
105  }
+
106  }
+
107  for(int i = 0; i<static_cast<int>(QPointList.size()); i++) {
+
108  int next = static_cast<int>((i + static_cast<int>(1)) % static_cast<int>(QPointList.size()));
+
109  this->Canvas->image->drawLine(QPointList[static_cast<unsigned long long>(i)], QPointList[static_cast<unsigned long long>(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
+
110  }
111 
-
112 bool IntelliToolPolygon::isNearStart(int x, int y, QPoint Startpoint){
-
113  bool isNear = false;
-
114  int StartX = Startpoint.x();
-
115  int StartY = Startpoint.y();
-
116  int valueToNear = 5;
-
117 
-
118  for(int i = StartX - valueToNear; i < StartX + valueToNear; i++) {
-
119  for(int j = StartY - valueToNear; j < StartY + valueToNear; j++) {
-
120  if((i == x) && (j == y)) {
-
121  isNear = true;
-
122  }
-
123  }
-
124  }
-
125  return isNear;
-
126 }
+
112  }
+
113  else{
+
114  Canvas->image->setPolygon(QPointList);
+ +
116  }
+ +
118  QPointList.clear();
+
119  }
+
120 }
+
121 
+ + +
124 }
+
125 
+ +
127  if(!isSettingPolygon) {
+ +
129  if(!isDrawing) {
+ +
131  }
+
132  }
+
133 }
+
134 
+ +
136  if(!isSettingPolygon) {
+ +
138  }
+
139 }
+
140 
+
141 bool IntelliToolPolygon::isNearStart(int x, int y, QPoint Startpoint){
+
142  bool isNear = false;
+
143  int StartX = Startpoint.x();
+
144  int StartY = Startpoint.y();
+
145  int valueToNear = 5;
+
146 
+
147  for(int i = StartX - valueToNear; i < StartX + valueToNear; i++) {
+
148  for(int j = StartY - valueToNear; j < StartY + valueToNear; j++) {
+
149  if((i == x) && (j == y)) {
+
150  isNear = true;
+
151  }
+
152  }
+
153  }
+
154  return isNear;
+
155 }
-
int getWidthOfActive()
The getWidthOfActive gets the horizontal dimensions of the active layer.
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
-
IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
- -
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+
virtual void drawPixel(const QPoint &p1, const QColor &color)
A funtcion used to draw a pixel on the Image with the given Color.
std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
QColor getSecondColor()
A function to read the secondary selected color.
-
int getHeightOfActive()
The getHeightOfActive gets the vertical dimensions of the active layer.
-
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.
+
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
- -
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
+ +
virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
A.
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:58
- -
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
-
IntelliImage::ImageType getTypeOfImageRealLayer()
+
LayerObject * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:59
+
IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
A constructor setting the general paintingArea and colorPicker.
+ +
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
+
IntelliImage::ImageType getTypeOfImageRealLayer()
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
- + +
virtual void setImageData(const QImage &newData)
setImageData overwrites the old imageData the new imageData.
bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
A function to check if a point lies in a polygon by checking its spanning triangles.
-
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current fill.
+
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current fill.
QColor getFirstColor()
A function to read the primary selected color.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
+
Tooltype ActiveType
Definition: IntelliTool.h:47
The IntelliColorPicker manages the selected colors for one whole project.
-
~IntelliToolPolygon() override
A Destructor.
- +
~IntelliToolPolygon() override
A Destructor.
+
IntelliImage * image
Definition: PaintingArea.h:26
-
std::vector< QPoint > getPolygonDataOfRealLayer()
- -
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
-
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Setting polygon points.
-
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the fill to the active layer.
+
std::vector< QPoint > getPolygonDataOfRealLayer()
+
void setLineWidth(int LineWidth)
+ +
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
+
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Setting polygon points.
+
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
+
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the fill to the active layer.
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
-
virtual void onWheelScrolled(int value) override
A function managing the scroll event. CHanging the lineWidth relative to value.
+
virtual void onWheelScrolled(int value) override
A function managing the scroll event. CHanging the lineWidth relative to value.
+
virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
An abstract function that sets the data of the visible Polygon, if needed.
diff --git a/docs/html/_intelli_tool_polygon_8h.html b/docs/html/_intelli_tool_polygon_8h.html index 687c06e..797b1a1 100644 --- a/docs/html/_intelli_tool_polygon_8h.html +++ b/docs/html/_intelli_tool_polygon_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPolygon.h File Reference +IntelliPhoto: src/Tool/IntelliToolPolygon.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -110,10 +106,10 @@ Classes diff --git a/docs/html/_intelli_tool_polygon_8h_source.html b/docs/html/_intelli_tool_polygon_8h_source.html index 79330db..5d38e7c 100644 --- a/docs/html/_intelli_tool_polygon_8h_source.html +++ b/docs/html/_intelli_tool_polygon_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolPolygon.h Source File +IntelliPhoto: src/Tool/IntelliToolPolygon.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -105,56 +101,57 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8h_source.html',
26 
30 bool isInside;
31 
-
35 bool isPointNearStart;
+
35 bool isSettingPolygon;
36 
-
40 std::vector<QPoint> QPointList;
-
41 public:
- -
51 ~IntelliToolPolygon() override;
-
52 
-
58 virtual void onMouseLeftPressed(int x, int y) override;
-
59 
-
65 virtual void onMouseLeftReleased(int x, int y) override;
-
66 
-
72 virtual void onMouseRightPressed(int x, int y) override;
-
73 
-
79 virtual void onMouseRightReleased(int x, int y) override;
-
80 
-
85 virtual void onWheelScrolled(int value) override;
+
40 bool isPointNearStart;
+
41 
+
45 std::vector<QPoint> QPointList;
+
46 public:
+ +
57 ~IntelliToolPolygon() override;
+
58 
+
64 virtual void onMouseLeftPressed(int x, int y) override;
+
65 
+
71 virtual void onMouseLeftReleased(int x, int y) override;
+
72 
+
78 virtual void onMouseRightPressed(int x, int y) override;
+
79 
+
85 virtual void onMouseRightReleased(int x, int y) override;
86 
-
92 virtual void onMouseMoved(int x, int y) override;
-
93 
-
94 
-
95 };
-
96 
-
97 #endif // INTELLITOOLPOLYGON_H
+
91 virtual void onWheelScrolled(int value) override;
+
92 
+
98 virtual void onMouseMoved(int x, int y) override;
+
99 
+
100 };
+
101 
+
102 #endif
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
-
IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker.
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
-
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
+
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
+
IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
A constructor setting the general paintingArea and colorPicker.
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
-
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current fill.
+
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse. Resetting the current fill.
The IntelliColorPicker manages the selected colors for one whole project.
-
~IntelliToolPolygon() override
A Destructor.
-
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Setting polygon points.
-
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
+
~IntelliToolPolygon() override
A Destructor.
+
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Setting polygon points.
+
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
The IntelliToolPolygon managed the Drawing of Polygonforms.
-
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the fill to the active layer.
+
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the fill to the active layer.
-
virtual void onWheelScrolled(int value) override
A function managing the scroll event. CHanging the lineWidth relative to value.
+
virtual void onWheelScrolled(int value) override
A function managing the scroll event. CHanging the lineWidth relative to value.
diff --git a/docs/html/_intelli_tool_rectangle_8cpp.html b/docs/html/_intelli_tool_rectangle_8cpp.html index 3f90a03..3916457 100644 --- a/docs/html/_intelli_tool_rectangle_8cpp.html +++ b/docs/html/_intelli_tool_rectangle_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolRectangle.cpp File Reference +IntelliPhoto: src/Tool/IntelliToolRectangle.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -100,10 +96,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8cpp.html','') diff --git a/docs/html/_intelli_tool_rectangle_8cpp_source.html b/docs/html/_intelli_tool_rectangle_8cpp_source.html index 583bea6..35bb58c 100644 --- a/docs/html/_intelli_tool_rectangle_8cpp_source.html +++ b/docs/html/_intelli_tool_rectangle_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolRectangle.cpp Source File +IntelliPhoto: src/Tool/IntelliToolRectangle.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -112,7 +108,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8cpp_source.ht
20 
21  QColor clr = colorPicker->getSecondColor();
22  clr.setAlpha(Toolsettings->getInnerAlpha());
-
23  for(int y=yMin; y<=yMax; y++) {
+
23  for(int y = yMin; y<=yMax; y++) {
24  this->Canvas->image->drawLine(QPoint(xMin,y), QPoint(xMax, y), clr, 1);
25  }
26  this->Canvas->image->drawLine(QPoint(xMin, yMin),QPoint(xMin, yMax), this->colorPicker->getFirstColor(), Toolsettings->getLineWidth());
@@ -131,7 +127,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8cpp_source.ht
39 
-
42  this->originCorner=QPoint(x,y);
+
42  this->originCorner = QPoint(x,y);
43  drawRectangle(originCorner);
45 }
@@ -151,7 +147,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8cpp_source.ht
59 
- +
63 }
@@ -159,44 +155,44 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8cpp_source.ht
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
-
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
+
virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
A function that draws A Line between two given Points in a given color.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
- +
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
virtual ~IntelliToolRectangle() override
A Destructor.
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Setting the originCorner and draws a rectangle...
QColor getSecondColor()
A function to read the secondary selected color.
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse.Resetting the current draw.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:68
- +
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:69
+
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:63
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:64
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
QColor getFirstColor()
A function to read the primary selected color.
-
Tooltype ActiveType
Definition: IntelliTool.h:46
+
Tooltype ActiveType
Definition: IntelliTool.h:47
virtual void onMouseMoved(int x, int y) override
A function managing the mouse moved event.Drawing a rectangle to currrent mouse position.
The IntelliColorPicker manages the selected colors for one whole project.
- +
IntelliImage * image
Definition: PaintingArea.h:26
- -
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+
void setLineWidth(int LineWidth)
+ +
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse. Merging the draw to the active layer.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
+
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
IntelliToolRectangle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. And reading in the alphaInner and edg...
diff --git a/docs/html/_intelli_tool_rectangle_8h.html b/docs/html/_intelli_tool_rectangle_8h.html index 6aff06c..5b34e64 100644 --- a/docs/html/_intelli_tool_rectangle_8h.html +++ b/docs/html/_intelli_tool_rectangle_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolRectangle.h File Reference +IntelliPhoto: src/Tool/IntelliToolRectangle.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -109,10 +105,10 @@ Classes diff --git a/docs/html/_intelli_tool_rectangle_8h_source.html b/docs/html/_intelli_tool_rectangle_8h_source.html index 99df4ed..583c39b 100644 --- a/docs/html/_intelli_tool_rectangle_8h_source.html +++ b/docs/html/_intelli_tool_rectangle_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliToolRectangle.h Source File +IntelliPhoto: src/Tool/IntelliToolRectangle.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -118,17 +114,17 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8h_source.html
73 virtual void onMouseMoved(int x, int y) override;
74 };
75 
-
76 #endif // INTELLIRECTANGLETOOL_H
+
76 #endif
virtual void onWheelScrolled(int value) override
A function managing the scroll event.Changing edgeWidth relativ to value.
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:51
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:52
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:53
+
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:54
virtual ~IntelliToolRectangle() override
A Destructor.
virtual void onMouseLeftPressed(int x, int y) override
A function managing the left click pressed of a mouse. Setting the originCorner and draws a rectangle...
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:44
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:45
virtual void onMouseRightPressed(int x, int y) override
A function managing the right click pressed of a mouse.Resetting the current draw.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
The IntelliToolRectangle class represents a tool to draw a rectangle.
@@ -141,10 +137,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8h_source.html diff --git a/docs/html/_intelli_toolsettings_8cpp.html b/docs/html/_intelli_toolsettings_8cpp.html index f012172..dada395 100644 --- a/docs/html/_intelli_toolsettings_8cpp.html +++ b/docs/html/_intelli_toolsettings_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliToolsettings.cpp File Reference +IntelliPhoto: src/IntelliHelper/IntelliToolsettings.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -99,10 +95,10 @@ $(document).ready(function(){initNavTree('_intelli_toolsettings_8cpp.html','');} diff --git a/docs/html/_intelli_toolsettings_8cpp_source.html b/docs/html/_intelli_toolsettings_8cpp_source.html index 7591999..19a91f4 100644 --- a/docs/html/_intelli_toolsettings_8cpp_source.html +++ b/docs/html/_intelli_toolsettings_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliToolsettings.cpp Source File +IntelliPhoto: src/IntelliHelper/IntelliToolsettings.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -97,71 +93,55 @@ $(document).ready(function(){initNavTree('_intelli_toolsettings_8cpp_source.html
5 {
6  lineWidth = 1;
7  innerAlpha = 255;
-
8  Linestyle = LineStyle::SOLID_LINE;
-
9 }
-
10 
- -
12 
-
13 }
-
14 
- -
16  return lineWidth;
-
17 }
-
18 
- -
20  lineWidth = QInputDialog::getInt(nullptr,"Line Width Input", "Width",1,1,50,1);
-
21 }
-
22 
- -
24  if(LineWidth < 1) {
-
25  LineWidth = 1;
-
26  }
-
27  else if(LineWidth > 50) {
-
28  LineWidth = 50;
-
29  }
-
30  lineWidth = LineWidth;
-
31 }
-
32 
- -
34  return this->innerAlpha;
-
35 }
-
36 
- -
38  this->innerAlpha = QInputDialog::getInt(nullptr,"Inner Aplha Input", "Value",0,0,255,1);
-
39 }
-
40 
- -
42  if(innerAlpha < 0) {
-
43  innerAlpha = 0;
-
44  }
-
45  else if(innerAlpha > 255) {
-
46  innerAlpha = 255;
-
47  }
-
48  this->innerAlpha = innerAlpha;
-
49 }
-
50 
- -
52  return Linestyle;
-
53 }
+
8 }
+
9 
+ +
11 
+
12 }
+
13 
+ +
15  return lineWidth;
+
16 }
+
17 
+ +
19  if(LineWidth < 1) {
+
20  LineWidth = 1;
+
21  }
+
22  else if(LineWidth > 50) {
+
23  LineWidth = 50;
+
24  }
+
25  lineWidth = LineWidth;
+
26 }
+
27 
+ +
29  return this->innerAlpha;
+
30 }
+
31 
+ +
33  if(innerAlpha < 0) {
+
34  innerAlpha = 0;
+
35  }
+
36  else if(innerAlpha > 255) {
+
37  innerAlpha = 255;
+
38  }
+
39  this->innerAlpha = innerAlpha;
+
40 }
- - - -
LineStyle
The LineStyle enum classifing all ways of drawing a line.
- - - - + + +
void setInnerAlpha(int innerAlpha)
+
void setLineWidth(int LineWidth)
+ diff --git a/docs/html/_intelli_toolsettings_8h.html b/docs/html/_intelli_toolsettings_8h.html index b77d91d..65b6e18 100644 --- a/docs/html/_intelli_toolsettings_8h.html +++ b/docs/html/_intelli_toolsettings_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliToolsettings.h File Reference +IntelliPhoto: src/IntelliHelper/IntelliToolsettings.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -105,10 +101,10 @@ Classes diff --git a/docs/html/_intelli_toolsettings_8h_source.html b/docs/html/_intelli_toolsettings_8h_source.html index c419423..122e800 100644 --- a/docs/html/_intelli_toolsettings_8h_source.html +++ b/docs/html/_intelli_toolsettings_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliToolsettings.h Source File +IntelliPhoto: src/IntelliHelper/IntelliToolsettings.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -95,47 +91,35 @@ $(document).ready(function(){initNavTree('_intelli_toolsettings_8h_source.html',
3 
5 public:
-
9 enum class LineStyle {
-
10  SOLID_LINE,
- -
12 };
- -
14 virtual ~IntelliToolsettings();
-
15 int getLineWidth();
-
16 void setLineWidth();
-
17 void setLineWidth(int LineWidth);
-
18 int getInnerAlpha();
-
19 void setInnerAlpha();
-
20 void setInnerAlpha(int innerAlpha);
- -
22 
-
23 private:
-
24 int lineWidth;
-
25 int innerAlpha;
-
26 LineStyle Linestyle;
-
27 };
-
28 
-
29 #endif // INTELLITOOLSETTINGS_H
+ +
7 virtual ~IntelliToolsettings();
+
8 int getLineWidth();
+
9 void setLineWidth(int LineWidth);
+
10 int getInnerAlpha();
+
11 void setInnerAlpha(int innerAlpha);
+
12 
+
13 private:
+
14 int lineWidth;
+
15 int innerAlpha;
+
16 };
+
17 
+
18 #endif
- - - -
LineStyle
The LineStyle enum classifing all ways of drawing a line.
- - - - - + + +
void setInnerAlpha(int innerAlpha)
+
void setLineWidth(int LineWidth)
+ diff --git a/docs/html/_intelli_triangulation_8cpp.html b/docs/html/_intelli_triangulation_8cpp.html index 7ef82bf..bed1df2 100644 --- a/docs/html/_intelli_triangulation_8cpp.html +++ b/docs/html/_intelli_triangulation_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliTriangulation.cpp File Reference +IntelliPhoto: src/IntelliHelper/IntelliTriangulation.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -126,10 +122,10 @@ Macros diff --git a/docs/html/_intelli_triangulation_8cpp_source.html b/docs/html/_intelli_triangulation_8cpp_source.html index 8fc95e8..254df55 100644 --- a/docs/html/_intelli_triangulation_8cpp_source.html +++ b/docs/html/_intelli_triangulation_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliTriangulation.cpp Source File +IntelliPhoto: src/IntelliHelper/IntelliTriangulation.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -106,101 +102,101 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8cpp_source.htm
14  };
15 
16  // calculates the inner angle of 'point'
-
17  auto calculateInner = [](QPoint& point, QPoint& prev, QPoint& post){
-
18  QPoint AP(point.x()-prev.x(), point.y()-prev.y());
-
19  QPoint BP(point.x()-post.x(), point.y()-post.y());
+
17  auto calculateInner = [] (QPoint& point, QPoint& prev, QPoint& post) {
+
18  QPoint AP(point.x() - prev.x(), point.y() - prev.y());
+
19  QPoint BP(point.x() - post.x(), point.y() - post.y());
20 
-
21  float topSclar = AP.x()*BP.x()+AP.y()*BP.y();
-
22  float absolute = static_cast<float>(sqrt(pow(AP.x(),2.)+pow(AP.y(),2.))*sqrt(pow(BP.x(),2.)+pow(BP.y(),2.)));
-
23  return acos(topSclar/absolute);
+
21  float topSclar = AP.x() * BP.x() + AP.y() * BP.y();
+
22  float absolute = static_cast<float>(sqrt(pow(AP.x(),2.) + pow(AP.y(),2.)) * sqrt(pow(BP.x(),2.) + pow(BP.y(),2.)));
+
23  return acos(topSclar / absolute);
24  };
25 
26  // gets the first element of vec for which element.isTip == true holds
-
27  auto getTip= [](const std::vector<TriangleHelper>& vec){
-
28  size_t min = 0;
-
29  for(size_t i=0; i<vec.size(); i++) {
-
30  if(vec[i].interiorAngle<vec[min].interiorAngle) {
-
31  min = i;
-
32  }
-
33  }
-
34  return vec[min];
-
35  };
+
27  auto getTip = [] (const std::vector<TriangleHelper>& vec) {
+
28  size_t min = 0;
+
29  for(size_t i = 0; i<vec.size(); i++) {
+
30  if(vec[i].interiorAngle<vec[min].interiorAngle) {
+
31  min = i;
+
32  }
+
33  }
+
34  return vec[min];
+
35  };
36 
37  // get the vertex idx bevor idx in relation to the container length
-
38  auto getPrev = [](int idx, int length){
-
39  return (idx-1)>=0 ? (idx-1) : (length-1);
+
38  auto getPrev = [] (int idx, int length) {
+
39  return (idx - 1)>=0 ? (idx - 1) : (length - 1);
40  };
41 
42  // get the vertex idx after idx in relation to the container lenght
-
43  auto getPost = [](int idx, int length){
-
44  return (idx+1)%length;
+
43  auto getPost = [] (int idx, int length) {
+
44  return (idx + 1) % length;
45  };
46 
47  // return if the vertex is a tip
-
48  auto isTip = [](float angle){
-
49  return static_cast<double>(angle)<(pi/2.);
+
48  auto isTip = [] (float angle) {
+
49  return static_cast<double>(angle)<(pi / 2.);
50  };
51 
52  std::vector<TriangleHelper> Vertices;
53  std::vector<Triangle> Triangles;
54 
55  // set up all vertices and calculate intirior angle
-
56  for(int i=0; i<static_cast<int>(polyPoints.size()); i++) {
+
56  for(int i = 0; i<static_cast<int>(polyPoints.size()); i++) {
57  TriangleHelper helper;
-
58  int prev = getPrev(i, static_cast<int>(polyPoints.size()));
-
59  int post = getPost(i, static_cast<int>(polyPoints.size()));
+
58  int prev = getPrev(i, static_cast<int>(polyPoints.size()));
+
59  int post = getPost(i, static_cast<int>(polyPoints.size()));
60 
-
61  helper.vertex = polyPoints[static_cast<size_t>(i)];
+
61  helper.vertex = polyPoints[static_cast<size_t>(i)];
62  helper.idx = i;
63 
-
64  helper.interiorAngle = calculateInner(polyPoints[static_cast<size_t>(i)],
-
65  polyPoints[static_cast<size_t>(prev)],
-
66  polyPoints[static_cast<size_t>(post)]);
+
64  helper.interiorAngle = calculateInner(polyPoints[static_cast<size_t>(i)],
+
65  polyPoints[static_cast<size_t>(prev)],
+
66  polyPoints[static_cast<size_t>(post)]);
67  helper.isTip = isTip(helper.interiorAngle);
68  Vertices.push_back(helper);
69  }
70 
71  // search triangles based on the intirior angles of each vertey
-
72  while(Triangles.size() != polyPoints.size()-2) {
+
72  while(Triangles.size() != polyPoints.size() - 2) {
73  Triangle tri;
74  TriangleHelper smallest = getTip(Vertices);
-
75  int prev = getPrev(smallest.idx, static_cast<int>(Vertices.size()));
-
76  int post = getPost(smallest.idx, static_cast<int>(Vertices.size()));
+
75  int prev = getPrev(smallest.idx, static_cast<int>(Vertices.size()));
+
76  int post = getPost(smallest.idx, static_cast<int>(Vertices.size()));
77 
78  // set triangle and push it
-
79  tri.A = Vertices[static_cast<size_t>(prev)].vertex;
-
80  tri.B = Vertices[static_cast<size_t>(smallest.idx)].vertex;
-
81  tri.C = Vertices[static_cast<size_t>(post)].vertex;
+
79  tri.A = Vertices[static_cast<size_t>(prev)].vertex;
+
80  tri.B = Vertices[static_cast<size_t>(smallest.idx)].vertex;
+
81  tri.C = Vertices[static_cast<size_t>(post)].vertex;
82  Triangles.push_back(tri);
83 
84  // update Vertice array
-
85  Vertices.erase(Vertices.begin()+smallest.idx);
-
86  for(size_t i=static_cast<size_t>(smallest.idx); i<Vertices.size(); i++) {
-
87  Vertices[i].idx-=1;
+
85  Vertices.erase(Vertices.begin() + smallest.idx);
+
86  for(size_t i = static_cast<size_t>(smallest.idx); i<Vertices.size(); i++) {
+
87  Vertices[i].idx -= 1;
88  }
89 
90  // update post und prev idx
91  post = getPrev(post, Vertices.size());
-
92  prev = prev<smallest.idx ? prev : (prev-1);
+
92  prev = prev<smallest.idx ? prev : (prev - 1);
93 
94  // calcultae neighboors of prev and post to calculate new interior angles
-
95  int prevOfPrev = getPrev(prev, static_cast<int>(Vertices.size()));
-
96  int postOfPrev = getPost(prev, static_cast<int>(Vertices.size()));
+
95  int prevOfPrev = getPrev(prev, static_cast<int>(Vertices.size()));
+
96  int postOfPrev = getPost(prev, static_cast<int>(Vertices.size()));
97 
-
98  int prevOfPost = getPrev(post, static_cast<int>(Vertices.size()));
-
99  int postOfPost = getPost(post, static_cast<int>(Vertices.size()));
+
98  int prevOfPost = getPrev(post, static_cast<int>(Vertices.size()));
+
99  int postOfPost = getPost(post, static_cast<int>(Vertices.size()));
100 
101  // update vertices with interior angles
102  // updtae prev
-
103  Vertices[static_cast<size_t>(prev)].interiorAngle = calculateInner(Vertices[static_cast<size_t>(prev)].vertex,
-
104  Vertices[static_cast<size_t>(prevOfPrev)].vertex,
-
105  Vertices[static_cast<size_t>(postOfPrev)].vertex);
-
106  Vertices[static_cast<size_t>(prev)].isTip = isTip(Vertices[static_cast<size_t>(prev)].interiorAngle);
+
103  Vertices[static_cast<size_t>(prev)].interiorAngle = calculateInner(Vertices[static_cast<size_t>(prev)].vertex,
+
104  Vertices[static_cast<size_t>(prevOfPrev)].vertex,
+
105  Vertices[static_cast<size_t>(postOfPrev)].vertex);
+
106  Vertices[static_cast<size_t>(prev)].isTip = isTip(Vertices[static_cast<size_t>(prev)].interiorAngle);
107  // update post
-
108  Vertices[static_cast<size_t>(post)].interiorAngle = calculateInner(Vertices[static_cast<size_t>(post)].vertex,
-
109  Vertices[static_cast<size_t>(prevOfPost)].vertex,
-
110  Vertices[static_cast<size_t>(postOfPost)].vertex);
-
111  Vertices[static_cast<size_t>(post)].isTip = isTip(Vertices[static_cast<size_t>(post)].interiorAngle);
+
108  Vertices[static_cast<size_t>(post)].interiorAngle = calculateInner(Vertices[static_cast<size_t>(post)].vertex,
+
109  Vertices[static_cast<size_t>(prevOfPost)].vertex,
+
110  Vertices[static_cast<size_t>(postOfPost)].vertex);
+
111  Vertices[static_cast<size_t>(post)].isTip = isTip(Vertices[static_cast<size_t>(post)].interiorAngle);
112  }
113  return Triangles;
114 }
@@ -227,10 +223,10 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8cpp_source.htm diff --git a/docs/html/_intelli_triangulation_8h.html b/docs/html/_intelli_triangulation_8h.html index ea5eb14..c5d9728 100644 --- a/docs/html/_intelli_triangulation_8h.html +++ b/docs/html/_intelli_triangulation_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliTriangulation.h File Reference +IntelliPhoto: src/IntelliHelper/IntelliTriangulation.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -130,10 +126,10 @@ Functions diff --git a/docs/html/_intelli_triangulation_8h_source.html b/docs/html/_intelli_triangulation_8h_source.html index d485a01..c2d0d08 100644 --- a/docs/html/_intelli_triangulation_8h_source.html +++ b/docs/html/_intelli_triangulation_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/IntelliHelper/IntelliTriangulation.h Source File +IntelliPhoto: src/IntelliHelper/IntelliTriangulation.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -103,7 +99,7 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8h_source.html'
15 
23 inline float sign(QPoint& p1, QPoint& p2, QPoint& p3){
-
24  return (p1.x()-p3.x())*(p2.y()-p3.y())-(p2.x()-p3.x())*(p1.y()-p3.y());
+
24  return (p1.x() - p3.x()) * (p2.y() - p3.y()) - (p2.x() - p3.x()) * (p1.y() - p3.y());
25 }
26 
33 inline bool isInTriangle(Triangle& tri, QPoint& P){
@@ -140,10 +136,10 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8h_source.html' diff --git a/docs/html/_painting_area_8cpp.html b/docs/html/_painting_area_8cpp.html index 8207a1c..63d1ec5 100644 --- a/docs/html/_painting_area_8cpp.html +++ b/docs/html/_painting_area_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Layer/PaintingArea.cpp File Reference +IntelliPhoto: src/Layer/PaintingArea.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -112,10 +108,10 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp.html','');}); diff --git a/docs/html/_painting_area_8cpp_source.html b/docs/html/_painting_area_8cpp_source.html index 08331a1..3bd0b3a 100644 --- a/docs/html/_painting_area_8cpp_source.html +++ b/docs/html/_painting_area_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Layer/PaintingArea.cpp Source File +IntelliPhoto: src/Layer/PaintingArea.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -110,245 +106,245 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');}
20 
-
21 PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent)
-
22  : QWidget(parent){
-
23  this->Tool = nullptr;
-
24  this->setLayerDimensions(maxWidth, maxHeight);
- -
26  layerBundle[0].image->drawPlain(QColor(0,0,255,255));
-
27  std::vector<QPoint> polygon;
-
28  polygon.push_back(QPoint(100,000));
-
29  polygon.push_back(QPoint(200,100));
-
30  polygon.push_back(QPoint(100,200));
-
31  polygon.push_back(QPoint(000,100));
-
32  layerBundle[0].image->setPolygon(polygon);
+
21 
+
22 PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent)
+
23  : QWidget(parent){
+
24  this->Tool = nullptr;
+
25  this->setLayerDimensions(maxWidth, maxHeight);
+
26 
+
27  activeLayer = -1;
+
28 }
+
29 
+ +
31  delete Tool;
+
32 }
33 
-
34  this->addLayer(200,200,150,150,IntelliImage::ImageType::RASTERIMAGE);
-
35  layerBundle[1].image->drawPlain(QColor(0,255,0,255));
-
36  layerBundle[1].alpha=200;
-
37 
-
38  activeLayer=0;
-
39 }
-
40 
- -
42  delete Tool;
-
43 }
-
44 
-
45 void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){
-
46  //set standart parameter
-
47  this->maxWidth = maxWidth;
-
48  this->maxHeight = maxHeight;
-
49  Canvas = new QImage(maxWidth,maxHeight, QImage::Format_ARGB32);
-
50 
-
51  // Roots the widget to the top left even if resized
-
52  setAttribute(Qt::WA_StaticContents);
+
34 void PaintingArea::setRenderSettings(bool isFastRenderingOn){
+
35  if(isFastRenderingOn != renderSettings.isFastRenderering() && !Tool->getIsDrawing()) {
+
36  renderSettings.setFastRendering(isFastRenderingOn);
+
37  for(auto& layer : layerBundle) {
+
38  layer.image->updateRendererSetting(isFastRenderingOn);
+
39  }
+
40  }
+
41 }
+
42 
+
43 void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){
+
44  //set standart parameter
+
45  this->maxWidth = maxWidth;
+
46  this->maxHeight = maxHeight;
+
47  Canvas = new QImage(maxWidth,maxHeight, QImage::Format_ARGB32);
+
48 
+
49  // Roots the widget to the top left even if resized
+
50  setAttribute(Qt::WA_StaticContents);
+
51 
+
52 }
53 
-
54 }
-
55 
-
56 int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOffset, IntelliImage::ImageType type){
-
57  LayerObject newLayer;
-
58  newLayer.width = width;
-
59  newLayer.height = height;
-
60  newLayer.widthOffset = widthOffset;
-
61  newLayer.heightOffset = heightOffset;
- -
63  newLayer.image = new IntelliRasterImage(width,height,renderSettings.getFastRenderer());
-
64  }else if(type==IntelliImage::ImageType::SHAPEDIMAGE) {
-
65  newLayer.image = new IntelliShapedImage(width, height, renderSettings.getFastRenderer());
-
66  }
-
67  newLayer.alpha = 255;
-
68  this->layerBundle.push_back(newLayer);
-
69  activeLayer = static_cast<int>(layerBundle.size())-1;
-
70  return activeLayer;
-
71 }
+
54 int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOffset, IntelliImage::ImageType type){
+
55  LayerObject newLayer;
+
56  updateTools();
+
57  newLayer.width = width;
+
58  newLayer.height = height;
+
59  newLayer.widthOffset = widthOffset;
+
60  newLayer.heightOffset = heightOffset;
+ +
62  newLayer.image = new IntelliRasterImage(width,height,renderSettings.isFastRenderering());
+
63  }else if(type==IntelliImage::ImageType::SHAPEDIMAGE) {
+
64  newLayer.image = new IntelliShapedImage(width, height, renderSettings.isFastRenderering());
+
65  }
+
66  newLayer.alpha = 255;
+
67  this->layerBundle.push_back(newLayer);
+
68  activeLayer = static_cast<int>(layerBundle.size()) - 1;
+
69  return activeLayer;
+
70 }
+
71 
72 
-
73 
- -
75  if(idx<static_cast<int>(layerBundle.size())) {
-
76  this->layerBundle.erase(layerBundle.begin()+idx);
-
77  if(activeLayer>=idx && activeLayer != 0) {
-
78  activeLayer--;
-
79  }
-
80  }
-
81 }
-
82 
- -
84  if(activeLayer>=0 && activeLayer < static_cast<int>(layerBundle.size())) {
-
85  this->layerBundle.erase(layerBundle.begin()+activeLayer);
-
86  activeLayer--;
-
87  }
-
88 }
-
89 
- -
91  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
-
92  this->activeLayer=idx;
-
93  }
-
94 }
-
95 
-
96 void PaintingArea::setLayerAlpha(int idx, int alpha){
-
97  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
-
98  layerBundle[static_cast<size_t>(idx)].alpha=alpha;
+
73 void PaintingArea::deleteLayer(int idx, bool isTool){
+
74  if(!isTool) {
+
75  updateTools();
+
76  }
+
77  if(idx<static_cast<int>(layerBundle.size())) {
+
78  this->layerBundle.erase(layerBundle.begin() + idx);
+
79  if(activeLayer>=idx) {
+
80  activeLayer--;
+
81  }
+
82  if(activeLayer < 0 && layerBundle.size()) {
+
83  activeLayer = 0;
+
84  }
+
85  }
+
86 }
+
87 
+ +
89  if(activeLayer>=0 && activeLayer < static_cast<int>(layerBundle.size())) {
+
90  this->layerBundle.erase(layerBundle.begin() + activeLayer);
+
91  activeLayer--;
+
92  }
+
93 }
+
94 
+ +
96  updateTools();
+
97  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
+
98  this->activeLayer = idx;
99  }
100 }
101 
-
102 // Used to load the image and place it in the widget
-
103 bool PaintingArea::open(const QString &filePath){
-
104  if(this->activeLayer==-1) {
-
105  return false;
-
106  }
-
107  IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
-
108  bool open = active->loadImage(filePath);
-
109  active->calculateVisiblity();
-
110  update();
-
111  return open;
-
112 }
-
113 
-
114 // Save the current image
-
115 bool PaintingArea::save(const QString &filePath, const char*fileFormat){
-
116  if(layerBundle.size()==0) {
-
117  return false;
-
118  }
-
119  this->drawLayers(true);
-
120 
-
121  if(!strcmp(fileFormat,"PNG")) {
-
122  QImage visibleImage = Canvas->convertToFormat(QImage::Format_Indexed8);
-
123  fileFormat = "png";
-
124  if (visibleImage.save(filePath, fileFormat)) {
-
125  return true;
-
126  } else {
-
127  return false;
-
128  }
-
129  }
-
130 
-
131  if (Canvas->save(filePath, fileFormat)) {
-
132  return true;
-
133  } else {
-
134  return false;
-
135  }
-
136 }
-
137 
-
138 // Color the image area with white
-
139 void PaintingArea::floodFill(int r, int g, int b, int a){
-
140  if(this->activeLayer==-1) {
-
141  return;
-
142  }
-
143  IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
-
144  active->drawPlain(QColor(r, g, b, a));
-
145  update();
-
146 }
-
147 
- -
149  if(Tool!=nullptr) {
-
150  if(Tool->getIsDrawing()) {
-
151  IntelliTool* temp = copyActiveTool();
-
152  delete this->Tool;
-
153  this->Tool = temp;
-
154  }
-
155  }
-
156  layerBundle[static_cast<size_t>(activeLayer)].widthOffset += x;
-
157  layerBundle[static_cast<size_t>(activeLayer)].heightOffset += y;
+
102 void PaintingArea::setLayerAlpha(int idx, int alpha){
+
103  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
+
104  layerBundle[static_cast<size_t>(idx)].alpha = alpha;
+
105  }
+
106 }
+ +
108  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
+
109  if(layerBundle[static_cast<size_t>(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE) {
+
110  delete this->Tool;
+
111  this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true);
+
112  isSettingPolygon = true;
+
113  this->DummyGui->setToolWidth(5);
+
114  }
+
115  }
+
116 }
+
117 
+
118 // Used to load the image and place it in the widget
+
119 bool PaintingArea::open(const QString &filePath){
+
120  if(this->activeLayer==-1) {
+
121  return false;
+
122  }
+
123  IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
+
124  bool open = active->loadImage(filePath);
+
125  active->calculateVisiblity();
+
126  update();
+
127  return open;
+
128 }
+
129 
+
130 // Save the current image
+
131 bool PaintingArea::save(const QString &filePath, const char*fileFormat){
+
132  if(layerBundle.size()==0) {
+
133  return false;
+
134  }
+
135  this->drawLayers(true);
+
136 
+
137  if(!strcmp(fileFormat,"PNG")) {
+
138  QImage visibleImage = Canvas->convertToFormat(QImage::Format_Indexed8);
+
139  fileFormat = "png";
+
140  if (visibleImage.save(filePath, fileFormat)) {
+
141  return true;
+
142  } else {
+
143  return false;
+
144  }
+
145  }
+
146 
+
147  if (Canvas->save(filePath, fileFormat)) {
+
148  return true;
+
149  } else {
+
150  return false;
+
151  }
+
152 }
+
153 
+ +
155  updateTools();
+
156  layerBundle[static_cast<size_t>(activeLayer)].widthOffset += x;
+
157  layerBundle[static_cast<size_t>(activeLayer)].heightOffset += y;
158 }
159 
-
161  if(Tool != nullptr) {
-
162  if(Tool->getIsDrawing()) {
-
163  IntelliTool* temp = copyActiveTool();
-
164  delete this->Tool;
-
165  this->Tool = temp;
-
166  }
-
167  }
-
168  if(idx==1) {
-
169  this->selectLayerUp();
-
170  }else if(idx==-1) {
-
171  this->selectLayerDown();
-
172  }
-
173 }
-
174 
- -
176  if(Tool != nullptr) {
-
177  if(Tool->getIsDrawing()) {
-
178  IntelliTool* temp = copyActiveTool();
-
179  delete this->Tool;
-
180  this->Tool = temp;
-
181  }
-
182  }
-
183  if(a>=0 && a < static_cast<int>(layerBundle.size())) {
-
184  this->setLayerActive(a);
-
185  }
-
186 }
-
187 
- -
189  QColor clr = QColorDialog::getColor(colorPicker.getFirstColor(), nullptr, "Main Color", QColorDialog::DontUseNativeDialog);
-
190  this->colorPicker.setFirstColor(clr);
-
191 }
-
192 
- -
194  QColor clr = QColorDialog::getColor(colorPicker.getSecondColor(), nullptr, "Secondary Color", QColorDialog::DontUseNativeDialog);
-
195  this->colorPicker.setSecondColor(clr);
-
196 }
-
197 
- -
199  this->colorPicker.swapColors();
-
200 }
-
201 
- -
203  delete this->Tool;
-
204  Tool = new IntelliToolPen(this, &colorPicker, &Toolsettings);
-
205 }
-
206 
- -
208  delete this->Tool;
-
209  Tool = new IntelliToolPlainTool(this, &colorPicker, &Toolsettings);
-
210 }
-
211 
- -
213  delete this->Tool;
-
214  Tool = new IntelliToolLine(this, &colorPicker, &Toolsettings);
-
215 }
-
216 
- -
218  delete this->Tool;
-
219  Tool = new IntelliToolRectangle(this, &colorPicker, &Toolsettings);
-
220 }
-
221 
- -
223  delete this->Tool;
-
224  Tool = new IntelliToolCircle(this, &colorPicker, &Toolsettings);
-
225 }
- -
227  delete this->Tool;
-
228  Tool = new IntelliToolPolygon(this, &colorPicker, &Toolsettings);
-
229 }
-
230 
- -
232  delete this->Tool;
-
233  Tool = new IntelliToolFloodFill(this, &colorPicker, &Toolsettings);
-
234 }
-
235 
- -
237  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].width;
-
238 }
-
239 
- -
241  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].height;
-
242 }
-
243 
- -
245  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].image->getTypeOfImage();
-
246 }
-
247 
- -
249  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].image->getPolygonData();
-
250 }
-
251 
-
252 // If a mouse button is pressed check if it was the
-
253 // left button and if so store the current position
-
254 // Set that we are currently drawing
-
255 void PaintingArea::mousePressEvent(QMouseEvent*event){
+
161  updateTools();
+
162  if(idx==1) {
+
163  this->selectLayerUp();
+
164  }else if(idx==-1) {
+
165  this->selectLayerDown();
+
166  }
+
167  DummyGui->UpdateGui();
+
168 }
+
169 
+ +
171  updateTools();
+
172  if(a>=0 && a < static_cast<int>(layerBundle.size())) {
+
173  this->setLayerActive(a);
+
174  }
+
175 }
+
176 
+ +
178  QColor clr = QColorDialog::getColor(colorPicker.getFirstColor(), nullptr, "Main Color", QColorDialog::DontUseNativeDialog);
+
179  this->colorPicker.setFirstColor(clr);
+
180 }
+
181 
+ +
183  QColor clr = QColorDialog::getColor(colorPicker.getSecondColor(), nullptr, "Secondary Color", QColorDialog::DontUseNativeDialog);
+
184  this->colorPicker.setSecondColor(clr);
+
185 }
+
186 
+ +
188  this->colorPicker.swapColors();
+
189 }
+
190 
+ +
192  delete this->Tool;
+
193  Tool = new IntelliToolPen(this, &colorPicker, &Toolsettings);
+
194 }
+
195 
+ +
197  delete this->Tool;
+
198  Tool = new IntelliToolPlainTool(this, &colorPicker, &Toolsettings);
+
199 }
+
200 
+ +
202  delete this->Tool;
+
203  Tool = new IntelliToolLine(this, &colorPicker, &Toolsettings);
+
204 }
+
205 
+ +
207  delete this->Tool;
+
208  Tool = new IntelliToolRectangle(this, &colorPicker, &Toolsettings);
+
209 }
+
210 
+ +
212  delete this->Tool;
+
213  Tool = new IntelliToolCircle(this, &colorPicker, &Toolsettings);
+
214 }
+ +
216  delete this->Tool;
+
217  Tool = new IntelliToolPolygon(this, &colorPicker, &Toolsettings);
+
218 }
+
219 
+ +
221  delete this->Tool;
+
222  Tool = new IntelliToolFloodFill(this, &colorPicker, &Toolsettings);
+
223 }
+
224 
+ +
226  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].width;
+
227 }
+
228 
+ +
230  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].height;
+
231 }
+
232 
+ +
234  return this->maxWidth;
+
235 }
+
236 
+ +
238  return this->maxHeight;
+
239 }
+
240 
+ +
242  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].image->getTypeOfImage();
+
243 }
+
244 
+ +
246  return this->layerBundle[static_cast<unsigned long long>(activeLayer)].image->getPolygonData();
+
247 }
+
248 
+
249 // If a mouse button is pressed check if it was the
+
250 // left button and if so store the current position
+
251 // Set that we are currently drawing
+
252 void PaintingArea::mousePressEvent(QMouseEvent*event){
+
253  if(this->activeLayer < 0) {
+
254  return;
+
255  }
256  if(Tool == nullptr)
257  return;
-
258  int x = event->x()-layerBundle[static_cast<unsigned long long>(activeLayer)].widthOffset;
-
259  int y = event->y()-layerBundle[static_cast<unsigned long long>(activeLayer)].heightOffset;
+
258  int x = event->x() - layerBundle[static_cast<unsigned long long>(activeLayer)].widthOffset;
+
259  int y = event->y() - layerBundle[static_cast<unsigned long long>(activeLayer)].heightOffset;
260  if(event->button() == Qt::LeftButton) {
261  Tool->onMouseLeftPressed(x, y);
262  }else if(event->button() == Qt::RightButton) {
@@ -361,245 +357,295 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');}
269 // we call the drawline function which draws a line
270 // from the last position to the current
271 void PaintingArea::mouseMoveEvent(QMouseEvent*event){
-
272  if(Tool == nullptr)
+
272  if(this->activeLayer < 0) {
273  return;
-
274  int x = event->x()-layerBundle[static_cast<unsigned long long>(activeLayer)].widthOffset;
-
275  int y = event->y()-layerBundle[static_cast<unsigned long long>(activeLayer)].heightOffset;
-
276  Tool->onMouseMoved(x, y);
-
277  update();
-
278 }
-
279 
-
280 // If the button is released we set variables to stop drawing
-
281 void PaintingArea::mouseReleaseEvent(QMouseEvent*event){
-
282  if(Tool == nullptr)
-
283  return;
-
284  int x = event->x()-layerBundle[static_cast<unsigned long long>(activeLayer)].widthOffset;
-
285  int y = event->y()-layerBundle[static_cast<unsigned long long>(activeLayer)].heightOffset;
-
286  if(event->button() == Qt::LeftButton) {
-
287  Tool->onMouseLeftReleased(x, y);
-
288  }else if(event->button() == Qt::RightButton) {
-
289  Tool->onMouseRightReleased(x, y);
-
290  }
-
291  update();
-
292 }
-
293 
-
294 void PaintingArea::wheelEvent(QWheelEvent*event){
-
295  if(this->Tool != nullptr) {
-
296  QPoint numDegrees = event->angleDelta() / 8;
-
297  if(!numDegrees.isNull()) {
-
298  QPoint numSteps = numDegrees / 15;
-
299  Tool->onWheelScrolled(numSteps.y()* -1);
-
300  }
-
301  }
-
302 }
-
303 
-
304 // QPainter provides functions to draw on the widget
-
305 // The QPaintEvent is sent to widgets that need to
-
306 // update themselves
-
307 void PaintingArea::paintEvent(QPaintEvent*event){
-
308  this->drawLayers();
-
309 
-
310  QPainter painter(this);
-
311  QRect dirtyRec = event->rect();
-
312  painter.drawImage(dirtyRec, *Canvas, dirtyRec);
-
313  update();
-
314 }
-
315 
-
316 // Resize the image to slightly larger then the main window
-
317 // to cut down on the need to resize the image
-
318 void PaintingArea::resizeEvent(QResizeEvent*event){
-
319  //TODO wait till tool works
+
274  }
+
275  if(Tool == nullptr)
+
276  return;
+
277  int x = event->x() - layerBundle[static_cast<unsigned long long>(activeLayer)].widthOffset;
+
278  int y = event->y() - layerBundle[static_cast<unsigned long long>(activeLayer)].heightOffset;
+
279  Tool->onMouseMoved(x, y);
+
280  update();
+
281 }
+
282 
+
283 // If the button is released we set variables to stop drawing
+
284 void PaintingArea::mouseReleaseEvent(QMouseEvent*event){
+
285  if(this->activeLayer < 0)
+
286  return;
+
287  if(Tool == nullptr)
+
288  return;
+
289  int x = event->x() - layerBundle[static_cast<unsigned long long>(activeLayer)].widthOffset;
+
290  int y = event->y() - layerBundle[static_cast<unsigned long long>(activeLayer)].heightOffset;
+
291  if(event->button() == Qt::LeftButton) {
+
292  Tool->onMouseLeftReleased(x, y);
+
293  }else if(event->button() == Qt::RightButton) {
+
294  Tool->onMouseRightReleased(x, y);
+
295  }
+
296  update();
+
297 }
+
298 
+
299 void PaintingArea::wheelEvent(QWheelEvent*event){
+
300  if(this->activeLayer < 0)
+
301  return;
+
302  if(this->Tool != nullptr) {
+
303  QPoint numDegrees = event->angleDelta() / 8;
+
304  if(!numDegrees.isNull()) {
+
305  QPoint numSteps = numDegrees / 15;
+
306  Tool->onWheelScrolled(numSteps.y() * -1);
+
307  }
+
308  }
+
309 }
+
310 
+
311 // QPainter provides functions to draw on the widget
+
312 // The QPaintEvent is sent to widgets that need to
+
313 // update themselves
+
314 void PaintingArea::paintEvent(QPaintEvent*event){
+
315  this->drawLayers();
+
316 
+
317  QPainter painter(this);
+
318  QRect dirtyRec = event->rect();
+
319  painter.drawImage(dirtyRec, *Canvas, dirtyRec);
320  update();
321 }
322 
-
323 void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){
-
324  //TODO implement
-
325 }
-
326 
-
327 void PaintingArea::selectLayerUp(){
-
328  if(activeLayer!=-1 && static_cast<unsigned long long>(activeLayer)<layerBundle.size()-1) {
-
329  std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer+1)]);
-
330  activeLayer++;
-
331  }
+
323 //TODOJ Resize the image to slightly larger then the main window
+
324 // to cut down on the need to resize the image
+
325 void PaintingArea::resizeEvent(QResizeEvent*event){
+
326  //TODO wait till tool works
+
327  update();
+
328 }
+
329 
+
330 void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){
+
331  //TODO implement
332 }
333 
-
334 void PaintingArea::selectLayerDown(){
-
335  if(activeLayer!=-1 && activeLayer>0) {
-
336  std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer-1)]);
-
337  activeLayer--;
-
338  }
-
339 }
-
340 
-
341 void PaintingArea::drawLayers(bool forSaving){
-
342  if(forSaving) {
-
343  Canvas->fill(Qt::GlobalColor::transparent);
-
344  }else{
-
345  Canvas->fill(Qt::GlobalColor::black);
-
346  }
-
347  for(size_t i=0; i<layerBundle.size(); i++) {
-
348  LayerObject layer = layerBundle[i];
-
349  QImage cpy = layer.image->getDisplayable(layer.alpha);
-
350  QColor clr_0;
-
351  QColor clr_1;
-
352  for(int y=0; y<layer.height; y++) {
-
353  if(layer.heightOffset+y<0) continue;
-
354  if(layer.heightOffset+y>=maxHeight) break;
-
355  for(int x=0; x<layer.width; x++) {
-
356  if(layer.widthOffset+x<0) continue;
-
357  if(layer.widthOffset+x>=maxWidth) break;
-
358  clr_0=Canvas->pixelColor(layer.widthOffset+x, layer.heightOffset+y);
-
359  clr_1=cpy.pixelColor(x,y);
-
360  float t = static_cast<float>(clr_1.alpha())/255.f;
-
361  int r =static_cast<int>(static_cast<float>(clr_1.red())*(t)+static_cast<float>(clr_0.red())*(1.f-t)+0.5f);
-
362  int g =static_cast<int>(static_cast<float>(clr_1.green())*(t)+static_cast<float>(clr_0.green())*(1.f-t)+0.5f);
-
363  int b =static_cast<int>(static_cast<float>(clr_1.blue())*(t)+static_cast<float>(clr_0.blue()*(1.f-t))+0.5f);
-
364  int a =std::min(clr_0.alpha()+clr_1.alpha(), 255);
-
365  clr_0.setRed(r);
-
366  clr_0.setGreen(g);
-
367  clr_0.setBlue(b);
-
368  clr_0.setAlpha(a);
-
369 
-
370  Canvas->setPixelColor(layer.widthOffset+x, layer.heightOffset+y, clr_0);
-
371  }
-
372  }
-
373  }
-
374 }
-
375 
-
376 void PaintingArea::createTempTopLayer(int idx){
-
377  if(idx>=0) {
-
378  LayerObject newLayer;
-
379  newLayer.alpha = 255;
-
380  newLayer.height = layerBundle[static_cast<unsigned long long>(idx)].height;
-
381  newLayer.width = layerBundle[static_cast<unsigned long long>(idx)].width;
-
382  newLayer.heightOffset = layerBundle[static_cast<unsigned long long>(idx)].heightOffset;
-
383  newLayer.widthOffset = layerBundle[static_cast<unsigned long long>(idx)].widthOffset;
-
384  newLayer.image = layerBundle[static_cast<unsigned long long>(idx)].image->getDeepCopy();
-
385  layerBundle.insert(layerBundle.begin()+idx+1,newLayer);
-
386  }
-
387 }
-
388 
-
389 IntelliTool* PaintingArea::copyActiveTool(){
-
390  switch(Tool->getTooltype()) {
- - - - - - - -
398  default: return nullptr;
-
399  }
-
400 }
-
401 
- -
403  return activeLayer;
-
404 }
-
405 
- -
407  return layerBundle[activeLayer].image;
-
408 }
+
334 void PaintingArea::selectLayerUp(){
+
335  updateTools();
+
336  if(activeLayer!=-1 && static_cast<unsigned long long>(activeLayer)<layerBundle.size() - 1) {
+
337  std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer + 1)]);
+
338  activeLayer++;
+
339  }
+
340 }
+
341 
+
342 void PaintingArea::selectLayerDown(){
+
343  updateTools();
+
344  if(activeLayer!=-1 && activeLayer>0) {
+
345  std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer - 1)]);
+
346  activeLayer--;
+
347  }
+
348 }
+
349 
+
350 void PaintingArea::drawLayers(bool forSaving){
+
351  if(forSaving) {
+
352  Canvas->fill(Qt::GlobalColor::transparent);
+
353  }else{
+
354  Canvas->fill(Qt::GlobalColor::black);
+
355  }
+
356  for(size_t i = 0; i<layerBundle.size(); i++) {
+
357  LayerObject layer = layerBundle[i];
+
358  QImage cpy = layer.image->getDisplayable(layer.alpha);
+
359  QColor clr_0;
+
360  QColor clr_1;
+
361  for(int y = 0; y<layer.height; y++) {
+
362  if(layer.heightOffset + y<0) continue;
+
363  if(layer.heightOffset + y>=maxHeight) break;
+
364  for(int x = 0; x<layer.width; x++) {
+
365  if(layer.widthOffset + x<0) continue;
+
366  if(layer.widthOffset + x>=maxWidth) break;
+
367  clr_0 = Canvas->pixelColor(layer.widthOffset + x, layer.heightOffset + y);
+
368  clr_1 = cpy.pixelColor(x,y);
+
369  float t = static_cast<float>(clr_1.alpha()) / 255.f;
+
370  int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
+
371  int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
+
372  int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
+
373  int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
+
374  clr_0.setRed(r);
+
375  clr_0.setGreen(g);
+
376  clr_0.setBlue(b);
+
377  clr_0.setAlpha(a);
+
378 
+
379  Canvas->setPixelColor(layer.widthOffset + x, layer.heightOffset + y, clr_0);
+
380  }
+
381  }
+
382  }
+
383 }
+
384 
+
385 bool PaintingArea::createTempTopLayer(int idx){
+
386  if(idx>=0) {
+
387  LayerObject newLayer;
+
388  newLayer.alpha = 255;
+
389  newLayer.height = layerBundle[static_cast<unsigned long long>(idx)].height;
+
390  newLayer.width = layerBundle[static_cast<unsigned long long>(idx)].width;
+
391  newLayer.heightOffset = layerBundle[static_cast<unsigned long long>(idx)].heightOffset;
+
392  newLayer.widthOffset = layerBundle[static_cast<unsigned long long>(idx)].widthOffset;
+
393  newLayer.image = layerBundle[static_cast<unsigned long long>(idx)].image->getDeepCopy();
+
394  layerBundle.insert(layerBundle.begin() + idx + 1,newLayer);
+
395  return true;
+
396  }
+
397  return false;
+
398 }
+
399 
+
400 IntelliTool* PaintingArea::copyActiveTool(){
+
401  switch(Tool->getTooltype()) {
+ + + + + + + +
409  default: return nullptr;
+
410  }
+
411 }
+
412 
+ +
414  return activeLayer;
+
415 }
+
416 
+ +
418  if(activeLayer<0) {
+
419  return nullptr;
+
420  }
+
421  return layerBundle[static_cast<size_t>(activeLayer)].image;
+
422 }
+
423 
+ +
425  QImage returnImage;
+
426  if(activeLayer<0) {
+
427  returnImage = QImage(QSize(10,10),QImage::Format_ARGB32);
+
428  returnImage.fill(QColor(255,255,255,255));
+
429  }
+
430  else{
+
431  returnImage = layerBundle[static_cast<size_t>(activeLayer)].image->getImageData();
+
432  if(renderSettings.isFastRenderering()) {
+
433  returnImage = returnImage.convertToFormat(QImage::Format_ARGB32);
+
434  }
+
435  }
+
436  return returnImage;
+
437 }
+
438 
+
439 void PaintingArea::updateTools(){
+
440  if(Tool!=nullptr) {
+
441  if(Tool->getIsDrawing()) {
+
442  IntelliTool* temp = copyActiveTool();
+
443  delete this->Tool;
+
444  this->Tool = temp;
+
445  }
+
446  if(isSettingPolygon) {
+
447  delete this->Tool;
+
448  this->Tool = nullptr;
+
449  isSettingPolygon = false;
+
450  }
+
451  }
+
452 }
-
int getWidthOfActive()
The getWidthOfActive gets the horizontal dimensions of the active layer.
- -
void createCircleTool()
+
int getWidthOfActive()
The getWidthOfActive gets the horizontal dimensions of the active layer.
+ +
void createCircleTool()
virtual void onMouseRightPressed(int x, int y)
A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
Definition: IntelliTool.cpp:15
virtual void onMouseLeftReleased(int x, int y)
A function managing the left click Released of a Mouse. Call this in child classes!
Definition: IntelliTool.cpp:33
-
IntelliImage * getImageOfActiveLayer()
-
void mouseReleaseEvent(QMouseEvent *event) override
-
void createRectangleTool()
+
void setRenderSettings(bool isFastRenderingOn)
setRenderSettings updates all Images to the new Rendersetting.
+
IntelliImage * getImageOfActiveLayer()
+
void mouseReleaseEvent(QMouseEvent *event) override
+
void createRectangleTool()
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:26
+ -
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
-
void setLayerAlpha(int idx, int alpha)
The setAlphaOfLayer method sets the alpha value of a specific layer.
- -
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
+
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
+
void setLayerAlpha(int idx, int alpha)
The setAlphaOfLayer method sets the alpha value of a specific layer.
+ +
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
-
void floodFill(int r, int g, int b, int a)
The floodFill method fills a the active layer with a given color.
+ +
void deleteLayer(int idx, bool isTool=false)
The deleteLayer method removes a layer at a given idx.
The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
void setSecondColor(QColor Color)
A function to set the secondary color.
The IntelliShapedImage manages a Shapedimage.
QColor getSecondColor()
A function to read the secondary selected color.
int heightOffset
Definition: PaintingArea.h:30
-
void deleteLayer(int idx)
The deleteLayer method removes a layer at a given idx.
-
int getHeightOfActive()
The getHeightOfActive gets the vertical dimensions of the active layer.
+
int getHeightOfActive()
The getHeightOfActive gets the vertical dimensions of the active layer.
virtual QImage getDisplayable(const QSize &displaySize, int alpha)=0
A function returning the displayable ImageData in a requested transparence and size.
-
void createPlainTool()
-
void wheelEvent(QWheelEvent *event) override
-
bool getFastRenderer()
The getfastRenderer gets the value of the flag for the fastRenderer setting.
+
void createPlainTool()
+
void wheelEvent(QWheelEvent *event) override
The LayerObject struct holds all the information needed to construct a layer.
Definition: PaintingArea.h:25
-
void createPenTool()
+
void createPenTool()
-
void mousePressEvent(QMouseEvent *event) override
+
void mousePressEvent(QMouseEvent *event) override
The IntelliToolRectangle class represents a tool to draw a rectangle.
-
void createLineTool()
+
void createLineTool()
The IntelliToolPen class represents a tool to draw a line.
-
void colorPickerSetSecondColor()
The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
+
void colorPickerSetSecondColor()
The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
virtual void onMouseRightReleased(int x, int y)
A function managing the right click Released of a Mouse. Merging the Canvas to Active....
Definition: IntelliTool.cpp:22
-
void colorPickerSetFirstColor()
The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
- - -
Tooltype getTooltype()
Definition: IntelliTool.cpp:85
-
IntelliImage::ImageType getTypeOfImageRealLayer()
+
void colorPickerSetFirstColor()
The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
+ + +
Tooltype getTooltype()
Definition: IntelliTool.cpp:96
+
IntelliImage::ImageType getTypeOfImageRealLayer()
-
~PaintingArea() override
This deconstructor is used to clear up the memory and remove the currently active window.
+
bool isFastRenderering()
The getfastRenderer gets the value of the flag for the fastRenderer setting.
+
~PaintingArea() override
This deconstructor is used to clear up the memory and remove the currently active window.
void mouseMoveEvent(QMouseEvent *event) override
-
int getNumberOfActiveLayer()
+
int getNumberOfActiveLayer()
void setFirstColor(QColor Color)
A function to set the primary color.
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
- -
void slotDeleteActiveLayer()
The slotDeleteActiveLayer method handles the deletion of the active layer.
-
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
-
void createPolygonTool()
+ +
void slotDeleteActiveLayer()
The slotDeleteActiveLayer method handles the deletion of the active layer.
+
void setToolWidth(int value)
+
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
+
void createPolygonTool()
void moveActiveLayer(int idx)
The moveActiveLayer moves the active layer to a specific position in the layer stack.
-
IntelliColorPicker colorPicker
Definition: PaintingArea.h:175
-
PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
-
bool getIsDrawing()
Definition: IntelliTool.cpp:89
+
IntelliColorPicker colorPicker
Definition: PaintingArea.h:182
+
PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
+
bool getIsDrawing()
QColor getFirstColor()
A function to read the primary selected color.
-
void createFloodFillTool()
-
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
-
void paintEvent(QPaintEvent *event) override
- - +
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
+
void createFloodFillTool()
+
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
+
void paintEvent(QPaintEvent *event) override
+
void setFastRendering(bool Updatedsetting)
setFastRendering sets fastRendering to Updatedsetting.
+ + +
IntelliImage * image
Definition: PaintingArea.h:26
virtual bool loadImage(const QString &filePath)
A function that loads and sclaes an image to the fitting dimensions.
-
std::vector< QPoint > getPolygonDataOfRealLayer()
-
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:174
-
void resizeEvent(QResizeEvent *event) override
- +
std::vector< QPoint > getPolygonDataOfRealLayer()
+
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:181
+
void resizeEvent(QResizeEvent *event) override
+
void setPolygon(int idx)
setPolygon is used for setting polygondata, it only works on RASTER images
+
void swapColors()
A function switching primary and secondary color.
The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
-
void colorPickerSwapColors()
The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
+
void colorPickerSwapColors()
The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
The IntelliToolCircle class represents a tool to draw a circle.
-
void movePositionActive(int x, int y)
The movePositionActive method moves the active layer to certain position.
+
void movePositionActive(int x, int y)
The movePositionActive method moves the active layer to certain position.
An abstract class which manages the basic IntelliImage operations.
Definition: IntelliImage.h:19
-
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:42
+
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:43
The IntelliToolPolygon managed the Drawing of Polygonforms.
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
-
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:47
+
virtual void onWheelScrolled(int value)
A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
Definition: IntelliTool.cpp:48
The IntelliRasterImage manages a RASTERIMAGE.
-
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
+
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
ImageType
The Types, which an Image can be.
Definition: IntelliImage.h:26
-
virtual void drawPlain(const QColor &color)
A function that clears the whole image in a given Color.
- +
The IntelliToolFloodFill class represents a tool to draw a line.
diff --git a/docs/html/_painting_area_8h.html b/docs/html/_painting_area_8h.html index aa75a8f..ca6396d 100644 --- a/docs/html/_painting_area_8h.html +++ b/docs/html/_painting_area_8h.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Layer/PaintingArea.h File Reference +IntelliPhoto: src/Layer/PaintingArea.h File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -120,10 +116,10 @@ Classes diff --git a/docs/html/_painting_area_8h_source.html b/docs/html/_painting_area_8h_source.html index bddb4f6..a27e0fe 100644 --- a/docs/html/_painting_area_8h_source.html +++ b/docs/html/_painting_area_8h_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Layer/PaintingArea.h Source File +IntelliPhoto: src/Layer/PaintingArea.h Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -112,178 +108,182 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html','');});
28  int height;
-
31  int alpha=255;
+
31  int alpha = 255;
32 };
33 
37 class PaintingArea : public QWidget
38 {
-
39 // Declares our class as a QObject which is the base class
-
40 // for all Qt objects
-
41 // QObjects handle events
-
42 Q_OBJECT
-
43 friend IntelliTool;
-
44 friend IntelliPhotoGui;
-
45 public:
-
52 PaintingArea(int maxWidth=600, int maxHeight=600, QWidget*parent = nullptr);
-
53 
-
57 ~PaintingArea() override;
-
58 
-
59 // Handles all events
-
60 
-
66 bool open(const QString &filePath);
-
73 bool save(const QString &filePath, const char*fileFormat);
-
74 
-
84 int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE);
-
95 int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE);
-
100 void deleteLayer(int idx);
-
105 void setLayerActive(int idx);
-
111 void setLayerAlpha(int idx, int alpha);
-
119 void floodFill(int r, int g, int b, int a);
-
125 void movePositionActive(int x, int y);
-
130 void moveActiveLayer(int idx);
-
131 
-
132 //change properties of colorPicker
- - -
144 void colorPickerSwapColors();
-
145 
-
146 // Create tools
-
147 void createPenTool();
-
148 void createPlainTool();
-
149 void createLineTool();
-
150 void createRectangleTool();
-
151 void createCircleTool();
-
152 void createPolygonTool();
-
153 void createFloodFillTool();
-
154 
-
159 int getWidthOfActive();
-
164 int getHeightOfActive();
-
165 
- -
167 
-
168 std::vector<QPoint> getPolygonDataOfRealLayer();
-
169 
- -
171 
- -
173 
- - -
176 
-
177 public slots:
-
178 // Events to handle
-
183 void slotActivateLayer(int a);
-
187 void slotDeleteActiveLayer();
-
188 
-
189 protected:
-
190 void mousePressEvent(QMouseEvent*event) override;
-
191 void mouseMoveEvent(QMouseEvent*event) override;
-
192 void mouseReleaseEvent(QMouseEvent*event) override;
-
193 
-
194 void wheelEvent(QWheelEvent*event) override;
-
195 // Updates the painting area where we are painting
-
196 void paintEvent(QPaintEvent*event) override;
-
197 
-
198 // Makes sure the area we are drawing on remains
-
199 // as large as the widget
-
200 void resizeEvent(QResizeEvent*event) override;
+
39 Q_OBJECT
+
40 friend IntelliTool;
+
41 friend IntelliPhotoGui;
+
42 public:
+
49 PaintingArea(int maxWidth = 600, int maxHeight = 600, QWidget*parent = nullptr);
+
50 
+
54 ~PaintingArea() override;
+
55 
+
60 void setRenderSettings(bool isFastRenderingOn);
+
61 
+
67 bool open(const QString &filePath);
+
74 bool save(const QString &filePath, const char*fileFormat);
+
75 
+
85 int addLayer(int width, int height, int widthOffset = 0, int heightOffset = 0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE);
+
96 int addLayerAt(int idx, int width, int height, int widthOffset = 0, int heightOffset = 0, IntelliImage::ImageType type = IntelliImage::ImageType::RASTERIMAGE);
+
102 void deleteLayer(int idx, bool isTool = false);
+
107 void setLayerActive(int idx);
+
113 void setLayerAlpha(int idx, int alpha);
+
118 void setPolygon(int idx);
+
124 void movePositionActive(int x, int y);
+
129 void moveActiveLayer(int idx);
+
130 
+ + +
142 void colorPickerSwapColors();
+
143 
+
144 void createPenTool();
+
145 void createPlainTool();
+
146 void createLineTool();
+
147 void createRectangleTool();
+
148 void createCircleTool();
+
149 void createPolygonTool();
+
150 void createFloodFillTool();
+
151 
+
156 int getWidthOfActive();
+
161 int getHeightOfActive();
+
162 
+
163 int getMaxWidth();
+
164 
+
165 int getMaxHeight();
+
166 
+ +
168 
+
169 std::vector<QPoint> getPolygonDataOfRealLayer();
+
170 
+ +
172 
+ +
174 
+ +
180 
+ + +
183 
+
184 public slots:
+
189 void slotActivateLayer(int a);
+
193 void slotDeleteActiveLayer();
+
194 
+
195 protected:
+
196 void mousePressEvent(QMouseEvent*event) override;
+
197 void mouseMoveEvent(QMouseEvent*event) override;
+
198 void mouseReleaseEvent(QMouseEvent*event) override;
+
199 
+
200 void wheelEvent(QWheelEvent*event) override;
201 
-
202 private:
-
203 void setLayerDimensions(int maxWidth, int maxHeight);
-
204 void selectLayerUp();
-
205 void selectLayerDown();
-
206 IntelliTool* copyActiveTool();
-
207 
-
208 QImage* Canvas;
-
209 int maxWidth;
-
210 int maxHeight;
+
202 void paintEvent(QPaintEvent*event) override;
+
203 
+
204 void resizeEvent(QResizeEvent*event) override;
+
205 
+
206 private:
+
207 void setLayerDimensions(int maxWidth, int maxHeight);
+
208 void selectLayerUp();
+
209 void selectLayerDown();
+
210 IntelliTool* copyActiveTool();
211 
-
212 IntelliRenderSettings renderSettings;
-
213 IntelliTool* Tool;
-
214 IntelliPhotoGui* DumpyGui;
+
212 QImage* Canvas;
+
213 int maxWidth;
+
214 int maxHeight;
215 
-
216 std::vector<LayerObject> layerBundle;
-
217 int activeLayer=-1;
-
218 
-
219 void drawLayers(bool forSaving=false);
-
220 
-
221 void resizeLayer(QImage*image_res, const QSize &newSize);
-
222 
-
223 // Helper for Tool
-
224 // TODO: Always create this layer on top and return the id here!
-
225 void createTempTopLayer(int idx);
-
226 };
-
227 
-
228 #endif
+
216 bool isSettingPolygon = false;
+
217 
+
218 IntelliRenderSettings renderSettings;
+
219 IntelliTool* Tool;
+
220 IntelliPhotoGui* DummyGui;
+
221 
+
222 std::vector<LayerObject> layerBundle;
+
223 int activeLayer = -1;
+
224 
+
225 void drawLayers(bool forSaving = false);
+
226 
+
227 void resizeLayer(QImage*image_res, const QSize &newSize);
+
228 
+
229 bool createTempTopLayer(int idx);
+
230 
+
231 void updateTools();
+
232 };
+
233 
+
234 #endif
-
int getWidthOfActive()
The getWidthOfActive gets the horizontal dimensions of the active layer.
-
void createCircleTool()
-
IntelliImage * getImageOfActiveLayer()
-
void mouseReleaseEvent(QMouseEvent *event) override
-
void createRectangleTool()
+
int getWidthOfActive()
The getWidthOfActive gets the horizontal dimensions of the active layer.
+
void createCircleTool()
+
void setRenderSettings(bool isFastRenderingOn)
setRenderSettings updates all Images to the new Rendersetting.
+
IntelliImage * getImageOfActiveLayer()
+
void mouseReleaseEvent(QMouseEvent *event) override
+
void createRectangleTool()
+ -
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
-
void setLayerAlpha(int idx, int alpha)
The setAlphaOfLayer method sets the alpha value of a specific layer.
+
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
+
void setLayerAlpha(int idx, int alpha)
The setAlphaOfLayer method sets the alpha value of a specific layer.
-
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
+
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
-
The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program.
-
void floodFill(int r, int g, int b, int a)
The floodFill method fills a the active layer with a given color.
+ +
void deleteLayer(int idx, bool isTool=false)
The deleteLayer method removes a layer at a given idx.
+
The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
int heightOffset
Definition: PaintingArea.h:30
-
void deleteLayer(int idx)
The deleteLayer method removes a layer at a given idx.
-
int getHeightOfActive()
The getHeightOfActive gets the vertical dimensions of the active layer.
-
void createPlainTool()
-
void wheelEvent(QWheelEvent *event) override
+
int getHeightOfActive()
The getHeightOfActive gets the vertical dimensions of the active layer.
+
void createPlainTool()
+
void wheelEvent(QWheelEvent *event) override
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:37
The LayerObject struct holds all the information needed to construct a layer.
Definition: PaintingArea.h:25
-
void createPenTool()
-
void mousePressEvent(QMouseEvent *event) override
+
void createPenTool()
+
void mousePressEvent(QMouseEvent *event) override
-
void createLineTool()
-
void colorPickerSetSecondColor()
The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
-
void colorPickerSetFirstColor()
The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
+
void createLineTool()
+
void colorPickerSetSecondColor()
The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
+
void colorPickerSetFirstColor()
The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer...
-
IntelliImage::ImageType getTypeOfImageRealLayer()
+
IntelliImage::ImageType getTypeOfImageRealLayer()
-
~PaintingArea() override
This deconstructor is used to clear up the memory and remove the currently active window.
+
~PaintingArea() override
This deconstructor is used to clear up the memory and remove the currently active window.
void mouseMoveEvent(QMouseEvent *event) override
-
int getNumberOfActiveLayer()
+
int getNumberOfActiveLayer()
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:14
-
void slotDeleteActiveLayer()
The slotDeleteActiveLayer method handles the deletion of the active layer.
-
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
-
void createPolygonTool()
+
void slotDeleteActiveLayer()
The slotDeleteActiveLayer method handles the deletion of the active layer.
+
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
+
void createPolygonTool()
void moveActiveLayer(int idx)
The moveActiveLayer moves the active layer to a specific position in the layer stack.
-
IntelliColorPicker colorPicker
Definition: PaintingArea.h:175
-
PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
+
IntelliColorPicker colorPicker
Definition: PaintingArea.h:182
+
PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
-
void createFloodFillTool()
-
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
+
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
+
void createFloodFillTool()
+
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
The IntelliColorPicker manages the selected colors for one whole project.
-
void paintEvent(QPaintEvent *event) override
- +
void paintEvent(QPaintEvent *event) override
+
IntelliImage * image
Definition: PaintingArea.h:26
-
std::vector< QPoint > getPolygonDataOfRealLayer()
-
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:174
-
void resizeEvent(QResizeEvent *event) override
-
void colorPickerSwapColors()
The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
-
void movePositionActive(int x, int y)
The movePositionActive method moves the active layer to certain position.
+
std::vector< QPoint > getPolygonDataOfRealLayer()
+
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:181
+
void resizeEvent(QResizeEvent *event) override
+
void setPolygon(int idx)
setPolygon is used for setting polygondata, it only works on RASTER images
+
void colorPickerSwapColors()
The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
+
void movePositionActive(int x, int y)
The movePositionActive method moves the active layer to certain position.
An abstract class which manages the basic IntelliImage operations.
Definition: IntelliImage.h:19
-
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
+
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
ImageType
The Types, which an Image can be.
Definition: IntelliImage.h:26
diff --git a/docs/html/_tool_2_intelli_color_picker_8cpp.html b/docs/html/_tool_2_intelli_color_picker_8cpp.html index 632c920..85db597 100644 --- a/docs/html/_tool_2_intelli_color_picker_8cpp.html +++ b/docs/html/_tool_2_intelli_color_picker_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliColorPicker.cpp File Reference +IntelliPhoto: src/Tool/IntelliColorPicker.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -99,10 +95,10 @@ $(document).ready(function(){initNavTree('_tool_2_intelli_color_picker_8cpp.html diff --git a/docs/html/_tool_2_intelli_color_picker_8cpp_source.html b/docs/html/_tool_2_intelli_color_picker_8cpp_source.html index 59eeb44..3f2f951 100644 --- a/docs/html/_tool_2_intelli_color_picker_8cpp_source.html +++ b/docs/html/_tool_2_intelli_color_picker_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/Tool/IntelliColorPicker.cpp Source File +IntelliPhoto: src/Tool/IntelliColorPicker.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -138,10 +134,10 @@ $(document).ready(function(){initNavTree('_tool_2_intelli_color_picker_8cpp_sour diff --git a/docs/html/annotated.html b/docs/html/annotated.html index ab6e5e8..b248c5f 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
- +
@@ -94,22 +90,23 @@ $(document).ready(function(){initNavTree('annotated.html','');}); - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
 CIntelliColorPickerThe IntelliColorPicker manages the selected colors for one whole project
 CIntelliImageAn abstract class which manages the basic IntelliImage operations
 CIntelliPhotoGuiHandles the graphical user interface for the intelliPhoto program
 CIntelliRasterImageThe IntelliRasterImage manages a RASTERIMAGE
 CIntelliRenderSettings
 CIntelliShapedImageThe IntelliShapedImage manages a Shapedimage
 CIntelliToolAn abstract class that manages the basic events, like mouse clicks or scrolls events
 CIntelliToolCircleTool to draw a circle
 CIntelliToolFloodFillTool to flood FIll a certian area
 CIntelliToolLineThe IntelliToolFloodFill class represents a tool to draw a line
 CIntelliToolPenTool to draw a line
 CIntelliToolPlainToolTool to fill the whole canvas with one color
 CIntelliToolPolygonThe IntelliToolPolygon managed the Drawing of Polygonforms
 CIntelliToolRectangleTool to draw a rectangle
 CIntelliToolsettings
 CLayerObjectThe LayerObject struct holds all the information needed to construct a layer
 CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project
 CTriangleThe Triangle struct holds the 3 vertices of a triangle
 CIntelliInputDialog
 CIntelliPhotoGuiThe IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program
 CIntelliRasterImageThe IntelliRasterImage manages a RASTERIMAGE
 CIntelliRenderSettings
 CIntelliShapedImageThe IntelliShapedImage manages a Shapedimage
 CIntelliToolAn abstract class that manages the basic events, like mouse clicks or scrolls events
 CIntelliToolCircleTool to draw a circle
 CIntelliToolFloodFillTool to flood FIll a certian area
 CIntelliToolLineThe IntelliToolFloodFill class represents a tool to draw a line
 CIntelliToolPenTool to draw a line
 CIntelliToolPlainToolTool to fill the whole canvas with one color
 CIntelliToolPolygonThe IntelliToolPolygon managed the Drawing of Polygonforms
 CIntelliToolRectangleTool to draw a rectangle
 CIntelliToolsettings
 CLayerObjectThe LayerObject struct holds all the information needed to construct a layer
 CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project
 CTriangleThe Triangle struct holds the 3 vertices of a triangle
@@ -119,7 +116,7 @@ $(document).ready(function(){initNavTree('annotated.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js index 091e80a..0bd7c03 100644 --- a/docs/html/annotated_dup.js +++ b/docs/html/annotated_dup.js @@ -2,6 +2,7 @@ var annotated_dup = [ [ "IntelliColorPicker", "class_intelli_color_picker.html", "class_intelli_color_picker" ], [ "IntelliImage", "class_intelli_image.html", "class_intelli_image" ], + [ "IntelliInputDialog", "class_intelli_input_dialog.html", "class_intelli_input_dialog" ], [ "IntelliPhotoGui", "class_intelli_photo_gui.html", "class_intelli_photo_gui" ], [ "IntelliRasterImage", "class_intelli_raster_image.html", "class_intelli_raster_image" ], [ "IntelliRenderSettings", "class_intelli_render_settings.html", "class_intelli_render_settings" ], diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png index c8f3a921ce9f497ad2f097f6f7fe16e389db6fff..6054c8c7c29cf1b903e5c5a42df223373c951058 100644 GIT binary patch delta 654 zcmV;90&)G51*Qd%B!6v5L_t(|0qvd5PZL2H#^2f5Ww#%&v=nOXwsc9i+Y*tB%EhFK z#`2LMAwm%erqx=p6yzWnPhL2AGcobVfe^jw$&-oEAUEBzErynU5fcJQ6HXWtqq`eR zI@Nz+^1ON9$^0fe@65AzwDf5C_~Kun7Q! zPUf*PlRkzzc*kQMCWwy7CT?UX$rRuet#`I1w6#T8# zUR70(4InW$*MIoQ*FK*pSuK_|HLJcbfIIh+jX>CJF>i>Xc#>7K(*FQ`e31fD8^bX3 zxoqwoirq~B0HI{N&6aYxT$P<%ZVcUy#{qzliK6g#za&vw%NNjWECvA39M8_U&W3rO z|A3}vX8{13W7KN3E((IMkNf)j0RWogNmrM%n`W4gXn*R~3;+<~5rwLf6fiu3CT~sy z0HKFAyDi?~aO4ZS`AKvmIt2iPGCt8~rD-Nn$midq@rjAX#mk(@^hyvsKMMI><0f%1 z6lw%k9ga>j!_aHBTJ5uO)z`x*`Zq6$8-N3Z4LUcoRh4g`aB;DL5A9?hRy#l5}t zQ$LK1j(^tcZys;AiN<)QR4RTtwY@)J^m~P6*~!+{wv%$HxI%bxaAZW!8&0QF);d_P zl*`WvATm7MsUObc_3Cp`18M|tZD?qj=i8%vJFiwNm4DtIU5!NYnwvR{>1efDF?uKd o&44T?wZql+tCgn!0L}3Sg;k~>v9S}PAb+qd$FZ$eYYPAbmy11C+}SVB1VE7(DCsdbf35zu5s+R?6*o5M$9*{XugJ2z(=Zz2 z=+WF908sig7>#Da<*Z7l5qQ+Uq!-PPc(;UavgT62>iGtN&6%@MfGGZci;A_p-}KRxk1e|%>o5XPv=79*}jqO?fDS`>{5T$ z@R{LB(x_pc<2TKwxd8x_(7kMSClU^e491t5&8BmAYKM`L^n}MF?UG~`0HAmL0};%% UQ(h1DQ2+n{07*qoM6N<$f`1`88UO$Q diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png index 2f5233e037441b30ff2eef5fe837efde092e7165..fd803bcfc5d20493e6327f61833461c497583b74 100644 GIT binary patch delta 115 zcmV-(0F3{P0gwTZBy3knL_t(|0qvd34S*mJM4#A_;cPb?v@E$n39 z>}P5KT7_l3takuk`d{X#4WO6i`i%WS@o}8I9|Wb(ug^+?dTE~1dF)Rt0uAg!a08c# V7-}v;joJVJ002ovPDHLkV1hy0F|hyu delta 111 zcmbQh*uywMB_r6=#WAFU@$KAh-UbC8m-(9{luKA<0-;&xxdmn_yPWiEub)55uqQOz zdQUv#zAyXV1X>@^Is0|y^X7-e2Af?Cs`k`|3))P7w{yvs*o_<}AGi;4wrWaS9W*v9 PVE_V8S3j3^P6Ju%B diff --git a/docs/html/class_intelli_color_picker-members.html b/docs/html/class_intelli_color_picker-members.html index 8b26608..b709abb 100644 --- a/docs/html/class_intelli_color_picker-members.html +++ b/docs/html/class_intelli_color_picker-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -107,7 +103,7 @@ $(document).ready(function(){initNavTree('class_intelli_color_picker.html','');}
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_color_picker.html b/docs/html/class_intelli_color_picker.html index 6d692e6..393deac 100644 --- a/docs/html/class_intelli_color_picker.html +++ b/docs/html/class_intelli_color_picker.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliColorPicker Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -301,8 +297,8 @@ Public Member Functions

The documentation for this class was generated from the following files: @@ -312,7 +308,7 @@ Public Member Functions + doxygen 1.8.17 diff --git a/docs/html/class_intelli_image-members.html b/docs/html/class_intelli_image-members.html index 0b2d551..ffc6d09 100644 --- a/docs/html/class_intelli_image-members.html +++ b/docs/html/class_intelli_image-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -98,7 +94,7 @@ $(document).ready(function(){initNavTree('class_intelli_image.html','');}); drawPixel(const QPoint &p1, const QColor &color)IntelliImagevirtual drawPlain(const QColor &color)IntelliImagevirtual drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)IntelliImagevirtual - fastRendererIntelliImageprotected + fastRendereringIntelliImageprotected getDeepCopy()=0IntelliImagepure virtual getDisplayable(const QSize &displaySize, int alpha)=0IntelliImagepure virtual getDisplayable(int alpha=255)=0IntelliImagepure virtual @@ -111,10 +107,11 @@ $(document).ready(function(){initNavTree('class_intelli_image.html','');}); IntelliImage(int width, int height, bool fastRendererOn)IntelliImage loadImage(const QString &filePath)IntelliImagevirtual resizeImage(QImage *image, const QSize &newSize)IntelliImageprotected - setPolygon(const std::vector< QPoint > &polygonData)=0IntelliImagepure virtual - TypeOfImageIntelliImageprotected - updateRendererSetting(bool fastRendererOn)IntelliImagevirtual - ~IntelliImage()=0IntelliImagepure virtual + setImageData(const QImage &newData)IntelliImagevirtual + setPolygon(const std::vector< QPoint > &polygonData)=0IntelliImagepure virtual + TypeOfImageIntelliImageprotected + updateRendererSetting(bool fastRendererOn)IntelliImagevirtual + ~IntelliImage()=0IntelliImagepure virtual
@@ -122,7 +119,7 @@ $(document).ready(function(){initNavTree('class_intelli_image.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_image.html b/docs/html/class_intelli_image.html index 2a1ec63..594de07 100644 --- a/docs/html/class_intelli_image.html +++ b/docs/html/class_intelli_image.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliImage Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -170,8 +166,11 @@ Public Member Functions  updateRendererSetting updates the existing image format to the new format. More...
  virtual QImage getImageData () - getImageData returns the data of the current image. More...
+ getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!). More...
  +virtual void setImageData (const QImage &newData) + setImageData overwrites the old imageData the new imageData. More...
+  @@ -186,9 +185,9 @@ Protected Attributes - - - + + +

Protected Member Functions

ImageType TypeOfImage
 The Type, an Image is. More...
 
bool fastRenderer
 fastRenderer is the flag that represents the usage of 8bit pictures. More...
 
bool fastRenderering
 fastRendering is the flag that represents the usage of 8bit pictures. More...
 

Detailed Description

An abstract class which manages the basic IntelliImage operations.

@@ -388,7 +387,7 @@ Protected Attributes -

Definition at line 88 of file IntelliImage.cpp.

+

Definition at line 90 of file IntelliImage.cpp.

@@ -435,7 +434,7 @@ Protected Attributes -

Definition at line 55 of file IntelliImage.cpp.

+

Definition at line 57 of file IntelliImage.cpp.

@@ -471,7 +470,7 @@ Protected Attributes -

Definition at line 105 of file IntelliImage.cpp.

+

Definition at line 107 of file IntelliImage.cpp.

@@ -525,7 +524,7 @@ Protected Attributes -

Definition at line 72 of file IntelliImage.cpp.

+

Definition at line 74 of file IntelliImage.cpp.

@@ -667,9 +666,9 @@ Protected Attributes
-

getImageData returns the data of the current image.

+

getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!).

-

Definition at line 123 of file IntelliImage.cpp.

+

Definition at line 125 of file IntelliImage.cpp.

@@ -706,7 +705,7 @@ Protected Attributes
Returns
The color of the Pixel as QColor.
-

Definition at line 115 of file IntelliImage.cpp.

+

Definition at line 117 of file IntelliImage.cpp.

@@ -842,6 +841,42 @@ Protected Attributes

Definition at line 37 of file IntelliImage.cpp.

+ + + +

◆ setImageData()

+ +
+
+ + + + + +
+ + + + + + + + +
void IntelliImage::setImageData (const QImage & newData)
+
+virtual
+
+ +

setImageData overwrites the old imageData the new imageData.

+
Parameters
+ + +
newData- represents the new imageData
+
+
+ +

Definition at line 133 of file IntelliImage.cpp.

+
@@ -912,13 +947,13 @@ Protected Attributes -

Definition at line 127 of file IntelliImage.cpp.

+

Definition at line 143 of file IntelliImage.cpp.

Member Data Documentation

- -

◆ fastRenderer

+ +

◆ fastRenderering

@@ -927,7 +962,7 @@ Protected Attributes - +
bool IntelliImage::fastRendererbool IntelliImage::fastRenderering
@@ -937,7 +972,7 @@ Protected Attributes
-

fastRenderer is the flag that represents the usage of 8bit pictures.

+

fastRendering is the flag that represents the usage of 8bit pictures.

Definition at line 47 of file IntelliImage.h.

@@ -996,8 +1031,8 @@ Protected Attributes

The documentation for this class was generated from the following files: @@ -1007,7 +1042,7 @@ Protected Attributes + doxygen 1.8.17 diff --git a/docs/html/class_intelli_image.js b/docs/html/class_intelli_image.js index 05ac417..1e131ee 100644 --- a/docs/html/class_intelli_image.js +++ b/docs/html/class_intelli_image.js @@ -20,9 +20,10 @@ var class_intelli_image = [ "getTypeOfImage", "class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f", null ], [ "loadImage", "class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e", null ], [ "resizeImage", "class_intelli_image.html#a177403ab9585d4ba31984a644c54d310", null ], + [ "setImageData", "class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268", null ], [ "setPolygon", "class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309", null ], [ "updateRendererSetting", "class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2", null ], - [ "fastRenderer", "class_intelli_image.html#adade0f6990152f09d953067a51511b9c", null ], + [ "fastRenderering", "class_intelli_image.html#aa63d34c7932113d021653980ee018671", null ], [ "imageData", "class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2", null ], [ "TypeOfImage", "class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80", null ] ]; \ No newline at end of file diff --git a/docs/html/class_intelli_image.png b/docs/html/class_intelli_image.png index 757436dc2418859a9075c9bef727b6cdec02fd10..139e6e85f01772dd0cdb0c9bb97ea89993e9c247 100644 GIT binary patch delta 33 mcmeyw`iXUdzSzS@kCM~VConKDfboF?2R^F^*==-P%LD-OkPVgq delta 33 mcmeyw`iXUdzSz5W?`F@QGl7AD0gMkEIKbC?;OR!!wM+m9Bo8$J diff --git a/docs/html/class_intelli_input_dialog-members.html b/docs/html/class_intelli_input_dialog-members.html new file mode 100644 index 0000000..2db1c93 --- /dev/null +++ b/docs/html/class_intelli_input_dialog-members.html @@ -0,0 +1,107 @@ + + + + + + + +IntelliPhoto: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.5 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntelliInputDialog Member List
+
+
+ +

This is the complete list of members for IntelliInputDialog, including all inherited members.

+ + + + + +
getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)IntelliInputDialogstatic
IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)IntelliInputDialog
slotCloseEvent()IntelliInputDialogslot
slotEingabe()IntelliInputDialogslot
+
+ + + + diff --git a/docs/html/class_intelli_input_dialog.html b/docs/html/class_intelli_input_dialog.html new file mode 100644 index 0000000..cce6da7 --- /dev/null +++ b/docs/html/class_intelli_input_dialog.html @@ -0,0 +1,323 @@ + + + + + + + +IntelliPhoto: IntelliInputDialog Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.5 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
IntelliInputDialog Class Reference
+
+
+ +

#include <IntelliInputDialog.h>

+
+Inheritance diagram for IntelliInputDialog:
+
+
+ +
+ + + + + + +

+Public Slots

void slotCloseEvent ()
 
void slotEingabe ()
 
+ + + +

+Public Member Functions

 IntelliInputDialog (QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
 
+ + + +

+Static Public Member Functions

static int getInt (QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
 
+

Detailed Description

+
+

Definition at line 6 of file IntelliInputDialog.h.

+

Constructor & Destructor Documentation

+ +

◆ IntelliInputDialog()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IntelliInputDialog::IntelliInputDialog (QString Title = nullptr,
QString Label = nullptr,
int value = 5,
int minValue = -2147483647,
int maxValue = 2147483647,
int step = 1,
bool * ok = nullptr 
)
+
+ +

Definition at line 5 of file IntelliInputDialog.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getInt()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IntelliInputDialog::getInt (QString Title = nullptr,
QString Label = nullptr,
int value = 5,
int minValue = -2147483647,
int maxValue = 2147483647,
int step = 1,
bool * ok = nullptr 
)
+
+static
+
+ +

Definition at line 18 of file IntelliInputDialog.cpp.

+ +
+
+ +

◆ slotCloseEvent

+ +
+
+ + + + + +
+ + + + + + + +
void IntelliInputDialog::slotCloseEvent ()
+
+slot
+
+ +

Definition at line 76 of file IntelliInputDialog.cpp.

+ +
+
+ +

◆ slotEingabe

+ +
+
+ + + + + +
+ + + + + + + +
void IntelliInputDialog::slotEingabe ()
+
+slot
+
+ +

Definition at line 80 of file IntelliInputDialog.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/html/class_intelli_input_dialog.js b/docs/html/class_intelli_input_dialog.js new file mode 100644 index 0000000..206e7e6 --- /dev/null +++ b/docs/html/class_intelli_input_dialog.js @@ -0,0 +1,6 @@ +var class_intelli_input_dialog = +[ + [ "IntelliInputDialog", "class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5", null ], + [ "slotCloseEvent", "class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0", null ], + [ "slotEingabe", "class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd", null ] +]; \ No newline at end of file diff --git a/docs/html/class_intelli_input_dialog.png b/docs/html/class_intelli_input_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..496ba5eacb7c3b9033d766fd1e9c6dac649c3198 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^89*Gs!3-o1y*>~Oq$C1-LR|m<{|{t7eDo+eJ$(X@ z1;z&s9QdpvWC!GOlmz(&GXNEVz|~VBMhpy$DV{ElAr*{o=U$xDtia>yA6NDNe}8zZ zRz%Fit7rVwW&2WGETocZkDfWh>@#Vey2~V!BlbdPML)j_-oWb_q`rJn>D#$a@&e`N z?h<*bV0%Z*_iksI&lKI#FD)yU?s?d`P4)B@TZLJCvMYZtUJ+P&{!QSyOPc~d$}KG} z51Xq}`bcS4V!z7D<~fd@S;F%_v-L9%cRdV`WCyW!-1YZZ|)z{C+}c-}3awR=Vz=kG}rZy25L!rn zZF2pqh$}&6^H=QXo#L=z(cJD+nYD|~uX-)GHK<6>=*HH&c4CW`{j2HcTeVJSUyR@9 zjWzv2lKANx!Zq=vBZ4NhQNJ6DQV9R@E>inD_+*WQWzKq44$rj JF6*2UngD=I%<=#L literal 0 HcmV?d00001 diff --git a/docs/html/class_intelli_photo_gui-members.html b/docs/html/class_intelli_photo_gui-members.html index a0aab34..898913b 100644 --- a/docs/html/class_intelli_photo_gui-members.html +++ b/docs/html/class_intelli_photo_gui-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -95,7 +91,8 @@ $(document).ready(function(){initNavTree('class_intelli_photo_gui.html','');}); - + +
closeEvent(QCloseEvent *event) overrideIntelliPhotoGuiprotected
IntelliPhotoGui()IntelliPhotoGui
UpdateGui()IntelliPhotoGui
setToolWidth(int value)IntelliPhotoGui
UpdateGui()IntelliPhotoGui
@@ -103,7 +100,7 @@ $(document).ready(function(){initNavTree('class_intelli_photo_gui.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_photo_gui.html b/docs/html/class_intelli_photo_gui.html index 5fdc6aa..f0f2685 100644 --- a/docs/html/class_intelli_photo_gui.html +++ b/docs/html/class_intelli_photo_gui.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliPhotoGui Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -95,7 +91,7 @@ $(document).ready(function(){initNavTree('class_intelli_photo_gui.html','');});
-

The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program. +

The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program. More...

#include <IntelliPhotoGui.h>

@@ -109,20 +105,23 @@ Inheritance diagram for IntelliPhotoGui:

Public Member Functions

 IntelliPhotoGui () - The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window. More...
+ The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window. More...
  void UpdateGui ()   +void setToolWidth (int value) +  +

Protected Member Functions

void closeEvent (QCloseEvent *event) override
 The closeEvent function handles closing events. More...
 

Detailed Description

-

The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program.

+

The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program.

-

Definition at line 24 of file IntelliPhotoGui.h.

+

Definition at line 27 of file IntelliPhotoGui.h.

Constructor & Destructor Documentation

◆ IntelliPhotoGui()

@@ -139,7 +138,7 @@ Protected Member Functions
-

The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window.

+

The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window.

Definition at line 7 of file IntelliPhotoGui.cpp.

@@ -170,8 +169,30 @@ Protected Member Functions
+

The closeEvent function handles closing events.

+

Definition at line 23 of file IntelliPhotoGui.cpp.

+
+ + +

◆ setToolWidth()

+ +
+
+ + + + + + + + +
void IntelliPhotoGui::setToolWidth (int value)
+
+ +

Definition at line 790 of file IntelliPhotoGui.cpp.

+
@@ -189,13 +210,13 @@ Protected Member Functions
-

Definition at line 694 of file IntelliPhotoGui.cpp.

+

Definition at line 799 of file IntelliPhotoGui.cpp.


The documentation for this class was generated from the following files: @@ -205,7 +226,7 @@ Protected Member Functions + doxygen 1.8.17 diff --git a/docs/html/class_intelli_photo_gui.js b/docs/html/class_intelli_photo_gui.js index da7c4b8..3e40da6 100644 --- a/docs/html/class_intelli_photo_gui.js +++ b/docs/html/class_intelli_photo_gui.js @@ -2,5 +2,6 @@ var class_intelli_photo_gui = [ [ "IntelliPhotoGui", "class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0", null ], [ "closeEvent", "class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13", null ], + [ "setToolWidth", "class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497", null ], [ "UpdateGui", "class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4", null ] ]; \ No newline at end of file diff --git a/docs/html/class_intelli_photo_gui.png b/docs/html/class_intelli_photo_gui.png index 762c3403eb098b14817c1908ef65a0c35fa1775a..1947c4eab94877f0c02fd3634bf7e827dfa4149d 100644 GIT binary patch delta 33 mcmcc4e4TlMzSzS@kCM~VConKDfboF?2R^F^*==;4#0UWE9SuML delta 33 mcmcc4e4TlMzSz5W?`F@QGl7AD0gMkEIKbC?;OR!!NsIvhq7L5x diff --git a/docs/html/class_intelli_raster_image-members.html b/docs/html/class_intelli_raster_image-members.html index b492ded..71e7be7 100644 --- a/docs/html/class_intelli_raster_image-members.html +++ b/docs/html/class_intelli_raster_image-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -98,7 +94,7 @@ $(document).ready(function(){initNavTree('class_intelli_raster_image.html','');} drawPixel(const QPoint &p1, const QColor &color)IntelliImagevirtual drawPlain(const QColor &color)IntelliImagevirtual drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)IntelliImagevirtual - fastRendererIntelliImageprotected + fastRendereringIntelliImageprotected getDeepCopy() overrideIntelliRasterImagevirtual getDisplayable(const QSize &displaySize, int alpha) overrideIntelliRasterImagevirtual getDisplayable(int alpha=255) overrideIntelliRasterImagevirtual @@ -112,11 +108,12 @@ $(document).ready(function(){initNavTree('class_intelli_raster_image.html','');} IntelliRasterImage(int width, int height, bool fastRendererOn)IntelliRasterImage loadImage(const QString &filePath)IntelliImagevirtual resizeImage(QImage *image, const QSize &newSize)IntelliImageprotected - setPolygon(const std::vector< QPoint > &polygonData) overrideIntelliRasterImagevirtual - TypeOfImageIntelliImageprotected - updateRendererSetting(bool fastRendererOn)IntelliImagevirtual - ~IntelliImage()=0IntelliImagepure virtual - ~IntelliRasterImage() overrideIntelliRasterImagevirtual + setImageData(const QImage &newData)IntelliImagevirtual + setPolygon(const std::vector< QPoint > &polygonData) overrideIntelliRasterImagevirtual + TypeOfImageIntelliImageprotected + updateRendererSetting(bool fastRendererOn)IntelliImagevirtual + ~IntelliImage()=0IntelliImagepure virtual + ~IntelliRasterImage() overrideIntelliRasterImagevirtual
@@ -124,7 +121,7 @@ $(document).ready(function(){initNavTree('class_intelli_raster_image.html','');}
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_raster_image.html b/docs/html/class_intelli_raster_image.html index cacb3a5..6c7699b 100644 --- a/docs/html/class_intelli_raster_image.html +++ b/docs/html/class_intelli_raster_image.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliRasterImage Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -164,8 +160,11 @@ Public Member Functions  updateRendererSetting updates the existing image format to the new format. More...
  virtual QImage getImageData () - getImageData returns the data of the current image. More...
+ getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!). More...
  +virtual void setImageData (const QImage &newData) + setImageData overwrites the old imageData the new imageData. More...
+  @@ -191,9 +190,9 @@ Additional Inherited Members - - - + + +

Protected Member Functions

ImageType TypeOfImage
 The Type, an Image is. More...
 
bool fastRenderer
 fastRenderer is the flag that represents the usage of 8bit pictures. More...
 
bool fastRenderering
 fastRendering is the flag that represents the usage of 8bit pictures. More...
 

Detailed Description

The IntelliRasterImage manages a RASTERIMAGE.

@@ -475,8 +474,8 @@ Additional Inherited Members

The documentation for this class was generated from the following files: @@ -486,7 +485,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_raster_image.png b/docs/html/class_intelli_raster_image.png index c56da4b1cac502c8f9a0e0f1b610ef4727d6edf6..768500f74e81d2a66c329b2b189d0de6ca21fa4a 100644 GIT binary patch delta 33 mcmaFO`kHluzSzS@kCM~VConKDfboF?2R^F^*==-P#smQH!VQ4{ delta 33 mcmaFO`kHluzSz5W?`F@QGl7AD0gMkEIKbC?;OR!!WlR7CRu3Qm diff --git a/docs/html/class_intelli_render_settings-members.html b/docs/html/class_intelli_render_settings-members.html index 5702f49..a94ad39 100644 --- a/docs/html/class_intelli_render_settings-members.html +++ b/docs/html/class_intelli_render_settings-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -93,8 +89,9 @@ $(document).ready(function(){initNavTree('class_intelli_render_settings.html',''

This is the complete list of members for IntelliRenderSettings, including all inherited members.

- - + + +
getFastRenderer()IntelliRenderSettings
IntelliRenderSettings()IntelliRenderSettings
IntelliRenderSettings()IntelliRenderSettings
isFastRenderering()IntelliRenderSettings
setFastRendering(bool Updatedsetting)IntelliRenderSettings
@@ -102,7 +99,7 @@ $(document).ready(function(){initNavTree('class_intelli_render_settings.html',''
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_render_settings.html b/docs/html/class_intelli_render_settings.html index 06a03e7..0f69132 100644 --- a/docs/html/class_intelli_render_settings.html +++ b/docs/html/class_intelli_render_settings.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliRenderSettings Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -100,9 +96,12 @@ $(document).ready(function(){initNavTree('class_intelli_render_settings.html','' Public Member Functions  IntelliRenderSettings ()   -bool getFastRenderer () - The getfastRenderer gets the value of the flag for the fastRenderer setting. More...
-  +void setFastRendering (bool Updatedsetting) + setFastRendering sets fastRendering to Updatedsetting. More...
+  +bool isFastRenderering () + The getfastRenderer gets the value of the flag for the fastRenderer setting. More...

Detailed Description

@@ -128,14 +127,14 @@ Public Member Functions

Member Function Documentation

- -

◆ getFastRenderer()

+ +

◆ isFastRenderering()

- + @@ -146,13 +145,41 @@ Public Member Functions

The getfastRenderer gets the value of the flag for the fastRenderer setting.

Returns
Returns true if fastRenderer is active else false
+

Definition at line 12 of file IntelliRenderSettings.cpp.

+ + + + +

◆ setFastRendering()

+ +
+
+
bool IntelliRenderSettings::getFastRenderer bool IntelliRenderSettings::isFastRenderering ( )
+ + + + + + + +
void IntelliRenderSettings::setFastRendering (bool Updatedsetting)
+
+ +

setFastRendering sets fastRendering to Updatedsetting.

+
Parameters
+ + +
Updatedsetting- Represents the new value for the Fast Rendering Flag.
+
+
+

Definition at line 8 of file IntelliRenderSettings.cpp.


The documentation for this class was generated from the following files: @@ -162,7 +189,7 @@ Public Member Functions + doxygen 1.8.17 diff --git a/docs/html/class_intelli_render_settings.js b/docs/html/class_intelli_render_settings.js index 0a6c973..e0dfe86 100644 --- a/docs/html/class_intelli_render_settings.js +++ b/docs/html/class_intelli_render_settings.js @@ -1,5 +1,6 @@ var class_intelli_render_settings = [ [ "IntelliRenderSettings", "class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529", null ], - [ "getFastRenderer", "class_intelli_render_settings.html#a5a74e7d7ed3a2e944883dddbe8bbf5e8", null ] + [ "isFastRenderering", "class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd", null ], + [ "setFastRendering", "class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2", null ] ]; \ No newline at end of file diff --git a/docs/html/class_intelli_shaped_image-members.html b/docs/html/class_intelli_shaped_image-members.html index 05f9fec..23b0658 100644 --- a/docs/html/class_intelli_shaped_image-members.html +++ b/docs/html/class_intelli_shaped_image-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -97,7 +93,7 @@ $(document).ready(function(){initNavTree('class_intelli_shaped_image.html','');} drawPixel(const QPoint &p1, const QColor &color)IntelliImagevirtual drawPlain(const QColor &color)IntelliImagevirtual drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)IntelliImagevirtual - fastRendererIntelliImageprotected + fastRendereringIntelliImageprotected getDeepCopy() overrideIntelliShapedImagevirtual getDisplayable(const QSize &displaySize, int alpha=255) overrideIntelliShapedImagevirtual getDisplayable(int alpha=255) overrideIntelliShapedImagevirtual @@ -113,12 +109,13 @@ $(document).ready(function(){initNavTree('class_intelli_shaped_image.html','');} loadImage(const QString &filePath)IntelliImagevirtual polygonDataIntelliShapedImageprotected resizeImage(QImage *image, const QSize &newSize)IntelliImageprotected - setPolygon(const std::vector< QPoint > &polygonData) overrideIntelliShapedImagevirtual - TypeOfImageIntelliImageprotected - updateRendererSetting(bool fastRendererOn)IntelliImagevirtual - ~IntelliImage()=0IntelliImagepure virtual - ~IntelliRasterImage() overrideIntelliRasterImagevirtual - ~IntelliShapedImage() overrideIntelliShapedImagevirtual + setImageData(const QImage &newData)IntelliImagevirtual + setPolygon(const std::vector< QPoint > &polygonData) overrideIntelliShapedImagevirtual + TypeOfImageIntelliImageprotected + updateRendererSetting(bool fastRendererOn)IntelliImagevirtual + ~IntelliImage()=0IntelliImagepure virtual + ~IntelliRasterImage() overrideIntelliRasterImagevirtual + ~IntelliShapedImage() overrideIntelliShapedImagevirtual
@@ -126,7 +123,7 @@ $(document).ready(function(){initNavTree('class_intelli_shaped_image.html','');}
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_shaped_image.html b/docs/html/class_intelli_shaped_image.html index ce5eda4..43f1d4a 100644 --- a/docs/html/class_intelli_shaped_image.html +++ b/docs/html/class_intelli_shaped_image.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliShapedImage Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -171,8 +167,11 @@ Public Member Functions  updateRendererSetting updates the existing image format to the new format. More...
  virtual QImage getImageData () - getImageData returns the data of the current image. More...
+ getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!). More...
  +virtual void setImageData (const QImage &newData) + setImageData overwrites the old imageData the new imageData. More...
+  @@ -186,9 +185,9 @@ Protected Attributes - - - + + +

Protected Attributes

ImageType TypeOfImage
 The Type, an Image is. More...
 
bool fastRenderer
 fastRenderer is the flag that represents the usage of 8bit pictures. More...
 
bool fastRenderering
 fastRendering is the flag that represents the usage of 8bit pictures. More...
 
@@ -361,7 +360,7 @@ Additional Inherited Members

Reimplemented from IntelliRasterImage.

-

Definition at line 67 of file IntelliShapedImage.cpp.

+

Definition at line 70 of file IntelliShapedImage.cpp.

@@ -470,7 +469,7 @@ Additional Inherited Members

Reimplemented from IntelliRasterImage.

-

Definition at line 85 of file IntelliShapedImage.cpp.

+

Definition at line 88 of file IntelliShapedImage.cpp.

@@ -502,8 +501,8 @@ Additional Inherited Members
The documentation for this class was generated from the following files: @@ -513,7 +512,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_shaped_image.png b/docs/html/class_intelli_shaped_image.png index d255aa9989cccd4740e2bbcd09f96ece1469bd74..5bdf651ad820bdd59dc8cc96e0ef2c94d92d8d92 100644 GIT binary patch delta 33 mcmaFH`iymgzSzS@kCM~VConKDfboF?2R^F^*==-P$OHiIcnxv@ delta 33 mcmaFH`iymgzSz5W?`F@QGl7AD0gMkEIKbC?;OR!!g-ieh3=a_i diff --git a/docs/html/class_intelli_tool-members.html b/docs/html/class_intelli_tool-members.html index c8b42e9..2d03123 100644 --- a/docs/html/class_intelli_tool-members.html +++ b/docs/html/class_intelli_tool-members.html @@ -3,7 +3,7 @@ - +IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@

Additional Inherited Members

- +
@@ -118,7 +114,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool.html b/docs/html/class_intelli_tool.html index 58e4dd1..287a8cd 100644 --- a/docs/html/class_intelli_tool.html +++ b/docs/html/class_intelli_tool.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliTool Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -313,7 +309,7 @@ Protected Attributes
-

Definition at line 89 of file IntelliTool.cpp.

+

Definition at line 100 of file IntelliTool.cpp.

@@ -332,7 +328,7 @@ Protected Attributes
-

Definition at line 85 of file IntelliTool.cpp.

+

Definition at line 96 of file IntelliTool.cpp.

@@ -479,7 +475,7 @@ Protected Attributes

Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

-

Definition at line 42 of file IntelliTool.cpp.

+

Definition at line 43 of file IntelliTool.cpp.

@@ -615,7 +611,7 @@ Protected Attributes

Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

-

Definition at line 47 of file IntelliTool.cpp.

+

Definition at line 48 of file IntelliTool.cpp.

@@ -642,7 +638,7 @@ Protected Attributes

A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews.

-

Definition at line 58 of file IntelliTool.h.

+

Definition at line 59 of file IntelliTool.h.

@@ -666,7 +662,7 @@ Protected Attributes
-

Definition at line 46 of file IntelliTool.h.

+

Definition at line 47 of file IntelliTool.h.

@@ -692,7 +688,7 @@ Protected Attributes

A pointer to the general PaintingArea to interact with.

-

Definition at line 44 of file IntelliTool.h.

+

Definition at line 45 of file IntelliTool.h.

@@ -718,7 +714,7 @@ Protected Attributes

A pointer to the drawing canvas of the tool, work on this.

-

Definition at line 63 of file IntelliTool.h.

+

Definition at line 64 of file IntelliTool.h.

@@ -744,7 +740,7 @@ Protected Attributes

A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.

-

Definition at line 51 of file IntelliTool.h.

+

Definition at line 52 of file IntelliTool.h.

@@ -770,7 +766,7 @@ Protected Attributes

A flag checking if the user is currently drawing or not.

-

Definition at line 68 of file IntelliTool.h.

+

Definition at line 69 of file IntelliTool.h.

@@ -794,13 +790,13 @@ Protected Attributes
-

Definition at line 53 of file IntelliTool.h.

+

Definition at line 54 of file IntelliTool.h.


The documentation for this class was generated from the following files: @@ -810,7 +806,7 @@ Protected Attributes + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool.png b/docs/html/class_intelli_tool.png index c7ba7c67b5332d9d4118f314e90957fd1cf36cc1..9a2a1db7d285d198f67131f8624297d312d1e8c2 100644 GIT binary patch delta 33 mcmeyu^@VGKzSzS@kCM~VConKDfboF?2R^F^*==;yX9WQBO${jk delta 33 mcmeyu^@VGKzSz5W?`F@QGl7AD0gMkEIKbC?;ORzJeO3Sm;SR_E diff --git a/docs/html/class_intelli_tool_circle-members.html b/docs/html/class_intelli_tool_circle-members.html index 5e0d837..aa31c7f 100644 --- a/docs/html/class_intelli_tool_circle-members.html +++ b/docs/html/class_intelli_tool_circle-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -120,7 +116,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_circle.html','');})
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_circle.html b/docs/html/class_intelli_tool_circle.html index e6ce048..ac2bf56 100644 --- a/docs/html/class_intelli_tool_circle.html +++ b/docs/html/class_intelli_tool_circle.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolCircle Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -307,7 +303,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 58 of file IntelliToolCircle.cpp.

+

Definition at line 57 of file IntelliToolCircle.cpp.

@@ -356,7 +352,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 66 of file IntelliToolCircle.cpp.

+

Definition at line 67 of file IntelliToolCircle.cpp.

@@ -405,7 +401,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 75 of file IntelliToolCircle.cpp.

+

Definition at line 76 of file IntelliToolCircle.cpp.

@@ -454,7 +450,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 50 of file IntelliToolCircle.cpp.

+

Definition at line 49 of file IntelliToolCircle.cpp.

@@ -503,7 +499,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 54 of file IntelliToolCircle.cpp.

+

Definition at line 53 of file IntelliToolCircle.cpp.

@@ -541,13 +537,13 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 70 of file IntelliToolCircle.cpp.

+

Definition at line 71 of file IntelliToolCircle.cpp.


The documentation for this class was generated from the following files: @@ -557,7 +553,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_circle.png b/docs/html/class_intelli_tool_circle.png index f828daa358dc34d70800f86622c538ad1619e1e9..d85887da6fda56b65ac0308dc9f75a49df60f79c 100644 GIT binary patch delta 33 mcmZ3zSzS@kCM~VConKDfboF?2R^F^*==-9VFUo*K@7G4 delta 33 mcmZ3zSz5W?`F@QGl7AD0gMkEIKbC?;OR!!6h;8^#tu~g diff --git a/docs/html/class_intelli_tool_flood_fill-members.html b/docs/html/class_intelli_tool_flood_fill-members.html index 468a95e..4c892dd 100644 --- a/docs/html/class_intelli_tool_flood_fill-members.html +++ b/docs/html/class_intelli_tool_flood_fill-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -120,7 +116,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_flood_fill.html',''
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_flood_fill.html b/docs/html/class_intelli_tool_flood_fill.html index ad0beb0..2a2dc9e 100644 --- a/docs/html/class_intelli_tool_flood_fill.html +++ b/docs/html/class_intelli_tool_flood_fill.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolFloodFill Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -546,8 +542,8 @@ Additional Inherited Members

The documentation for this class was generated from the following files: @@ -557,7 +553,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_flood_fill.png b/docs/html/class_intelli_tool_flood_fill.png index 8b73510271b339de448d1323dcbe053db2279c62..578ca9c47c5adc8f16efd181f699424d6aebf253 100644 GIT binary patch delta 33 mcmZ3)yoh;%zSzS@kCM~VConKDfboF?2R^F^*==- - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -120,7 +116,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_line.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_line.html b/docs/html/class_intelli_tool_line.html index 1b7d28a..a6e71fb 100644 --- a/docs/html/class_intelli_tool_line.html +++ b/docs/html/class_intelli_tool_line.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolLine Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -111,7 +107,7 @@ Inheritance diagram for IntelliToolLine:

Public Member Functions

 IntelliToolLine (PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings) - A constructor setting the general paintingArea and colorPicker. And reading in the lineWidth and lineStyle. More...
+ A constructor setting the general paintingArea and colorPicker. More...
  virtual ~IntelliToolLine () override  An abstract Destructor. More...
@@ -219,7 +215,7 @@ Additional Inherited Members
-

A constructor setting the general paintingArea and colorPicker. And reading in the lineWidth and lineStyle.

+

A constructor setting the general paintingArea and colorPicker.

Parameters
@@ -546,8 +542,8 @@ Additional Inherited Members
The documentation for this class was generated from the following files: @@ -557,7 +553,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_line.png b/docs/html/class_intelli_tool_line.png index 94372dec6dea2b4f1484b13ef582e6641ee74c28..5349288fcf216fd6dc66475fb9e730d82d9a2f03 100644 GIT binary patch delta 33 lcmZo-ZepIGFZS@!qvZ7T2@DJjV0_@ffzK*Jb{k!783ENZ3_$<@ delta 33 mcmZo-ZepIGFZS-;yV - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
Area- The general paintingArea used by the project.
- +
@@ -120,7 +116,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_pen.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_pen.html b/docs/html/class_intelli_tool_pen.html index 910bfe0..c80262c 100644 --- a/docs/html/class_intelli_tool_pen.html +++ b/docs/html/class_intelli_tool_pen.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolPen Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -546,8 +542,8 @@ Additional Inherited Members

The documentation for this class was generated from the following files: @@ -557,7 +553,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_pen.png b/docs/html/class_intelli_tool_pen.png index 6de00273919a8514135ac4a3ed6ae32428ad6224..f8afc009adad8bcaf7d3231393a102747ae025ed 100644 GIT binary patch delta 33 mcmeyt^n+=FzSzS@kCM~VConKDfboF?2R^F^*==++W&{B8VGSVw delta 33 mcmeyt^n+=FzSz5W?`F@QGl7AD0gMkEIKbC?;ORzJV@3c5^$x%Q diff --git a/docs/html/class_intelli_tool_plain_tool-members.html b/docs/html/class_intelli_tool_plain_tool-members.html index cc21cb3..894e44f 100644 --- a/docs/html/class_intelli_tool_plain_tool-members.html +++ b/docs/html/class_intelli_tool_plain_tool-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -120,7 +116,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_plain_tool.html',''
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_plain_tool.html b/docs/html/class_intelli_tool_plain_tool.html index 7cda6a5..d095921 100644 --- a/docs/html/class_intelli_tool_plain_tool.html +++ b/docs/html/class_intelli_tool_plain_tool.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolPlainTool Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -546,8 +542,8 @@ Additional Inherited Members

The documentation for this class was generated from the following files: @@ -557,7 +553,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_plain_tool.png b/docs/html/class_intelli_tool_plain_tool.png index 098101431e0ed4a6f68560d929ef795ef2b52ac9..709271d725c8a15c4188f938091db053ceb41b56 100644 GIT binary patch delta 33 mcmdnYyqS4|zSzS@kCM~VConKDfboF?2R^F^*==;qV*~)<)eO`C delta 33 mcmdnYyqS4|zSz5W?`F@QGl7AD0gMkEIKbC?;OR!!JVpTaS`Kpn diff --git a/docs/html/class_intelli_tool_polygon-members.html b/docs/html/class_intelli_tool_polygon-members.html index 4d69fcd..6240740 100644 --- a/docs/html/class_intelli_tool_polygon-members.html +++ b/docs/html/class_intelli_tool_polygon-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -101,7 +97,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_polygon.html','');} getIsDrawing()IntelliTool getTooltype()IntelliTool IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)IntelliTool - IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)IntelliToolPolygon + IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)IntelliToolPolygon onMouseLeftPressed(int x, int y) overrideIntelliToolPolygonvirtual onMouseLeftReleased(int x, int y) overrideIntelliToolPolygonvirtual onMouseMoved(int x, int y) overrideIntelliToolPolygonvirtual @@ -119,7 +115,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_polygon.html','');}
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_polygon.html b/docs/html/class_intelli_tool_polygon.html index fcc8109..cc8857a 100644 --- a/docs/html/class_intelli_tool_polygon.html +++ b/docs/html/class_intelli_tool_polygon.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolPolygon Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -110,9 +106,9 @@ Inheritance diagram for IntelliToolPolygon:
- - - + + + @@ -187,8 +183,8 @@ Additional Inherited Members

Definition at line 11 of file IntelliToolPolygon.h.

Constructor & Destructor Documentation

- -

◆ IntelliToolPolygon()

+ +

◆ IntelliToolPolygon()

@@ -209,7 +205,13 @@ Additional Inherited Members
- + + + + + + + @@ -224,6 +226,7 @@ Additional Inherited Members

Public Member Functions

 IntelliToolPolygon (PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
 A constructor setting the general paintingArea and colorPicker. More...
 
 IntelliToolPolygon (PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
 A constructor setting the general paintingArea and colorPicker. More...
 
 ~IntelliToolPolygon () override
 A Destructor. More...
 
IntelliToolsettingsToolsettings Toolsettings,
bool isSettingPolygon = false 
+
Area- The general paintingArea used by the project.
colorPicker- The general colorPicker used by the project.
isSettingPolygon- The flag for the set polygon method, standart is false
@@ -257,7 +260,7 @@ Additional Inherited Members

A Destructor.

-

Definition at line 15 of file IntelliToolPolygon.cpp.

+

Definition at line 19 of file IntelliToolPolygon.cpp.

@@ -307,7 +310,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 21 of file IntelliToolPolygon.cpp.

+

Definition at line 25 of file IntelliToolPolygon.cpp.

@@ -356,7 +359,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 71 of file IntelliToolPolygon.cpp.

+

Definition at line 89 of file IntelliToolPolygon.cpp.

@@ -405,7 +408,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 108 of file IntelliToolPolygon.cpp.

+

Definition at line 135 of file IntelliToolPolygon.cpp.

@@ -454,7 +457,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 63 of file IntelliToolPolygon.cpp.

+

Definition at line 81 of file IntelliToolPolygon.cpp.

@@ -503,7 +506,7 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 97 of file IntelliToolPolygon.cpp.

+

Definition at line 122 of file IntelliToolPolygon.cpp.

@@ -541,13 +544,13 @@ Additional Inherited Members

Reimplemented from IntelliTool.

-

Definition at line 101 of file IntelliToolPolygon.cpp.

+

Definition at line 126 of file IntelliToolPolygon.cpp.


The documentation for this class was generated from the following files: @@ -557,7 +560,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_polygon.js b/docs/html/class_intelli_tool_polygon.js index fc4c508..871a8f0 100644 --- a/docs/html/class_intelli_tool_polygon.js +++ b/docs/html/class_intelli_tool_polygon.js @@ -1,6 +1,6 @@ var class_intelli_tool_polygon = [ - [ "IntelliToolPolygon", "class_intelli_tool_polygon.html#a3c39299dfffa5b8a45e72a4c0b48b32c", null ], + [ "IntelliToolPolygon", "class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5", null ], [ "~IntelliToolPolygon", "class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499", null ], [ "onMouseLeftPressed", "class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d", null ], [ "onMouseLeftReleased", "class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21", null ], diff --git a/docs/html/class_intelli_tool_polygon.png b/docs/html/class_intelli_tool_polygon.png index 15b5f937beefe91ac6b422b20f0d976e84d74e64..0a69102bf14a83ff77ac52772ba9839111a2b26a 100644 GIT binary patch delta 33 mcmX@Xe1ds`zSzS@kCM~VConKDfboF?2R^F^*==-fW&{A|KMfNA delta 33 mcmX@Xe1ds`zSz5W?`F@QGl7AD0gMkEIKbC?;OR!!W<~(}#166m diff --git a/docs/html/class_intelli_tool_rectangle-members.html b/docs/html/class_intelli_tool_rectangle-members.html index 0a06328..6e55605 100644 --- a/docs/html/class_intelli_tool_rectangle-members.html +++ b/docs/html/class_intelli_tool_rectangle-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -120,7 +116,7 @@ $(document).ready(function(){initNavTree('class_intelli_tool_rectangle.html','')
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_tool_rectangle.html b/docs/html/class_intelli_tool_rectangle.html index 17ad363..eb9d4b3 100644 --- a/docs/html/class_intelli_tool_rectangle.html +++ b/docs/html/class_intelli_tool_rectangle.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolRectangle Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -546,8 +542,8 @@ Additional Inherited Members

The documentation for this class was generated from the following files: @@ -557,7 +553,7 @@ Additional Inherited Members + doxygen 1.8.17 diff --git a/docs/html/class_intelli_tool_rectangle.png b/docs/html/class_intelli_tool_rectangle.png index 898198eb1bf369530ee1a92de09dd2b94990f683..3c00191d1b9c7e347b17f140e72ce7cd90ae72b2 100644 GIT binary patch delta 33 mcmcc0e3f~EzSzS@kCM~VConKDfboF?2R^F^*==;4zz6{9nGHGs delta 33 mcmcc0e3f~EzSz5W?`F@QGl7AD0gMkEIKbC?;OR!!35)>$9uC<6 diff --git a/docs/html/class_intelli_toolsettings-members.html b/docs/html/class_intelli_toolsettings-members.html index 9a5cc60..4cf73fc 100644 --- a/docs/html/class_intelli_toolsettings-members.html +++ b/docs/html/class_intelli_toolsettings-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - + @@ -110,7 +102,7 @@ $(document).ready(function(){initNavTree('class_intelli_toolsettings.html','');}
    + doxygen 1.8.17
diff --git a/docs/html/class_intelli_toolsettings.html b/docs/html/class_intelli_toolsettings.html index 20551b6..e73d85c 100644 --- a/docs/html/class_intelli_toolsettings.html +++ b/docs/html/class_intelli_toolsettings.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliToolsettings Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -87,7 +83,6 @@ $(document).ready(function(){initNavTree('class_intelli_toolsettings.html','');}
@@ -97,14 +92,6 @@ $(document).ready(function(){initNavTree('class_intelli_toolsettings.html','');}

#include <IntelliToolsettings.h>

- - - - -

-Public Types

enum  LineStyle { LineStyle::SOLID_LINE, -LineStyle::DOTTED_LINE - }
 The LineStyle enum classifing all ways of drawing a line. More...
 
@@ -113,54 +100,17 @@ Public Member Functions - - - - - -

Public Member Functions

 IntelliToolsettings ()
 
int getLineWidth ()
 
void setLineWidth ()
 
void setLineWidth (int LineWidth)
 
int getInnerAlpha ()
 
void setInnerAlpha ()
 
void setInnerAlpha (int innerAlpha)
 
LineStyle getLinestyle ()
 

Detailed Description

Definition at line 4 of file IntelliToolsettings.h.

-

Member Enumeration Documentation

- -

◆ LineStyle

- -
-
- - - - - -
- - - - -
enum IntelliToolsettings::LineStyle
-
-strong
-
- -

The LineStyle enum classifing all ways of drawing a line.

- - - -
Enumerator
SOLID_LINE 
DOTTED_LINE 
- -

Definition at line 9 of file IntelliToolsettings.h.

- -
-
-

Constructor & Destructor Documentation

+

Constructor & Destructor Documentation

◆ IntelliToolsettings()

@@ -203,7 +153,7 @@ Public Member Functions
-

Definition at line 11 of file IntelliToolsettings.cpp.

+

Definition at line 10 of file IntelliToolsettings.cpp.

@@ -223,26 +173,7 @@ Public Member Functions
-

Definition at line 33 of file IntelliToolsettings.cpp.

- -
- - -

◆ getLinestyle()

- -
-
- - - - - - - -
IntelliToolsettings::LineStyle IntelliToolsettings::getLinestyle ()
-
- -

Definition at line 51 of file IntelliToolsettings.cpp.

+

Definition at line 28 of file IntelliToolsettings.cpp.

@@ -261,31 +192,12 @@ Public Member Functions
-

Definition at line 15 of file IntelliToolsettings.cpp.

- -
- - -

◆ setInnerAlpha() [1/2]

- -
-
- - - - - - - -
void IntelliToolsettings::setInnerAlpha ()
-
- -

Definition at line 37 of file IntelliToolsettings.cpp.

+

Definition at line 14 of file IntelliToolsettings.cpp.

-

◆ setInnerAlpha() [2/2]

+

◆ setInnerAlpha()

@@ -300,31 +212,12 @@ Public Member Functions
-

Definition at line 41 of file IntelliToolsettings.cpp.

- -
-
- -

◆ setLineWidth() [1/2]

- -
-
- - - - - - - -
void IntelliToolsettings::setLineWidth ()
-
- -

Definition at line 19 of file IntelliToolsettings.cpp.

+

Definition at line 32 of file IntelliToolsettings.cpp.

-

◆ setLineWidth() [2/2]

+

◆ setLineWidth()

@@ -339,13 +232,13 @@ Public Member Functions
-

Definition at line 23 of file IntelliToolsettings.cpp.

+

Definition at line 18 of file IntelliToolsettings.cpp.


The documentation for this class was generated from the following files: @@ -355,7 +248,7 @@ Public Member Functions + doxygen 1.8.17 diff --git a/docs/html/class_intelli_toolsettings.js b/docs/html/class_intelli_toolsettings.js index e80469a..4cb8f44 100644 --- a/docs/html/class_intelli_toolsettings.js +++ b/docs/html/class_intelli_toolsettings.js @@ -1,16 +1,9 @@ var class_intelli_toolsettings = [ - [ "LineStyle", "class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089", [ - [ "SOLID_LINE", "class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089ae45e1e6b2e6dde14829d057a4ef44199", null ], - [ "DOTTED_LINE", "class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089a7660f396543c877e45d443f99d02bd0e", null ] - ] ], [ "IntelliToolsettings", "class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69", null ], [ "~IntelliToolsettings", "class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56", null ], [ "getInnerAlpha", "class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c", null ], - [ "getLinestyle", "class_intelli_toolsettings.html#a5beb193b25e0665516244c61c5e65aa6", null ], [ "getLineWidth", "class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a", null ], - [ "setInnerAlpha", "class_intelli_toolsettings.html#a32f165c89190e40caf96abb916e6c876", null ], [ "setInnerAlpha", "class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271", null ], - [ "setLineWidth", "class_intelli_toolsettings.html#a906d37de6ee94b433d53fe3e598cc9fa", null ], [ "setLineWidth", "class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f", null ] ]; \ No newline at end of file diff --git a/docs/html/class_painting_area-members.html b/docs/html/class_painting_area-members.html index 8f97d2d..6357387 100644 --- a/docs/html/class_painting_area-members.html +++ b/docs/html/class_painting_area-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -106,10 +102,12 @@ $(document).ready(function(){initNavTree('class_painting_area.html','');}); createPlainTool()PaintingArea createPolygonTool()PaintingArea createRectangleTool()PaintingArea - deleteLayer(int idx)PaintingArea - floodFill(int r, int g, int b, int a)PaintingArea - getHeightOfActive()PaintingArea + deleteLayer(int idx, bool isTool=false)PaintingArea + getHeightOfActive()PaintingArea + getImageDataOfActiveLayer()PaintingArea getImageOfActiveLayer()PaintingArea + getMaxHeight()PaintingArea + getMaxWidth()PaintingArea getNumberOfActiveLayer()PaintingArea getPolygonDataOfRealLayer()PaintingArea getTypeOfImageRealLayer()PaintingArea @@ -126,6 +124,8 @@ $(document).ready(function(){initNavTree('class_painting_area.html','');}); save(const QString &filePath, const char *fileFormat)PaintingArea setLayerActive(int idx)PaintingArea setLayerAlpha(int idx, int alpha)PaintingArea + setPolygon(int idx)PaintingArea + setRenderSettings(bool isFastRenderingOn)PaintingArea slotActivateLayer(int a)PaintingAreaslot slotDeleteActiveLayer()PaintingAreaslot ToolsettingsPaintingArea @@ -138,7 +138,7 @@ $(document).ready(function(){initNavTree('class_painting_area.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/class_painting_area.html b/docs/html/class_painting_area.html index 05e80b3..b1ac146 100644 --- a/docs/html/class_painting_area.html +++ b/docs/html/class_painting_area.html @@ -3,7 +3,7 @@ - + IntelliPhoto: PaintingArea Class Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -125,6 +121,9 @@ Public Member Functions  ~PaintingArea () override  This deconstructor is used to clear up the memory and remove the currently active window. More...
  +void setRenderSettings (bool isFastRenderingOn) + setRenderSettings updates all Images to the new Rendersetting. More...
+  bool open (const QString &filePath)  The open method is used for loading a picture into the current layer. More...
  @@ -137,18 +136,18 @@ Public Member Functions int addLayerAt (int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)  The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer stack. More...
  -void deleteLayer (int idx) - The deleteLayer method removes a layer at a given idx. More...
-  +void deleteLayer (int idx, bool isTool=false) + The deleteLayer method removes a layer at a given idx. More...
+  void setLayerActive (int idx)  The setLayerToActive method marks a specific layer as active. More...
  void setLayerAlpha (int idx, int alpha)  The setAlphaOfLayer method sets the alpha value of a specific layer. More...
  -void floodFill (int r, int g, int b, int a) - The floodFill method fills a the active layer with a given color. More...
-  +void setPolygon (int idx) + setPolygon is used for setting polygondata, it only works on RASTER images More...
+  void movePositionActive (int x, int y)  The movePositionActive method moves the active layer to certain position. More...
  @@ -184,6 +183,10 @@ Public Member Functions int getHeightOfActive ()  The getHeightOfActive gets the vertical dimensions of the active layer. More...
  +int getMaxWidth () +  +int getMaxHeight () +  IntelliImage::ImageType getTypeOfImageRealLayer ()   std::vector< QPoint > getPolygonDataOfRealLayer () @@ -192,6 +195,9 @@ Public Member Functions   IntelliImagegetImageOfActiveLayer ()   +QImage getImageDataOfActiveLayer () + getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer it return a 10*10 white picture) More...
+  @@ -262,7 +268,7 @@ Protected Member Functions -

Definition at line 21 of file PaintingArea.cpp.

+

Definition at line 22 of file PaintingArea.cpp.

@@ -291,7 +297,7 @@ Protected Member Functions

This deconstructor is used to clear up the memory and remove the currently active window.

-

Definition at line 41 of file PaintingArea.cpp.

+

Definition at line 30 of file PaintingArea.cpp.

@@ -353,7 +359,7 @@ Protected Member Functions
Returns
Returns the number of layers in the project
-

Definition at line 56 of file PaintingArea.cpp.

+

Definition at line 54 of file PaintingArea.cpp.

@@ -440,7 +446,7 @@ Protected Member Functions

The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.

-

Definition at line 188 of file PaintingArea.cpp.

+

Definition at line 177 of file PaintingArea.cpp.

@@ -461,7 +467,7 @@ Protected Member Functions

The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.

-

Definition at line 193 of file PaintingArea.cpp.

+

Definition at line 182 of file PaintingArea.cpp.

@@ -482,7 +488,7 @@ Protected Member Functions

The colorPickerSwitchColor swaps the primary color with the secondary drawing color.

-

Definition at line 198 of file PaintingArea.cpp.

+

Definition at line 187 of file PaintingArea.cpp.

@@ -501,7 +507,7 @@ Protected Member Functions

Public Attributes

-

Definition at line 222 of file PaintingArea.cpp.

+

Definition at line 211 of file PaintingArea.cpp.

@@ -520,7 +526,7 @@ Protected Member Functions
-

Definition at line 231 of file PaintingArea.cpp.

+

Definition at line 220 of file PaintingArea.cpp.

@@ -539,7 +545,7 @@ Protected Member Functions
-

Definition at line 212 of file PaintingArea.cpp.

+

Definition at line 201 of file PaintingArea.cpp.

@@ -558,7 +564,7 @@ Protected Member Functions
-

Definition at line 202 of file PaintingArea.cpp.

+

Definition at line 191 of file PaintingArea.cpp.

@@ -577,7 +583,7 @@ Protected Member Functions
-

Definition at line 207 of file PaintingArea.cpp.

+

Definition at line 196 of file PaintingArea.cpp.

@@ -596,7 +602,7 @@ Protected Member Functions
-

Definition at line 226 of file PaintingArea.cpp.

+

Definition at line 215 of file PaintingArea.cpp.

@@ -615,12 +621,12 @@ Protected Member Functions
-

Definition at line 217 of file PaintingArea.cpp.

+

Definition at line 206 of file PaintingArea.cpp.

- -

◆ deleteLayer()

+ +

◆ deleteLayer()

@@ -629,53 +635,13 @@ Protected Member Functions void PaintingArea::deleteLayer ( int  - idx) - - - -
- -

The deleteLayer method removes a layer at a given idx.

-
Parameters
- - -
idx- The index of the layer to be removed
-
-
- -

Definition at line 74 of file PaintingArea.cpp.

- -
-
- -

◆ floodFill()

- -
-
- - - - - - + - - - - - - - - - - - - - - + + @@ -685,18 +651,16 @@ Protected Member Functions
void PaintingArea::floodFill (int r, idx,
int g,
int b,
int a bool isTool = false 
-

The floodFill method fills a the active layer with a given color.

+

The deleteLayer method removes a layer at a given idx.

Parameters
- - - - + +
r- Red value of the color the layer should be filled with
g- Green value of the color the layer should be filled with
b- Blue value of the color the layer should be filled with
a- Alpha value of the color the layer should be filled with
idx- The index of the layer to be removed
isTool- Is the flag for when a tool uses this function.
-

Definition at line 139 of file PaintingArea.cpp.

+

Definition at line 73 of file PaintingArea.cpp.

@@ -718,7 +682,29 @@ Protected Member Functions

The getHeightOfActive gets the vertical dimensions of the active layer.

Returns
Returns the vertical pixle count of the active layer
-

Definition at line 240 of file PaintingArea.cpp.

+

Definition at line 229 of file PaintingArea.cpp.

+ + + + +

◆ getImageDataOfActiveLayer()

+ +
+
+ + + + + + + +
QImage PaintingArea::getImageDataOfActiveLayer ()
+
+ +

getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer it return a 10*10 white picture)

+
Returns
return the image as an rgba32bit qImage
+ +

Definition at line 424 of file PaintingArea.cpp.

@@ -737,7 +723,45 @@ Protected Member Functions
-

Definition at line 406 of file PaintingArea.cpp.

+

Definition at line 417 of file PaintingArea.cpp.

+ +
+ + +

◆ getMaxHeight()

+ +
+
+ + + + + + + +
int PaintingArea::getMaxHeight ()
+
+ +

Definition at line 237 of file PaintingArea.cpp.

+ +
+
+ +

◆ getMaxWidth()

+ +
+
+ + + + + + + +
int PaintingArea::getMaxWidth ()
+
+ +

Definition at line 233 of file PaintingArea.cpp.

@@ -756,7 +780,7 @@ Protected Member Functions
-

Definition at line 402 of file PaintingArea.cpp.

+

Definition at line 413 of file PaintingArea.cpp.

@@ -775,7 +799,7 @@ Protected Member Functions
-

Definition at line 248 of file PaintingArea.cpp.

+

Definition at line 245 of file PaintingArea.cpp.

@@ -794,7 +818,7 @@ Protected Member Functions
-

Definition at line 244 of file PaintingArea.cpp.

+

Definition at line 241 of file PaintingArea.cpp.

@@ -816,7 +840,7 @@ Protected Member Functions

The getWidthOfActive gets the horizontal dimensions of the active layer.

Returns
Returns the horizontal pixle count of the active layer
-

Definition at line 236 of file PaintingArea.cpp.

+

Definition at line 225 of file PaintingArea.cpp.

@@ -872,7 +896,7 @@ Protected Member Functions
-

Definition at line 255 of file PaintingArea.cpp.

+

Definition at line 252 of file PaintingArea.cpp.

@@ -900,7 +924,7 @@ Protected Member Functions
-

Definition at line 281 of file PaintingArea.cpp.

+

Definition at line 284 of file PaintingArea.cpp.

@@ -967,7 +991,7 @@ Protected Member Functions -

Definition at line 148 of file PaintingArea.cpp.

+

Definition at line 154 of file PaintingArea.cpp.

@@ -996,7 +1020,7 @@ Protected Member Functions
Returns
Returns a boolean variable whether the file was successfully opened or not
-

Definition at line 103 of file PaintingArea.cpp.

+

Definition at line 119 of file PaintingArea.cpp.

@@ -1024,7 +1048,7 @@ Protected Member Functions
-

Definition at line 307 of file PaintingArea.cpp.

+

Definition at line 314 of file PaintingArea.cpp.

@@ -1052,7 +1076,7 @@ Protected Member Functions
-

Definition at line 318 of file PaintingArea.cpp.

+

Definition at line 325 of file PaintingArea.cpp.

@@ -1092,7 +1116,7 @@ Protected Member Functions
Returns
Returns a boolean variable, true if the file was saved successfully, false if not
-

Definition at line 115 of file PaintingArea.cpp.

+

Definition at line 131 of file PaintingArea.cpp.

@@ -1120,7 +1144,7 @@ Protected Member Functions -

Definition at line 90 of file PaintingArea.cpp.

+

Definition at line 95 of file PaintingArea.cpp.

@@ -1159,7 +1183,63 @@ Protected Member Functions -

Definition at line 96 of file PaintingArea.cpp.

+

Definition at line 102 of file PaintingArea.cpp.

+ + + + +

◆ setPolygon()

+ +
+
+ + + + + + + + +
void PaintingArea::setPolygon (int idx)
+
+ +

setPolygon is used for setting polygondata, it only works on RASTER images

+
Parameters
+ + +
idx- represents the number of the layer with should be transformed
+
+
+ +

Definition at line 107 of file PaintingArea.cpp.

+ +
+
+ +

◆ setRenderSettings()

+ +
+
+ + + + + + + + +
void PaintingArea::setRenderSettings (bool isFastRenderingOn)
+
+ +

setRenderSettings updates all Images to the new Rendersetting.

+
Parameters
+ + +
isFastRenderingOnis the new given flag for the FastRenderer.
+
+
+ +

Definition at line 34 of file PaintingArea.cpp.

@@ -1195,7 +1275,7 @@ Protected Member Functions -

Definition at line 175 of file PaintingArea.cpp.

+

Definition at line 170 of file PaintingArea.cpp.

@@ -1224,7 +1304,7 @@ Protected Member Functions

The slotDeleteActiveLayer method handles the deletion of the active layer.

-

Definition at line 83 of file PaintingArea.cpp.

+

Definition at line 88 of file PaintingArea.cpp.

@@ -1252,7 +1332,7 @@ Protected Member Functions
-

Definition at line 294 of file PaintingArea.cpp.

+

Definition at line 299 of file PaintingArea.cpp.

@@ -1269,7 +1349,7 @@ Protected Member Functions
-

Definition at line 175 of file PaintingArea.h.

+

Definition at line 182 of file PaintingArea.h.

@@ -1285,13 +1365,13 @@ Protected Member Functions
-

Definition at line 174 of file PaintingArea.h.

+

Definition at line 181 of file PaintingArea.h.


The documentation for this class was generated from the following files: @@ -1301,7 +1381,7 @@ Protected Member Functions + doxygen 1.8.17 diff --git a/docs/html/class_painting_area.js b/docs/html/class_painting_area.js index a9d5037..2094528 100644 --- a/docs/html/class_painting_area.js +++ b/docs/html/class_painting_area.js @@ -14,10 +14,12 @@ var class_painting_area = [ "createPlainTool", "class_painting_area.html#a3de83443d2d5cf460ff48d0602070938", null ], [ "createPolygonTool", "class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b", null ], [ "createRectangleTool", "class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd", null ], - [ "deleteLayer", "class_painting_area.html#a2382ebf8c31dee36cb714f34a18b71e4", null ], - [ "floodFill", "class_painting_area.html#aeb5eb394b979ea90f2be9849fdda1774", null ], + [ "deleteLayer", "class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630", null ], [ "getHeightOfActive", "class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4", null ], + [ "getImageDataOfActiveLayer", "class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423", null ], [ "getImageOfActiveLayer", "class_painting_area.html#acab11ad35d07e9081203d8217d2c0855", null ], + [ "getMaxHeight", "class_painting_area.html#aa811d142df9239ae248679bd70ad6da7", null ], + [ "getMaxWidth", "class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8", null ], [ "getNumberOfActiveLayer", "class_painting_area.html#a24280454ebb80db7feba2fd621513353", null ], [ "getPolygonDataOfRealLayer", "class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90", null ], [ "getTypeOfImageRealLayer", "class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead", null ], @@ -33,6 +35,8 @@ var class_painting_area = [ "save", "class_painting_area.html#aa2463d4f403224086acab02903ae407e", null ], [ "setLayerActive", "class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9", null ], [ "setLayerAlpha", "class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055", null ], + [ "setPolygon", "class_painting_area.html#aa409492ac26483d618bb33616f2e3f81", null ], + [ "setRenderSettings", "class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd", null ], [ "slotActivateLayer", "class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec", null ], [ "slotDeleteActiveLayer", "class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e", null ], [ "wheelEvent", "class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4", null ], diff --git a/docs/html/class_painting_area.png b/docs/html/class_painting_area.png index 19583251a5f849efdcf1dbad380c8ad8c68a05be..4166202f505ee76e6f6b90bcf0010bd50b240120 100644 GIT binary patch delta 33 mcmX@We1Lg^zSzS@kCM~VConKDfboF?2R^F^*==;KW&{A`FAVzt delta 33 mcmX@We1Lg^zSz5W?`F@QGl7AD0gMkEIKbC?;OR!!YDNJ0v<{j8 diff --git a/docs/html/classes.html b/docs/html/classes.html index df8459d..d1cb6ea 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class Index @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -94,38 +90,37 @@ $(document).ready(function(){initNavTree('classes.html','');}); - + + + + + + + + + + + + + + + + - - - - - - - - - + - + - - - - - - - -
  i  
IntelliRenderSettings   IntelliRasterImage   IntelliToolLine   
  l  
+
  t  
+
IntelliRenderSettings    IntelliToolPen   
IntelliColorPicker   IntelliShapedImage   IntelliToolPlainTool   LayerObject   Triangle   
IntelliImage   IntelliTool   IntelliToolPolygon   
  p  
IntelliShapedImage   IntelliToolPlainTool   
IntelliColorPicker   IntelliTool   IntelliToolPolygon   PaintingArea   
IntelliImage   
IntelliInputDialog    IntelliToolCircle    IntelliToolRectangle   
  t  
-
IntelliPhotoGui    IntelliToolFloodFill    IntelliToolsettings   PaintingArea   
IntelliRasterImage   IntelliToolLine   
  l  
-
Triangle   
LayerObject   
i | l | p | t
@@ -136,7 +131,7 @@ $(document).ready(function(){initNavTree('classes.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/closed.png b/docs/html/closed.png index fdc04acee8c95ea87ee86c17cb47b250a842cce3..b3364d8341ade9bf34851a07b58bda4a1d8179bb 100644 GIT binary patch delta 100 zcmV-q0Gt1Rf&q{uUP(zrK~#7F?cK`_fG`XM(Fe_PfO6nKwL~CA!cLTwuygYGBUb={ zZ9g7_tdPm#f{?#(U*}ivPRb2KsfttST{)DdH&p=|dVeaawG@bOL3g(R0000!25r~ZSznxSYuE^mN*~%+=-sIqjBCz)ZNy!utIKh`#00000NkvXXu0mjf DzuPGM diff --git a/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html b/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html index 58957e7..56a6fe7 100644 --- a/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html +++ b/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html @@ -3,7 +3,7 @@ - + IntelliPhoto: src/Layer Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,7 @@
IntelliPhoto -  0.4 +  0.5
@@ -38,7 +34,7 @@ - +
@@ -90,11 +86,6 @@ $(document).ready(function(){initNavTree('dir_13830bfc3dd6736fe878600c9081919f.h
Layer Directory Reference
-
-Directory dependency graph for Layer:
-
-
src/Layer
-
@@ -111,7 +102,7 @@ Files + doxygen 1.8.17 diff --git a/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html b/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html index 95fda27..280ef8d 100644 --- a/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html +++ b/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html @@ -3,7 +3,7 @@ - +IntelliPhoto: src/GUI Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,7 @@ @@ -38,7 +34,7 @@

Files

IntelliPhoto -  0.4 +  0.5
- +
@@ -90,14 +86,13 @@ $(document).ready(function(){initNavTree('dir_4e4e2e75df7fa6971448b424c011c8b5.h
GUI Directory Reference
-
-Directory dependency graph for GUI:
-
-
src/GUI
-
+ + + + @@ -111,7 +106,7 @@ Files + doxygen 1.8.17 diff --git a/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.js b/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.js index 004f844..f2f26b7 100644 --- a/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.js +++ b/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.js @@ -1,6 +1,10 @@ var dir_4e4e2e75df7fa6971448b424c011c8b5 = [ - [ "IntelliPhotoGui.cpp", "_intelli_photo_gui_8cpp.html", "_intelli_photo_gui_8cpp" ], + [ "IntelliInputDialog.cpp", "_intelli_input_dialog_8cpp.html", null ], + [ "IntelliInputDialog.h", "_intelli_input_dialog_8h.html", [ + [ "IntelliInputDialog", "class_intelli_input_dialog.html", "class_intelli_input_dialog" ] + ] ], + [ "IntelliPhotoGui.cpp", "_intelli_photo_gui_8cpp.html", null ], [ "IntelliPhotoGui.h", "_intelli_photo_gui_8h.html", [ [ "IntelliPhotoGui", "class_intelli_photo_gui.html", "class_intelli_photo_gui" ] ] ] diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index da78dd7..88b8a1b 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -3,7 +3,7 @@ - +IntelliPhoto: src Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,7 @@ @@ -38,7 +34,7 @@

Files

file  IntelliInputDialog.cpp [code]
 
file  IntelliInputDialog.h [code]
 
file  IntelliPhotoGui.cpp [code]
 
file  IntelliPhotoGui.h [code]
IntelliPhoto -  0.4 +  0.5
- +
@@ -90,11 +86,6 @@ $(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.h
src Directory Reference
-
-Directory dependency graph for src:
-
-
src
-
@@ -122,7 +113,7 @@ Files + doxygen 1.8.17 diff --git a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html index 736c158..a54757f 100644 --- a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html +++ b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html @@ -3,7 +3,7 @@ - +IntelliPhoto: src/Tool Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,7 @@ @@ -38,7 +34,7 @@

Directories

IntelliPhoto -  0.4 +  0.5
- +
@@ -90,11 +86,6 @@ $(document).ready(function(){initNavTree('dir_858355f3357c73763e566ff49d1e6a7a.h
Tool Directory Reference
-
-Directory dependency graph for Tool:
-
-
src/Tool
-
@@ -104,6 +95,14 @@ Files + + + + + + + + @@ -116,6 +115,14 @@ Files + + + + + + + +

Files

 
file  IntelliTool.h [code]
 
file  IntelliToolCircle.cpp [code]
 
file  IntelliToolCircle.h [code]
 
file  IntelliToolFloodFill.cpp [code]
 
file  IntelliToolFloodFill.h [code]
 
file  IntelliToolLine.cpp [code]
 
file  IntelliToolLine.h [code]
 
file  IntelliToolPlain.h [code]
 
file  IntelliToolPolygon.cpp [code]
 
file  IntelliToolPolygon.h [code]
 
file  IntelliToolRectangle.cpp [code]
 
file  IntelliToolRectangle.h [code]
 
@@ -125,7 +132,7 @@ Files + doxygen 1.8.17 diff --git a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js index 0d86815..19d8762 100644 --- a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js +++ b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js @@ -5,8 +5,18 @@ var dir_858355f3357c73763e566ff49d1e6a7a = [ "IntelliTool.h", "_intelli_tool_8h.html", [ [ "IntelliTool", "class_intelli_tool.html", "class_intelli_tool" ] ] ], + [ "IntelliToolCircle.cpp", "_intelli_tool_circle_8cpp.html", null ], + [ "IntelliToolCircle.h", "_intelli_tool_circle_8h.html", [ + [ "IntelliToolCircle", "class_intelli_tool_circle.html", "class_intelli_tool_circle" ] + ] ], + [ "IntelliToolFloodFill.cpp", "_intelli_tool_flood_fill_8cpp.html", null ], + [ "IntelliToolFloodFill.h", "_intelli_tool_flood_fill_8h.html", [ + [ "IntelliToolFloodFill", "class_intelli_tool_flood_fill.html", "class_intelli_tool_flood_fill" ] + ] ], [ "IntelliToolLine.cpp", "_intelli_tool_line_8cpp.html", null ], - [ "IntelliToolLine.h", "_intelli_tool_line_8h.html", "_intelli_tool_line_8h" ], + [ "IntelliToolLine.h", "_intelli_tool_line_8h.html", [ + [ "IntelliToolLine", "class_intelli_tool_line.html", "class_intelli_tool_line" ] + ] ], [ "IntelliToolPen.cpp", "_intelli_tool_pen_8cpp.html", null ], [ "IntelliToolPen.h", "_intelli_tool_pen_8h.html", [ [ "IntelliToolPen", "class_intelli_tool_pen.html", "class_intelli_tool_pen" ] @@ -14,5 +24,13 @@ var dir_858355f3357c73763e566ff49d1e6a7a = [ "IntelliToolPlain.cpp", "_intelli_tool_plain_8cpp.html", null ], [ "IntelliToolPlain.h", "_intelli_tool_plain_8h.html", [ [ "IntelliToolPlainTool", "class_intelli_tool_plain_tool.html", "class_intelli_tool_plain_tool" ] + ] ], + [ "IntelliToolPolygon.cpp", "_intelli_tool_polygon_8cpp.html", null ], + [ "IntelliToolPolygon.h", "_intelli_tool_polygon_8h.html", [ + [ "IntelliToolPolygon", "class_intelli_tool_polygon.html", "class_intelli_tool_polygon" ] + ] ], + [ "IntelliToolRectangle.cpp", "_intelli_tool_rectangle_8cpp.html", null ], + [ "IntelliToolRectangle.h", "_intelli_tool_rectangle_8h.html", [ + [ "IntelliToolRectangle", "class_intelli_tool_rectangle.html", "class_intelli_tool_rectangle" ] ] ] ]; \ No newline at end of file diff --git a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html index b7d0117..03da172 100644 --- a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html +++ b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html @@ -3,7 +3,7 @@ - + IntelliPhoto: src/IntelliHelper Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,7 @@
IntelliPhoto -  0.4 +  0.5
@@ -38,7 +34,7 @@ - + @@ -110,7 +114,7 @@ Files + doxygen 1.8.17 diff --git a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js index 6cabcb9..b339aad 100644 --- a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js +++ b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js @@ -4,8 +4,14 @@ var dir_8de6078cba2a961961818cf80b28fd4f = [ "IntelliColorPicker.h", "_intelli_color_picker_8h.html", [ [ "IntelliColorPicker", "class_intelli_color_picker.html", "class_intelli_color_picker" ] ] ], - [ "IntelliHelper.cpp", "_intelli_helper_8cpp.html", null ], - [ "IntelliHelper.h", "_intelli_helper_8h.html", [ - [ "IntelliHelper", "class_intelli_helper.html", null ] - ] ] + [ "IntelliRenderSettings.cpp", "_intelli_render_settings_8cpp.html", null ], + [ "IntelliRenderSettings.h", "_intelli_render_settings_8h.html", [ + [ "IntelliRenderSettings", "class_intelli_render_settings.html", "class_intelli_render_settings" ] + ] ], + [ "IntelliToolsettings.cpp", "_intelli_toolsettings_8cpp.html", null ], + [ "IntelliToolsettings.h", "_intelli_toolsettings_8h.html", [ + [ "IntelliToolsettings", "class_intelli_toolsettings.html", "class_intelli_toolsettings" ] + ] ], + [ "IntelliTriangulation.cpp", "_intelli_triangulation_8cpp.html", "_intelli_triangulation_8cpp" ], + [ "IntelliTriangulation.h", "_intelli_triangulation_8h.html", "_intelli_triangulation_8h" ] ]; \ No newline at end of file diff --git a/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html b/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html index 538b969..fe90c19 100644 --- a/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html +++ b/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html @@ -3,7 +3,7 @@ - + IntelliPhoto: src/Image Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,7 @@
IntelliPhoto -  0.4 +  0.5
@@ -38,7 +34,7 @@ - +
@@ -90,11 +86,6 @@ $(document).ready(function(){initNavTree('dir_fdbdd9841f9a730f284bb666ff3d8cfe.h
Image Directory Reference
-
-Directory dependency graph for Image:
-
-
src/Image
-
@@ -119,7 +110,7 @@ Files + doxygen 1.8.17 diff --git a/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.js b/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.js index fe8f755..1245903 100644 --- a/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.js +++ b/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.js @@ -1,7 +1,9 @@ var dir_fdbdd9841f9a730f284bb666ff3d8cfe = [ [ "IntelliImage.cpp", "_intelli_image_8cpp.html", null ], - [ "IntelliImage.h", "_intelli_image_8h.html", "_intelli_image_8h" ], + [ "IntelliImage.h", "_intelli_image_8h.html", [ + [ "IntelliImage", "class_intelli_image.html", "class_intelli_image" ] + ] ], [ "IntelliRasterImage.cpp", "_intelli_raster_image_8cpp.html", null ], [ "IntelliRasterImage.h", "_intelli_raster_image_8h.html", [ [ "IntelliRasterImage", "class_intelli_raster_image.html", "class_intelli_raster_image" ] diff --git a/docs/html/doc.png b/docs/html/doc.png index e84122d7fad85f2d761039a8c021bbbd27db987c..8c3c0291c2cdfc164d9dd7758a7473ae1ba39cb7 100644 GIT binary patch delta 787 zcmV+u1MK|61*!&+B!BTqL_t(|0qvbnOcPlg$3N2+=pXurLT#<3l(xdMKr|*mHtIpM zs4}C_)3LCwVNTMe>P%kE$knCv>B$}9bGSQoVARg5%218uU*F!03 zXWx5966wr(*l_UhGM}`a&YSP=eZRjqbJg@x31G{x0Bj{&E`MMH*v!=Qv|cEzlh5bX z@AdTpf4zIp`_)yv9ybn$1E0@FEE**lk81#CSkt4U0H5*n_e?snBaFx6!R@Zb>2Tt7 zI&nE2-AC}iIB~{ zA>P=?cU_%irhlIEa&}e+Fv8FxIVyyRrdiO1fE=2|g1fq!Qb}iF@rgPoMdWyv$w+sL>VMky*4DBtOf6D5h)FMIX3%w= zBi)B&_^hqvMaZ>cbrpQu@(ru2f2-?1bsX^7VQP`ATJmFGA6*?Cs*C!2PcoQFak%?? zjvhJ8&O`#gzlLyVJ8OjkKpCbhkT;j(;lw1b=H^Hy;w)sds%5j;MLIh>sqxjYtG$h4 zu}Hy0;D0}NvK0B@R4;>PQ=IJSVR&drd>-f5u`y*?OLG%0mrLyn03%EVWdBQK2KOI4 z?E^5vRG`XkS1V|4YGVJsy__2uCf{IR%DmO=Ny0|2Icv5RB|1F4@m zar~HJ2C|4x4FRwjLxEDMs3ysmk=)7Ri7Be}sb|s7WKv~QSL-Jhi)|EBEE>PK38Be}M&Zi7G|px71+Dng+U0dc;ytxXjGuo=S)e(LYn1OWe=um6?#FBqN3Y#qJ& RzzhHY002ovPDHLkV1ltBd7S_N delta 683 zcmV;c0#yB~2EzrAB!7xYL_t(|0qvd7P8v}d#eefhLC{1QG=OzuqZl#K>dKnJswQ<& z>xxZ%3i|-lhjC@%gSfYeB@h*2g0)c;ghc-Iez&2Ca>p(j7hOy^VaVM3oqN7>zF}+i zdOd&_gAMSKcyR(3;3>||&U>9sn}>%7{kzlY&}cMh+}{%!8Gm7Tc$i2eLM#>|9*$;jq2t6;x)zwe^Jv%$A4pZXd;vz69fgaelql;UXkl30;6bQ-XWmT^clDWBg zX(`v&*G7^+0)NM`wG!8L^u4GV8X6*`lz5)U;o%|s`}-Un9noqvsnu!#12B3}tycYs zi3zPhHcD}6QN3Q*CX2c9T)YsoYqeXwCY4GJcwtOY-v_x)Pfw9yTv}S9P$=kRDO1&R zR~1asY&P|}e&T>fpTHK$>E%>wYir8P*E&UVzp=5w;(y|zBFr#3IY~4cMH1I;n+XCH zNO8H2kH1kapOZ``mAOB((W-?kETnbu>FH^@-L4{N0}SBVNfs5Wt8d8Va;&VZu(|nO zsaR!q_cNJHhD0Kv355v2gg^zqBWkJBmno{Ow^}XgcXhnDM>3J5QmJrrbHn!bN8LUE z69N@T?ti6CQ&Ur<=hNh}S+=%5@OFKjnVDB)v+vm1`SfQX0Za%~(Dy-mP$`pA9#pHB z10JN)>1PT4nj-CiI{otUve5&Hv#bR$!AKyfkm8bmDIk;EfAOier_iebi|T>vE0sL} zPho6Px7#D1&vSC}T@?-k1ftn&sW#2CxAz5L03=2N)duU}-~iyC@&Es2{sIPK!!F9g RJO2Ox002ovPDHLkV1oP`NiqNc diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css index 8d4bca1..0c19cbf 100644 --- a/docs/html/doxygen.css +++ b/docs/html/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.8.16 */ +/* The standard CSS for doxygen 1.8.17 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; @@ -22,8 +22,8 @@ h1.groupheader { } h2.groupheader { - border-bottom: 1px solid #A9A9A9; - color: #585858; + border-bottom: 1px solid #747878; + color: #222323; font-size: 150%; font-weight: normal; margin-top: 1.75em; @@ -66,6 +66,11 @@ p.startli, p.startdd { margin-top: 2px; } +th p.starttd, p.intertd, p.endtd { + font-size: 100%; + font-weight: 700; +} + p.starttd { margin-top: 0px; } @@ -108,8 +113,8 @@ h3.version { } div.qindex, div.navtab{ - background-color: #F1F1F1; - border: 1px solid #BDBDBD; + background-color: #E5E6E6; + border: 1px solid #909394; text-align: center; } @@ -125,13 +130,13 @@ div.navtab { /* @group Link Styling */ a { - color: #646465; + color: #2B2D2D; font-weight: normal; text-decoration: none; } .contents a:visited { - color: #747475; + color: #393B3C; } a:hover { @@ -144,13 +149,13 @@ a.qindex { a.qindexHL { font-weight: bold; - background-color: #B8B8B8; - color: #FFFFFF; - border: 1px double #A8A8A8; + background-color: #888C8D; + color: #FFFEFE; + border: 1px double #737777; } .contents a.qindexHL:visited { - color: #FFFFFF; + color: #FFFEFE; } a.el { @@ -161,11 +166,11 @@ a.elRef { } a.code, a.code:visited, a.line, a.line:visited { - color: #747475; + color: #393B3C; } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #747475; + color: #393B3C; } /* @end */ @@ -194,8 +199,8 @@ ul { } pre.fragment { - border: 1px solid #D5D5D5; - background-color: #FCFCFC; + border: 1px solid #B5B7B7; + background-color: #FAFAFA; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; @@ -209,8 +214,8 @@ pre.fragment { div.fragment { padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ margin: 4px 8px 4px 2px; - background-color: #FCFCFC; - border: 1px solid #D5D5D5; + background-color: #FAFAFA; + border: 1px solid #B5B7B7; } div.line { @@ -278,7 +283,7 @@ span.lineno a:hover { div.ah, span.ah { background-color: black; font-weight: bold; - color: #FFFFFF; + color: #FFFEFE; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; @@ -326,9 +331,9 @@ div.contents { } td.indexkey { - background-color: #F1F1F1; + background-color: #E5E6E6; font-weight: bold; - border: 1px solid #D5D5D5; + border: 1px solid #B5B7B7; margin: 2px 0px 2px 0; padding: 2px 10px; white-space: nowrap; @@ -336,14 +341,14 @@ td.indexkey { } td.indexvalue { - background-color: #F1F1F1; - border: 1px solid #D5D5D5; + background-color: #E5E6E6; + border: 1px solid #B5B7B7; padding: 2px 10px; margin: 2px 0px; } tr.memlist { - background-color: #F2F2F2; + background-color: #E8E9E9; } p.formulaDsp { @@ -426,15 +431,15 @@ span.vhdllogic { } blockquote { - background-color: #F9F9F9; - border-left: 2px solid #B8B8B8; + background-color: #F4F4F4; + border-left: 2px solid #888C8D; margin: 0 24px 0 4px; padding: 0 12px 0 16px; } blockquote.DocNodeRTL { border-left: 0; - border-right: 2px solid #B8B8B8; + border-right: 2px solid #888C8D; margin: 0 4px 0 24px; padding: 0 16px 0 12px; } @@ -467,18 +472,18 @@ td.tiny { .dirtab { padding: 4px; border-collapse: collapse; - border: 1px solid #BDBDBD; + border: 1px solid #909394; } th.dirtab { - background: #F1F1F1; + background: #E5E6E6; font-weight: bold; } hr { height: 0px; border: none; - border-top: 1px solid #7A7A7A; + border-top: 1px solid #3F4141; } hr.footer { @@ -513,7 +518,7 @@ table.memberdecls { .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #FAFAFB; + background-color: #F7F7F7; border: none; margin: 4px; padding: 1px 0 0 8px; @@ -525,7 +530,7 @@ table.memberdecls { } .memSeparator { - border-bottom: 1px solid #E7E7E7; + border-bottom: 1px solid #D3D5D5; line-height: 1px; margin: 0px; padding: 0px; @@ -535,12 +540,12 @@ table.memberdecls { white-space: nowrap; } -.memItemRight { +.memItemRight, .memTemplItemRight { width: 100%; } .memTemplParams { - color: #747475; + color: #393B3C; white-space: nowrap; font-size: 80%; } @@ -553,15 +558,15 @@ table.memberdecls { .memtitle { padding: 8px; - border-top: 1px solid #C0C0C1; - border-left: 1px solid #C0C0C1; - border-right: 1px solid #C0C0C1; + border-top: 1px solid #959899; + border-left: 1px solid #959899; + border-right: 1px solid #959899; border-top-right-radius: 4px; border-top-left-radius: 4px; margin-bottom: -1px; background-image: url('nav_f.png'); background-repeat: repeat-x; - background-color: #EAEAEA; + background-color: #D9DADB; line-height: 1.25; font-weight: 300; float:left; @@ -576,14 +581,14 @@ table.memberdecls { .memtemplate { font-size: 80%; - color: #747475; + color: #393B3C; font-weight: normal; margin-left: 9px; } .memnav { - background-color: #F1F1F1; - border: 1px solid #BDBDBD; + background-color: #E5E6E6; + border: 1px solid #909394; text-align: center; margin: 2px; margin-right: 15px; @@ -621,14 +626,14 @@ table.memberdecls { } .memproto, dl.reflist dt { - border-top: 1px solid #C0C0C1; - border-left: 1px solid #C0C0C1; - border-right: 1px solid #C0C0C1; + border-top: 1px solid #959899; + border-left: 1px solid #959899; + border-right: 1px solid #959899; padding: 6px 0px 6px 0px; - color: #3D3D3D; + color: #111112; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #E8E8E8; + background-color: #D5D6D6; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; @@ -647,15 +652,15 @@ table.memberdecls { } .memdoc, dl.reflist dd { - border-bottom: 1px solid #C0C0C1; - border-left: 1px solid #C0C0C1; - border-right: 1px solid #C0C0C1; + border-bottom: 1px solid #959899; + border-left: 1px solid #959899; + border-right: 1px solid #959899; padding: 6px 10px 2px 10px; - background-color: #FCFCFC; + background-color: #FAFAFA; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; - background-color: #FFFFFF; + background-color: #FFFEFE; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; @@ -738,11 +743,11 @@ span.mlabels { } span.mlabel { - background-color: #999A9A; - border-top:1px solid #838384; - border-left:1px solid #838384; - border-right:1px solid #D5D5D5; - border-bottom:1px solid #D5D5D5; + background-color: #616465; + border-top:1px solid #484B4B; + border-left:1px solid #484B4B; + border-right:1px solid #B5B7B7; + border-bottom:1px solid #B5B7B7; text-shadow: none; color: white; margin-right: 4px; @@ -761,8 +766,8 @@ span.mlabel { div.directory { margin: 10px 0px; - border-top: 1px solid #B8B8B8; - border-bottom: 1px solid #B8B8B8; + border-top: 1px solid #888C8D; + border-bottom: 1px solid #888C8D; width: 100%; } @@ -800,7 +805,7 @@ div.directory { .directory tr.even { padding-left: 6px; - background-color: #F9F9F9; + background-color: #F4F4F4; } .directory img { @@ -818,11 +823,11 @@ div.directory { cursor: pointer; padding-left: 2px; padding-right: 2px; - color: #646465; + color: #2B2D2D; } .arrow { - color: #B8B8B8; + color: #888C8D; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; @@ -842,7 +847,7 @@ div.directory { height: 14px; width: 16px; display: inline-block; - background-color: #999A9A; + background-color: #616465; color: white; text-align: center; border-radius: 4px; @@ -907,7 +912,7 @@ div.dynheader { address { font-style: normal; - color: #464646; + color: #161717; } table.doxtable caption { @@ -921,13 +926,13 @@ table.doxtable { } table.doxtable td, table.doxtable th { - border: 1px solid #4A4A4B; + border: 1px solid #19191A; padding: 3px 7px 2px; } table.doxtable th { - background-color: #5B5B5C; - color: #FFFFFF; + background-color: #242626; + color: #FFFEFE; font-size: 110%; padding-bottom: 4px; padding-top: 5px; @@ -936,7 +941,7 @@ table.doxtable th { table.fieldtable { /*width: 100%;*/ margin-bottom: 10px; - border: 1px solid #C0C0C1; + border: 1px solid #959899; border-spacing: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -952,8 +957,8 @@ table.fieldtable { .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; - border-right: 1px solid #C0C0C1; - border-bottom: 1px solid #C0C0C1; + border-right: 1px solid #959899; + border-bottom: 1px solid #959899; vertical-align: top; } @@ -962,7 +967,7 @@ table.fieldtable { } .fieldtable td.fielddoc { - border-bottom: 1px solid #C0C0C1; + border-bottom: 1px solid #959899; /*width: 100%;*/ } @@ -981,9 +986,9 @@ table.fieldtable { .fieldtable th { background-image:url('nav_f.png'); background-repeat:repeat-x; - background-color: #EAEAEA; + background-color: #D9DADB; font-size: 90%; - color: #3D3D3D; + color: #111112; padding-bottom: 4px; padding-top: 5px; text-align:left; @@ -994,7 +999,7 @@ table.fieldtable { -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; - border-bottom: 1px solid #C0C0C1; + border-bottom: 1px solid #959899; } @@ -1016,8 +1021,8 @@ table.fieldtable { background-position: 0 -5px; height:30px; line-height:30px; - color:#AAABAB; - border:solid 1px #D3D3D3; + color:#767A7B; + border:solid 1px #B2B4B5; overflow:hidden; margin:0px; padding:0px; @@ -1032,7 +1037,7 @@ table.fieldtable { background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; - color:#595959; + color:#232424; } .navpath li.navelem a @@ -1041,7 +1046,7 @@ table.fieldtable { display:block; text-decoration: none; outline: none; - color: #424243; + color: #141515; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; @@ -1049,7 +1054,7 @@ table.fieldtable { .navpath li.navelem a:hover { - color:#929293; + color:#585C5C; } .navpath li.footer @@ -1061,7 +1066,7 @@ table.fieldtable { background-image:none; background-repeat:no-repeat; background-position:right; - color:#595959; + color:#232424; font-size: 8pt; } @@ -1108,9 +1113,9 @@ div.header { background-image:url('nav_h.png'); background-repeat:repeat-x; - background-color: #FAFAFB; + background-color: #F7F7F7; margin: 0px; - border-bottom: 1px solid #D5D5D5; + border-bottom: 1px solid #B5B7B7; } div.headertitle @@ -1305,7 +1310,7 @@ dl.section dd { padding: 0px; margin: 0px; width: 100%; - border-bottom: 1px solid #838384; + border-bottom: 1px solid #484B4B; } .image @@ -1340,7 +1345,7 @@ dl.section dd { div.zoom { - border: 1px solid #AFAFAF; + border: 1px solid #7C8081; } dl.citelist { @@ -1348,7 +1353,7 @@ dl.citelist { } dl.citelist dt { - color:#545454; + color:#1F2020; float:left; font-weight:bold; margin-right:10px; @@ -1362,8 +1367,8 @@ dl.citelist dd { div.toc { padding: 14px 25px; - background-color: #F7F7F7; - border: 1px solid #E3E3E3; + background-color: #F1F1F1; + border: 1px solid #CCCECE; border-radius: 7px 7px 7px 7px; float: right; height: auto; @@ -1392,7 +1397,7 @@ div.toc li { div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #747475; + color: #393B3C; border-bottom: 0 none; margin: 0; } @@ -1552,7 +1557,7 @@ tr.heading h2 { } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; + border-top-color: #FFFEFE; border-width: 10px; margin: 0px -10px; } @@ -1580,7 +1585,7 @@ tr.heading h2 { } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; + border-bottom-color: #FFFEFE; border-width: 10px; margin: 0px -10px; } @@ -1607,7 +1612,7 @@ tr.heading h2 { left: 100%; } #powerTip.e:after { - border-left-color: #FFFFFF; + border-left-color: #FFFEFE; border-width: 10px; top: 50%; margin-top: -10px; @@ -1623,7 +1628,7 @@ tr.heading h2 { right: 100%; } #powerTip.w:after { - border-right-color: #FFFFFF; + border-right-color: #FFFEFE; border-width: 10px; top: 50%; margin-top: -10px; @@ -1664,7 +1669,7 @@ table.markdownTable { } table.markdownTable td, table.markdownTable th { - border: 1px solid #4A4A4B; + border: 1px solid #19191A; padding: 3px 7px 2px; } @@ -1672,13 +1677,13 @@ table.markdownTableHead tr { } table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #4A4A4B; + border: 1px solid #19191A; padding: 3px 7px 2px; } th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #5B5B5C; - color: #FFFFFF; + background-color: #242626; + color: #FFFEFE; font-size: 110%; padding-bottom: 4px; padding-top: 5px; @@ -1704,7 +1709,7 @@ table.markdownTable { } table.markdownTable td, table.markdownTable th { - border: 1px solid #4A4A4B; + border: 1px solid #19191A; padding: 3px 7px 2px; } @@ -1712,8 +1717,8 @@ table.markdownTable tr { } th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #5B5B5C; - color: #FFFFFF; + background-color: #242626; + color: #FFFEFE; font-size: 110%; padding-bottom: 4px; padding-top: 5px; diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png index 0fbd8cc92f2698ce9d412b7935836ca3e0a3d396..a83d026c1266b221d96cf7da90104a5b39fede00 100644 GIT binary patch literal 3861 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 XbG!fw0yEIH00000NkvXXu0mjfFi?`4 literal 3778 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 - + IntelliPhoto: File List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@

Files

- +
@@ -91,50 +87,51 @@ $(document).ready(function(){initNavTree('files.html','');});
Here is a list of all files with brief descriptions:
-
[detail level 1234]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
[detail level 123]
  intelliphoto
  src
  GUI
 IntelliPhotoGui.cpp
 IntelliPhotoGui.h
  Image
 IntelliImage.cpp
 IntelliImage.h
 IntelliRasterImage.cpp
 IntelliRasterImage.h
 IntelliShapedImage.cpp
 IntelliShapedImage.h
  IntelliHelper
 IntelliColorPicker.cpp
 IntelliColorPicker.h
 IntelliRenderSettings.cpp
 IntelliRenderSettings.h
 IntelliToolsettings.cpp
 IntelliToolsettings.h
 IntelliTriangulation.cpp
 IntelliTriangulation.h
  Layer
 PaintingArea.cpp
 PaintingArea.h
  Tool
 IntelliColorPicker.cpp
 IntelliTool.cpp
 IntelliTool.h
 IntelliToolCircle.cpp
 IntelliToolCircle.h
 IntelliToolFloodFill.cpp
 IntelliToolFloodFill.h
 IntelliToolLine.cpp
 IntelliToolLine.h
 IntelliToolPen.cpp
 IntelliToolPen.h
 IntelliToolPlain.cpp
 IntelliToolPlain.h
 IntelliToolPolygon.cpp
 IntelliToolPolygon.h
 IntelliToolRectangle.cpp
 IntelliToolRectangle.h
 main.cpp
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  src
  GUI
 IntelliInputDialog.cpp
 IntelliInputDialog.h
 IntelliPhotoGui.cpp
 IntelliPhotoGui.h
  Image
 IntelliImage.cpp
 IntelliImage.h
 IntelliRasterImage.cpp
 IntelliRasterImage.h
 IntelliShapedImage.cpp
 IntelliShapedImage.h
  IntelliHelper
 IntelliColorPicker.cpp
 IntelliColorPicker.h
 IntelliRenderSettings.cpp
 IntelliRenderSettings.h
 IntelliToolsettings.cpp
 IntelliToolsettings.h
 IntelliTriangulation.cpp
 IntelliTriangulation.h
  Layer
 PaintingArea.cpp
 PaintingArea.h
  Tool
 IntelliColorPicker.cpp
 IntelliTool.cpp
 IntelliTool.h
 IntelliToolCircle.cpp
 IntelliToolCircle.h
 IntelliToolFloodFill.cpp
 IntelliToolFloodFill.h
 IntelliToolLine.cpp
 IntelliToolLine.h
 IntelliToolPen.cpp
 IntelliToolPen.h
 IntelliToolPlain.cpp
 IntelliToolPlain.h
 IntelliToolPolygon.cpp
 IntelliToolPolygon.h
 IntelliToolRectangle.cpp
 IntelliToolRectangle.h
 main.cpp
@@ -144,7 +141,7 @@ $(document).ready(function(){initNavTree('files.html','');});
    + doxygen 1.8.17
diff --git a/docs/html/files_dup.js b/docs/html/files_dup.js index 60f71b9..c3b39c4 100644 --- a/docs/html/files_dup.js +++ b/docs/html/files_dup.js @@ -1,4 +1,4 @@ var files_dup = [ - [ "intelliphoto", "dir_8db5f55022e7670536cbc9a6a1d6f01c.html", "dir_8db5f55022e7670536cbc9a6a1d6f01c" ] + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ]; \ No newline at end of file diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png index 5a4dbc68cd321cfe967b09d56fe05f469f84eb57..c1a50d3da00435410fafa162873d75d9d471fb9e 100644 GIT binary patch delta 625 zcmV-%0*?Kv1c?QZBYy%=NklXt6XWA*J|iW%Q!eA~^t6hlVo{=mVxfS-?Sj0qfmW-9N6X7w zmrB&_cEM#us(&)Ur9`@lXJ`Gv4f=Lp?Q@sIaUEo{SpY~NK_G-cuh#>YQJ30N^d)e) ztLBd549-#^MBeXvga9HV^#-o2ijtAJej+09$!MRFhDiV*4GELiUcM5|<`Qh%9<2EZ zxFn6t&k2>8dIsMQ4)Ag3eZ=Gh!L#)jV&1a6s?V#8%YWocM`r>89jzY>pFZqdOz`yi zx-iXIWgZcPy`bngQo2}+`tM4+-NxtL-Nn8nq(6a@kk-2VayTi?X$?RyWF{&AKxCv6oSyzsz3q1i0K`F>hfN;Iq^3%F4`da; zj*lbShH6Q|tsCB_IC^aq03t~IR2W7n*IZg;_4)(0urSZ8YK_%uRaTvwW0lH%W}2p) zSD0nhnCv!nrtz@O78?z@Ut!mCxo;QV;MU~i8UXw&{Qv)GLnrtPleInRpl=SC00000 LNkvXXu0mjfA5Ac8 delta 530 zcmV+t0`2{Y1*!y)BYy$$Nkl{9#6#gvO>WR2h0aMbt{G@Pr2bShp@(|>u z$}==xSVPE=uFUC4j3wt@*)kHSO><5eI>`EtWXbuy`{`bkH7JS#08R!00H?&s1)2bG zh}CLU+-)`h_WjfOIcBq2003`+SAfZTaa_L#L4eKuJqrN9n|}}-CV9DB7TfI>aonrP z`J0EI56(M}cH_0^EW+jGH)o@M(QJCDjs=(~ z%bp!#v#wM*SAR;@YbAiZ5(MCMudGr^lbK^?0*+cws(q8XG5{9$SG?B&lS{de$hasS z*dqG^5rRUXH2_XO7NC#J5!uIMoTx(8d8lnv;=WtQ;{eEZJ1t~H?9!By1P)5HEMMt3 z`mF#b>-p(PAAun9|%Vfg)z4(Q&w0)T&o|NlSQ$pu~j)1D|$ UJQNU>01E&B07*qoM6N<$f;S8PzyJUM diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png index 4e3bff82d528431d76773e05a51df8927791eab4..aba59c0854922e82a194d7208a20a3190df3bf73 100644 GIT binary patch delta 626 zcmV-&0*(E<1d9cbB!5y#L_t(|0qtGCZ__{&{%prlhNy88+i3&B1SM?}rL9txA44V9 zioXL8MZg9NL&L<<35GK87og6}s1tBPAV5OuQdAZy(S|Lli0`;}#?+3}9|IjKVcnN| zzB_;KeebU(BAe##TUDKc&It<;w?VC47IyO4X%K(tTyASU>rfJHL zb*X|YClll2aBK&ql8Zt9j;UQXnz)RkDiHg84n-ak10tgc(JzDnVD|EaU8gANzOK0Y1_69yI7P8Y!u~e zS$Px+1>|y;v~$Y-wzY+8i;FQOBWuv>^;K@83Vfd{Rb0;gpU7#ARA?HdF<1i-8wm$Q z(Chb*GJ-8l*A!9UjLU8ch=?$BEPvHI6&^rrBx-Q$?teYudFP%)e1m3PLhc2p~3mDzrj!FQMT2(vomoSM_$# z@B911Ii~KR6o!s>c7EXb>go{+h($ delta 546 zcmV+-0^R+K1-k^0B!2=)L_t(|0qtE)ZsIT${t^eZQbGc1%ajZdXtU=A)AjTk)8!l@ zy+`L77r7JpPp?w-}gTIbJ!Y5k^sQFg$V%f z86Tg(0)V0zkH^VqG(sFF6bmdCF?`=g5VQ;cI5c(=FnG0EMSrPOf)GN@4F&@|Jv}N{ zusICFfN7ePO`0<$a&p69`JT?!A5W5c#>9336w?QMci zr*jJc+hJ_mwAbq;lgUJZ>PnXxv{kXHTF=Kxtg>EndUA^E>+cyQIRy{>e$;MvRJD~# zMP<+9%$2*VTz`gBcHovNlM2V?zKfUf3%cEIMoHlrOs7+|HM(;CakV^P6@2h(1uIoN zzh1nLfL~w&A(jqazq}$_kfSt_A|^6jK+#trN5C)4=QGMg!26v#3svBK&Hitd}D~cF1ow>m9YQW-+yTrZTHof9wygY^!n!&H#a{r zE-F;8yt(s?C3Sy$oTfbJ4A#<8fIGocfax{=B>4UO3}DkVs0J+RbLRU1Ak%UejV{(% z7+y-c`mz-SvhlScn~jF7`@Zz+b$R~foU$)l%_c=lw%dWcytt5I7|JHi)oQi-y$T5Y kCjk7f_#6C31Ax8p7Zu_c>s~+kasU7T07*qoM6N<$g49|1QUCw| diff --git a/docs/html/functions.html b/docs/html/functions.html index 8e9a72d..e1c6880 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class Members @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -173,7 +169,7 @@ $(document).ready(function(){initNavTree('functions.html','');});

- d -

- l -

diff --git a/docs/html/functions_enum.html b/docs/html/functions_enum.html index d123832..af5c2dd 100644 --- a/docs/html/functions_enum.html +++ b/docs/html/functions_enum.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class Members - Enumerations @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
@@ -90,9 +86,6 @@ $(document).ready(function(){initNavTree('functions_enum.html','');});
  • ImageType : IntelliImage
  • -
  • LineStyle -: IntelliToolsettings -
  • Tooltype : IntelliTool
  • @@ -104,7 +97,7 @@ $(document).ready(function(){initNavTree('functions_enum.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index c039c3d..5bcfd1c 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class Members - Functions @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -141,7 +137,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');});

    - d -

    -

    - f -

    - -

    - g -

    @@ -400,9 +401,15 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
  • save() : PaintingArea
  • +
  • setFastRendering() +: IntelliRenderSettings +
  • setFirstColor() : IntelliColorPicker
  • +
  • setImageData() +: IntelliImage +
  • setInnerAlpha() : IntelliToolsettings
  • @@ -419,16 +426,29 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); : IntelliImage , IntelliRasterImage , IntelliShapedImage +, PaintingArea + +
  • setRenderSettings() +: PaintingArea
  • setSecondColor() : IntelliColorPicker
  • +
  • setToolWidth() +: IntelliPhotoGui +
  • slotActivateLayer() : PaintingArea
  • +
  • slotCloseEvent() +: IntelliInputDialog +
  • slotDeleteActiveLayer() : PaintingArea
  • +
  • slotEingabe() +: IntelliInputDialog +
  • swapColors() : IntelliColorPicker
  • @@ -503,7 +523,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index af7dcfb..0a0c9bc 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class Members - Variables @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -115,8 +111,8 @@ $(document).ready(function(){initNavTree('functions_vars.html','');}); : IntelliTool , PaintingArea -
  • fastRenderer -: IntelliImage +
  • fastRenderering +: IntelliImage
  • height : LayerObject @@ -157,7 +153,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
      + doxygen 1.8.17
  • diff --git a/docs/html/globals.html b/docs/html/globals.html index e94d00d..24a6eb2 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -3,7 +3,7 @@ - + IntelliPhoto: File Members @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -101,7 +97,7 @@ $(document).ready(function(){initNavTree('globals.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html index 46fcdba..8ffa9cd 100644 --- a/docs/html/globals_defs.html +++ b/docs/html/globals_defs.html @@ -3,7 +3,7 @@ - + IntelliPhoto: File Members @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -98,7 +94,7 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html index fbf9e27..29412df 100644 --- a/docs/html/globals_func.html +++ b/docs/html/globals_func.html @@ -3,7 +3,7 @@ - + IntelliPhoto: File Members @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -98,7 +94,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index 3e7ceb0..76d1bc9 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Class Hierarchy @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -107,11 +103,13 @@ $(document).ready(function(){initNavTree('hierarchy.html','');});  CIntelliToolRectangleTool to draw a rectangle  CIntelliToolsettings  CLayerObjectThe LayerObject struct holds all the information needed to construct a layer - CQMainWindow - CIntelliPhotoGuiHandles the graphical user interface for the intelliPhoto program - CQWidget - CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project - CTriangleThe Triangle struct holds the 3 vertices of a triangle + CQDialog + CIntelliInputDialog + CQMainWindow + CIntelliPhotoGuiThe IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program + CQWidget + CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project + CTriangleThe Triangle struct holds the 3 vertices of a triangle
    @@ -121,7 +119,7 @@ $(document).ready(function(){initNavTree('hierarchy.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js index 5b4a232..617e7cc 100644 --- a/docs/html/hierarchy.js +++ b/docs/html/hierarchy.js @@ -18,6 +18,9 @@ var hierarchy = ] ], [ "IntelliToolsettings", "class_intelli_toolsettings.html", null ], [ "LayerObject", "struct_layer_object.html", null ], + [ "QDialog", null, [ + [ "IntelliInputDialog", "class_intelli_input_dialog.html", null ] + ] ], [ "QMainWindow", null, [ [ "IntelliPhotoGui", "class_intelli_photo_gui.html", null ] ] ], diff --git a/docs/html/index.html b/docs/html/index.html index a5c415e..023ac14 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Main Page @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -97,7 +93,7 @@ $(document).ready(function(){initNavTree('index.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/main_8cpp.html b/docs/html/main_8cpp.html index 6ef81a6..cbb692d 100644 --- a/docs/html/main_8cpp.html +++ b/docs/html/main_8cpp.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/main.cpp File Reference +IntelliPhoto: src/main.cpp File Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -140,10 +136,10 @@ Functions diff --git a/docs/html/main_8cpp_source.html b/docs/html/main_8cpp_source.html index 3a4e0a2..8a58d0c 100644 --- a/docs/html/main_8cpp_source.html +++ b/docs/html/main_8cpp_source.html @@ -3,9 +3,9 @@ - + -IntelliPhoto: intelliphoto/src/main.cpp Source File +IntelliPhoto: src/main.cpp Source File @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@
    - +
    @@ -107,16 +103,16 @@ $(document).ready(function(){initNavTree('main_8cpp_source.html','');});
    15 }
    -
    The IntelliPhotoGui class handles the graphical user interface for the intelliPhoto program.
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    int main(int argc, char *argv[])
    Definition: main.cpp:6
    diff --git a/docs/html/menudata.js b/docs/html/menudata.js index 1435286..4e9d117 100644 --- a/docs/html/menudata.js +++ b/docs/html/menudata.js @@ -55,7 +55,6 @@ var menudata={children:[ {text:"a",url:"functions_func.html#index_a"}, {text:"c",url:"functions_func.html#index_c"}, {text:"d",url:"functions_func.html#index_d"}, -{text:"f",url:"functions_func.html#index_f"}, {text:"g",url:"functions_func.html#index_g"}, {text:"i",url:"functions_func.html#index_i"}, {text:"l",url:"functions_func.html#index_l"}, diff --git a/docs/html/namespace_intelli_triangulation.html b/docs/html/namespace_intelli_triangulation.html index c26edf4..10ec8ee 100644 --- a/docs/html/namespace_intelli_triangulation.html +++ b/docs/html/namespace_intelli_triangulation.html @@ -3,7 +3,7 @@ - + IntelliPhoto: IntelliTriangulation Namespace Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -289,7 +285,7 @@ Functions + doxygen 1.8.17
    diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html index bf1bc8b..02750d3 100644 --- a/docs/html/namespacemembers.html +++ b/docs/html/namespacemembers.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Namespace Members @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -107,7 +103,7 @@ $(document).ready(function(){initNavTree('namespacemembers.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html index cfb4d28..d5a497c 100644 --- a/docs/html/namespacemembers_func.html +++ b/docs/html/namespacemembers_func.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Namespace Members @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -107,7 +103,7 @@ $(document).ready(function(){initNavTree('namespacemembers_func.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html index 770b3ef..4a5c8e3 100644 --- a/docs/html/namespaces.html +++ b/docs/html/namespaces.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Namespace List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -102,7 +98,7 @@ $(document).ready(function(){initNavTree('namespaces.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png index 3a8f6ca8cce4c401df698a41aad331a653074d8f..f470f9852024d69d9411e89e6545ab451e7199e4 100644 GIT binary patch delta 118 zcmV-+0Ez#P0h0lcByU9(4~*Tn3t(9hU;;!5FBr`) z0>&8Jdgs;}AD3Erzm-x{%2~yjMC46`5R~&?S?h%5RV>C30Q^FT(?%i!fC)aDum1gs Y6G8kRU7(dn9{>OV07*qoM6N<$f;XoyV*mgE delta 114 zcmV-&0FD2X0gnNYBx_blL_t(|0qxy862Kq`1ke>O9A^alUEIn?{Jin8#7zw~H;mjcrfX%x*?|c4iZ%oV{ UOMZ8{@c;k-07*qoM6N<$g2*v2=>Px# diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png index bdf5bc919de2053ce2db5f27f7d9644c2036394c..ad61711b714ab5094dda477a70939abc1576b25b 100644 GIT binary patch delta 66 zcmaz_oS;pyTSQo;E4?rB~I2M#C4#MM{-o&WK0m+6E(J};D_sv=z(_S`)CzMSFE WWtM6YnZ(5mK;Y@>=d#Wzp$P!6n;U5W delta 59 zcmYd{nxJB)=;`7ZQo;E4t|Ko41IOV5Vk+nBk4cL^Z{9XL - + diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html index 0fcb704..8eb215b 100644 --- a/docs/html/search/all_1.html +++ b/docs/html/search/all_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html index c234738..6fd3a4a 100644 --- a/docs/html/search/all_10.html +++ b/docs/html/search/all_10.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js index 22c3a38..5c3fd99 100644 --- a/docs/html/search/all_10.js +++ b/docs/html/search/all_10.js @@ -1,6 +1,6 @@ var searchData= [ - ['wheelevent_160',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], - ['width_161',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_162',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['wheelevent_169',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], + ['width_170',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_171',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html index 2f927fe..f78343b 100644 --- a/docs/html/search/all_11.html +++ b/docs/html/search/all_11.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js index 738992b..d23bbcf 100644 --- a/docs/html/search/all_11.js +++ b/docs/html/search/all_11.js @@ -1,17 +1,17 @@ var searchData= [ - ['_7eintellicolorpicker_163',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_164',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_165',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_166',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_167',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_168',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_169',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_170',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_171',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_172',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_173',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_174',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_175',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_176',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]] + ['_7eintellicolorpicker_172',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_173',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_174',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_175',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_176',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_177',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_178',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolline_179',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_180',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_181',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_182',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_183',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_184',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_185',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html index 19c530f..b26d916 100644 --- a/docs/html/search/all_2.html +++ b/docs/html/search/all_2.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html index 1ae887f..b61b96f 100644 --- a/docs/html/search/all_3.html +++ b/docs/html/search/all_3.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js index 9608801..83e1cf9 100644 --- a/docs/html/search/all_3.js +++ b/docs/html/search/all_3.js @@ -1,9 +1,8 @@ var searchData= [ - ['deletelayer_25',['deleteLayer',['../class_painting_area.html#a2382ebf8c31dee36cb714f34a18b71e4',1,'PaintingArea']]], - ['dotted_5fline_26',['DOTTED_LINE',['../class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089a7660f396543c877e45d443f99d02bd0e',1,'IntelliToolsettings']]], - ['drawline_27',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], - ['drawpixel_28',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], - ['drawplain_29',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], - ['drawpoint_30',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] + ['deletelayer_25',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], + ['drawline_26',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], + ['drawpixel_27',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], + ['drawplain_28',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], + ['drawpoint_29',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html index 14c90ef..06de155 100644 --- a/docs/html/search/all_4.html +++ b/docs/html/search/all_4.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index d87126f..3582f85 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['fastrenderer_31',['fastRenderer',['../class_intelli_image.html#adade0f6990152f09d953067a51511b9c',1,'IntelliImage']]], - ['floodfill_32',['floodFill',['../class_painting_area.html#aeb5eb394b979ea90f2be9849fdda1774',1,'PaintingArea::floodFill()'],['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool::FLOODFILL()']]] + ['fastrenderering_30',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]], + ['floodfill_31',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] ]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html index 60fa53e..2544c4e 100644 --- a/docs/html/search/all_5.html +++ b/docs/html/search/all_5.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js index 85f0485..1ba5d99 100644 --- a/docs/html/search/all_5.js +++ b/docs/html/search/all_5.js @@ -1,23 +1,25 @@ var searchData= [ - ['getdeepcopy_33',['getDeepCopy',['../class_intelli_image.html#af6381067bdf565669f856bb589008ae9',1,'IntelliImage::getDeepCopy()'],['../class_intelli_raster_image.html#a8f901301b106504de3c27308ade897dc',1,'IntelliRasterImage::getDeepCopy()'],['../class_intelli_shaped_image.html#aed0b31e0fa771104399d1f5ff39a0337',1,'IntelliShapedImage::getDeepCopy()']]], - ['getdisplayable_34',['getDisplayable',['../class_intelli_image.html#a21c7e65b59a26db45aac3880133ef21d',1,'IntelliImage::getDisplayable(const QSize &displaySize, int alpha)=0'],['../class_intelli_image.html#a9d4daf3c48c64695105689f61c21bae0',1,'IntelliImage::getDisplayable(int alpha=255)=0'],['../class_intelli_raster_image.html#ae43393397b0141a8033fe34d3a1b1884',1,'IntelliRasterImage::getDisplayable(const QSize &displaySize, int alpha) override'],['../class_intelli_raster_image.html#a612d79124f0e2c158a4f0abbe4b5f97f',1,'IntelliRasterImage::getDisplayable(int alpha=255) override'],['../class_intelli_shaped_image.html#a68cf374247c16f07fd84d50e4cd05630',1,'IntelliShapedImage::getDisplayable(const QSize &displaySize, int alpha=255) override'],['../class_intelli_shaped_image.html#ac6a99e1a96134073bceea252b37636cc',1,'IntelliShapedImage::getDisplayable(int alpha=255) override']]], - ['getfastrenderer_35',['getFastRenderer',['../class_intelli_render_settings.html#a5a74e7d7ed3a2e944883dddbe8bbf5e8',1,'IntelliRenderSettings']]], - ['getfirstcolor_36',['getFirstColor',['../class_intelli_color_picker.html#aae2eb27b928fe9388b9398b0556303b7',1,'IntelliColorPicker']]], - ['getheightofactive_37',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], - ['getimagedata_38',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], - ['getimageofactivelayer_39',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], - ['getinneralpha_40',['getInnerAlpha',['../class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c',1,'IntelliToolsettings']]], + ['getdeepcopy_32',['getDeepCopy',['../class_intelli_image.html#af6381067bdf565669f856bb589008ae9',1,'IntelliImage::getDeepCopy()'],['../class_intelli_raster_image.html#a8f901301b106504de3c27308ade897dc',1,'IntelliRasterImage::getDeepCopy()'],['../class_intelli_shaped_image.html#aed0b31e0fa771104399d1f5ff39a0337',1,'IntelliShapedImage::getDeepCopy()']]], + ['getdisplayable_33',['getDisplayable',['../class_intelli_image.html#a21c7e65b59a26db45aac3880133ef21d',1,'IntelliImage::getDisplayable(const QSize &displaySize, int alpha)=0'],['../class_intelli_image.html#a9d4daf3c48c64695105689f61c21bae0',1,'IntelliImage::getDisplayable(int alpha=255)=0'],['../class_intelli_raster_image.html#ae43393397b0141a8033fe34d3a1b1884',1,'IntelliRasterImage::getDisplayable(const QSize &displaySize, int alpha) override'],['../class_intelli_raster_image.html#a612d79124f0e2c158a4f0abbe4b5f97f',1,'IntelliRasterImage::getDisplayable(int alpha=255) override'],['../class_intelli_shaped_image.html#a68cf374247c16f07fd84d50e4cd05630',1,'IntelliShapedImage::getDisplayable(const QSize &displaySize, int alpha=255) override'],['../class_intelli_shaped_image.html#ac6a99e1a96134073bceea252b37636cc',1,'IntelliShapedImage::getDisplayable(int alpha=255) override']]], + ['getfirstcolor_34',['getFirstColor',['../class_intelli_color_picker.html#aae2eb27b928fe9388b9398b0556303b7',1,'IntelliColorPicker']]], + ['getheightofactive_35',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], + ['getimagedata_36',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], + ['getimagedataofactivelayer_37',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], + ['getimageofactivelayer_38',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], + ['getinneralpha_39',['getInnerAlpha',['../class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c',1,'IntelliToolsettings']]], + ['getint_40',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], ['getisdrawing_41',['getIsDrawing',['../class_intelli_tool.html#a0020fad2e26315d5c4d96dbc95d1dceb',1,'IntelliTool']]], - ['getlinestyle_42',['getLinestyle',['../class_intelli_toolsettings.html#a5beb193b25e0665516244c61c5e65aa6',1,'IntelliToolsettings']]], - ['getlinewidth_43',['getLineWidth',['../class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a',1,'IntelliToolsettings']]], - ['getnumberofactivelayer_44',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], - ['getpixelcolor_45',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], - ['getpolygondata_46',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], - ['getpolygondataofreallayer_47',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], - ['getsecondcolor_48',['getSecondColor',['../class_intelli_color_picker.html#a55568fbf5dc783f06284b7031ffe9415',1,'IntelliColorPicker']]], - ['gettooltype_49',['getTooltype',['../class_intelli_tool.html#aae2a11c5bae4973ed827c60e0c1352b1',1,'IntelliTool']]], - ['gettypeofimage_50',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], - ['gettypeofimagereallayer_51',['getTypeOfImageRealLayer',['../class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead',1,'PaintingArea']]], - ['getwidthofactive_52',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] + ['getlinewidth_42',['getLineWidth',['../class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a',1,'IntelliToolsettings']]], + ['getmaxheight_43',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], + ['getmaxwidth_44',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], + ['getnumberofactivelayer_45',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], + ['getpixelcolor_46',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], + ['getpolygondata_47',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], + ['getpolygondataofreallayer_48',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], + ['getsecondcolor_49',['getSecondColor',['../class_intelli_color_picker.html#a55568fbf5dc783f06284b7031ffe9415',1,'IntelliColorPicker']]], + ['gettooltype_50',['getTooltype',['../class_intelli_tool.html#aae2a11c5bae4973ed827c60e0c1352b1',1,'IntelliTool']]], + ['gettypeofimage_51',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], + ['gettypeofimagereallayer_52',['getTypeOfImageRealLayer',['../class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead',1,'PaintingArea']]], + ['getwidthofactive_53',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html index 7180363..43f14ea 100644 --- a/docs/html/search/all_6.html +++ b/docs/html/search/all_6.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js index b6329b8..745560b 100644 --- a/docs/html/search/all_6.js +++ b/docs/html/search/all_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['height_53',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], - ['heightoffset_54',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] + ['height_54',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], + ['heightoffset_55',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] ]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html index ee6d2e4..af52f82 100644 --- a/docs/html/search/all_7.html +++ b/docs/html/search/all_7.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index 6ae7558..ba1df0a 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -1,57 +1,61 @@ var searchData= [ - ['image_55',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], - ['imagedata_56',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], - ['imagetype_57',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]], - ['intellicolorpicker_58',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'IntelliColorPicker'],['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker::IntelliColorPicker()']]], - ['intellicolorpicker_2ecpp_59',['IntelliColorPicker.cpp',['../_intelli_helper_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)'],['../_tool_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)']]], - ['intellicolorpicker_2eh_60',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], - ['intelliimage_61',['IntelliImage',['../class_intelli_image.html',1,'IntelliImage'],['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage::IntelliImage()']]], - ['intelliimage_2ecpp_62',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], - ['intelliimage_2eh_63',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], - ['intelliphotogui_64',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'IntelliPhotoGui'],['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui::IntelliPhotoGui()']]], - ['intelliphotogui_2ecpp_65',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], - ['intelliphotogui_2eh_66',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], - ['intellirasterimage_67',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'IntelliRasterImage'],['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage::IntelliRasterImage()']]], - ['intellirasterimage_2ecpp_68',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], - ['intellirasterimage_2eh_69',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], - ['intellirendersettings_70',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'IntelliRenderSettings'],['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings::IntelliRenderSettings()']]], - ['intellirendersettings_2ecpp_71',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], - ['intellirendersettings_2eh_72',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], - ['intellishapedimage_73',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'IntelliShapedImage'],['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage::IntelliShapedImage()']]], - ['intellishapedimage_2ecpp_74',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], - ['intellishapedimage_2eh_75',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], - ['intellitool_76',['IntelliTool',['../class_intelli_tool.html',1,'IntelliTool'],['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool::IntelliTool()']]], - ['intellitool_2ecpp_77',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], - ['intellitool_2eh_78',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], - ['intellitoolcircle_79',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'IntelliToolCircle'],['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle::IntelliToolCircle()']]], - ['intellitoolcircle_2ecpp_80',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], - ['intellitoolcircle_2eh_81',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], - ['intellitoolfloodfill_82',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'IntelliToolFloodFill'],['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill::IntelliToolFloodFill()']]], - ['intellitoolfloodfill_2ecpp_83',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], - ['intellitoolfloodfill_2eh_84',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], - ['intellitoolline_85',['IntelliToolLine',['../class_intelli_tool_line.html',1,'IntelliToolLine'],['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine::IntelliToolLine()']]], - ['intellitoolline_2ecpp_86',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], - ['intellitoolline_2eh_87',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], - ['intellitoolpen_88',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'IntelliToolPen'],['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen::IntelliToolPen()']]], - ['intellitoolpen_2ecpp_89',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], - ['intellitoolpen_2eh_90',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], - ['intellitoolplain_2ecpp_91',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], - ['intellitoolplain_2eh_92',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], - ['intellitoolplaintool_93',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'IntelliToolPlainTool'],['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool::IntelliToolPlainTool()']]], - ['intellitoolpolygon_94',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'IntelliToolPolygon'],['../class_intelli_tool_polygon.html#a3c39299dfffa5b8a45e72a4c0b48b32c',1,'IntelliToolPolygon::IntelliToolPolygon()']]], - ['intellitoolpolygon_2ecpp_95',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], - ['intellitoolpolygon_2eh_96',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], - ['intellitoolrectangle_97',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'IntelliToolRectangle'],['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle::IntelliToolRectangle()']]], - ['intellitoolrectangle_2ecpp_98',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], - ['intellitoolrectangle_2eh_99',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], - ['intellitoolsettings_100',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'IntelliToolsettings'],['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings::IntelliToolsettings()']]], - ['intellitoolsettings_2ecpp_101',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], - ['intellitoolsettings_2eh_102',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], - ['intellitriangulation_103',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]], - ['intellitriangulation_2ecpp_104',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], - ['intellitriangulation_2eh_105',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]], - ['isdrawing_106',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]], - ['isinpolygon_107',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], - ['isintriangle_108',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] + ['image_56',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], + ['imagedata_57',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], + ['imagetype_58',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]], + ['intellicolorpicker_59',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'IntelliColorPicker'],['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker::IntelliColorPicker()']]], + ['intellicolorpicker_2ecpp_60',['IntelliColorPicker.cpp',['../_intelli_helper_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)'],['../_tool_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)']]], + ['intellicolorpicker_2eh_61',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], + ['intelliimage_62',['IntelliImage',['../class_intelli_image.html',1,'IntelliImage'],['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage::IntelliImage()']]], + ['intelliimage_2ecpp_63',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], + ['intelliimage_2eh_64',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], + ['intelliinputdialog_65',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'IntelliInputDialog'],['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog::IntelliInputDialog()']]], + ['intelliinputdialog_2ecpp_66',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], + ['intelliinputdialog_2eh_67',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], + ['intelliphotogui_68',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'IntelliPhotoGui'],['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui::IntelliPhotoGui()']]], + ['intelliphotogui_2ecpp_69',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], + ['intelliphotogui_2eh_70',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], + ['intellirasterimage_71',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'IntelliRasterImage'],['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage::IntelliRasterImage()']]], + ['intellirasterimage_2ecpp_72',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], + ['intellirasterimage_2eh_73',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], + ['intellirendersettings_74',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'IntelliRenderSettings'],['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings::IntelliRenderSettings()']]], + ['intellirendersettings_2ecpp_75',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], + ['intellirendersettings_2eh_76',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], + ['intellishapedimage_77',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'IntelliShapedImage'],['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage::IntelliShapedImage()']]], + ['intellishapedimage_2ecpp_78',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], + ['intellishapedimage_2eh_79',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], + ['intellitool_80',['IntelliTool',['../class_intelli_tool.html',1,'IntelliTool'],['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool::IntelliTool()']]], + ['intellitool_2ecpp_81',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], + ['intellitool_2eh_82',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], + ['intellitoolcircle_83',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'IntelliToolCircle'],['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle::IntelliToolCircle()']]], + ['intellitoolcircle_2ecpp_84',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], + ['intellitoolcircle_2eh_85',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], + ['intellitoolfloodfill_86',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'IntelliToolFloodFill'],['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill::IntelliToolFloodFill()']]], + ['intellitoolfloodfill_2ecpp_87',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], + ['intellitoolfloodfill_2eh_88',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], + ['intellitoolline_89',['IntelliToolLine',['../class_intelli_tool_line.html',1,'IntelliToolLine'],['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine::IntelliToolLine()']]], + ['intellitoolline_2ecpp_90',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], + ['intellitoolline_2eh_91',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], + ['intellitoolpen_92',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'IntelliToolPen'],['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen::IntelliToolPen()']]], + ['intellitoolpen_2ecpp_93',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], + ['intellitoolpen_2eh_94',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], + ['intellitoolplain_2ecpp_95',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], + ['intellitoolplain_2eh_96',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], + ['intellitoolplaintool_97',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'IntelliToolPlainTool'],['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool::IntelliToolPlainTool()']]], + ['intellitoolpolygon_98',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'IntelliToolPolygon'],['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon::IntelliToolPolygon()']]], + ['intellitoolpolygon_2ecpp_99',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], + ['intellitoolpolygon_2eh_100',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], + ['intellitoolrectangle_101',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'IntelliToolRectangle'],['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle::IntelliToolRectangle()']]], + ['intellitoolrectangle_2ecpp_102',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], + ['intellitoolrectangle_2eh_103',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], + ['intellitoolsettings_104',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'IntelliToolsettings'],['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings::IntelliToolsettings()']]], + ['intellitoolsettings_2ecpp_105',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], + ['intellitoolsettings_2eh_106',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], + ['intellitriangulation_107',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]], + ['intellitriangulation_2ecpp_108',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], + ['intellitriangulation_2eh_109',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]], + ['isdrawing_110',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]], + ['isfastrenderering_111',['isFastRenderering',['../class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd',1,'IntelliRenderSettings']]], + ['isinpolygon_112',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], + ['isintriangle_113',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html index 7829aa4..cf2b5df 100644 --- a/docs/html/search/all_8.html +++ b/docs/html/search/all_8.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js index 83d8072..df80e86 100644 --- a/docs/html/search/all_8.js +++ b/docs/html/search/all_8.js @@ -1,7 +1,6 @@ var searchData= [ - ['layerobject_109',['LayerObject',['../struct_layer_object.html',1,'']]], - ['line_110',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]], - ['linestyle_111',['LineStyle',['../class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089',1,'IntelliToolsettings']]], - ['loadimage_112',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]] + ['layerobject_114',['LayerObject',['../struct_layer_object.html',1,'']]], + ['line_115',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]], + ['loadimage_116',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html index e4242c7..690785a 100644 --- a/docs/html/search/all_9.html +++ b/docs/html/search/all_9.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index febb253..159fcbd 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -1,10 +1,10 @@ var searchData= [ - ['main_113',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], - ['main_2ecpp_114',['main.cpp',['../main_8cpp.html',1,'']]], - ['mousemoveevent_115',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], - ['mousepressevent_116',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], - ['mousereleaseevent_117',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], - ['moveactivelayer_118',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], - ['movepositionactive_119',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] + ['main_117',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['main_2ecpp_118',['main.cpp',['../main_8cpp.html',1,'']]], + ['mousemoveevent_119',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], + ['mousepressevent_120',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], + ['mousereleaseevent_121',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], + ['moveactivelayer_122',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], + ['movepositionactive_123',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html index 47a4a78..f2f3d3a 100644 --- a/docs/html/search/all_a.html +++ b/docs/html/search/all_a.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js index 485a5f9..19151ca 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,10 +1,10 @@ var searchData= [ - ['onmouseleftpressed_120',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], - ['onmouseleftreleased_121',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], - ['onmousemoved_122',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], - ['onmouserightpressed_123',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], - ['onmouserightreleased_124',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], - ['onwheelscrolled_125',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], - ['open_126',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['onmouseleftpressed_124',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], + ['onmouseleftreleased_125',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], + ['onmousemoved_126',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], + ['onmouserightpressed_127',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], + ['onmouserightreleased_128',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], + ['onwheelscrolled_129',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], + ['open_130',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html index 1320a43..14f3403 100644 --- a/docs/html/search/all_b.html +++ b/docs/html/search/all_b.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index 61eb51e..7d7b8b7 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,12 +1,12 @@ var searchData= [ - ['paintevent_127',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_128',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], - ['paintingarea_2ecpp_129',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_130',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], - ['pen_131',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['pi_132',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], - ['plain_133',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_134',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], - ['polygondata_135',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['paintevent_131',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_132',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], + ['paintingarea_2ecpp_133',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_134',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], + ['pen_135',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['pi_136',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], + ['plain_137',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_138',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], + ['polygondata_139',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] ]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html index 32a3a1b..da60ab8 100644 --- a/docs/html/search/all_c.html +++ b/docs/html/search/all_c.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index 7439c17..ca661e9 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,7 +1,7 @@ var searchData= [ - ['rasterimage_136',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], - ['rectangle_137',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], - ['resizeevent_138',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], - ['resizeimage_139',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['rasterimage_140',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], + ['rectangle_141',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], + ['resizeevent_142',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], + ['resizeimage_143',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html index a386096..bc376fe 100644 --- a/docs/html/search/all_d.html +++ b/docs/html/search/all_d.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js index 0b41eeb..4c8b128 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,17 +1,22 @@ var searchData= [ - ['save_140',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['setfirstcolor_141',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setinneralpha_142',['setInnerAlpha',['../class_intelli_toolsettings.html#a32f165c89190e40caf96abb916e6c876',1,'IntelliToolsettings::setInnerAlpha()'],['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings::setInnerAlpha(int innerAlpha)']]], - ['setlayeractive_143',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_144',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlinewidth_145',['setLineWidth',['../class_intelli_toolsettings.html#a906d37de6ee94b433d53fe3e598cc9fa',1,'IntelliToolsettings::setLineWidth()'],['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings::setLineWidth(int LineWidth)']]], - ['setpolygon_146',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()']]], - ['setsecondcolor_147',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['shapedimage_148',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], - ['sign_149',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_150',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotdeleteactivelayer_151',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['solid_5fline_152',['SOLID_LINE',['../class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089ae45e1e6b2e6dde14829d057a4ef44199',1,'IntelliToolsettings']]], - ['swapcolors_153',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['save_144',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['setfastrendering_145',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_146',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_147',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_148',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_149',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_150',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_151',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_152',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], + ['setrendersettings_153',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_154',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_155',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['shapedimage_156',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], + ['sign_157',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_158',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_159',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_160',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_161',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_162',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html index 2931618..2e3c74d 100644 --- a/docs/html/search/all_e.html +++ b/docs/html/search/all_e.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js index 0b2d58d..b6ea8eb 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,7 +1,7 @@ var searchData= [ - ['toolsettings_154',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['tooltype_155',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], - ['triangle_156',['Triangle',['../struct_triangle.html',1,'']]], - ['typeofimage_157',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_163',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['tooltype_164',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], + ['triangle_165',['Triangle',['../struct_triangle.html',1,'']]], + ['typeofimage_166',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html index ca42a52..246f8ab 100644 --- a/docs/html/search/all_f.html +++ b/docs/html/search/all_f.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js index d267b6f..927af63 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -1,5 +1,5 @@ var searchData= [ - ['updategui_158',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_159',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['updategui_167',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_168',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html index d585e6a..f7e4c14 100644 --- a/docs/html/search/classes_0.html +++ b/docs/html/search/classes_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js index 68ca119..2af9c60 100644 --- a/docs/html/search/classes_0.js +++ b/docs/html/search/classes_0.js @@ -1,18 +1,19 @@ var searchData= [ - ['intellicolorpicker_177',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'']]], - ['intelliimage_178',['IntelliImage',['../class_intelli_image.html',1,'']]], - ['intelliphotogui_179',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'']]], - ['intellirasterimage_180',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'']]], - ['intellirendersettings_181',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'']]], - ['intellishapedimage_182',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'']]], - ['intellitool_183',['IntelliTool',['../class_intelli_tool.html',1,'']]], - ['intellitoolcircle_184',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'']]], - ['intellitoolfloodfill_185',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'']]], - ['intellitoolline_186',['IntelliToolLine',['../class_intelli_tool_line.html',1,'']]], - ['intellitoolpen_187',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'']]], - ['intellitoolplaintool_188',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'']]], - ['intellitoolpolygon_189',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'']]], - ['intellitoolrectangle_190',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'']]], - ['intellitoolsettings_191',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'']]] + ['intellicolorpicker_186',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'']]], + ['intelliimage_187',['IntelliImage',['../class_intelli_image.html',1,'']]], + ['intelliinputdialog_188',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'']]], + ['intelliphotogui_189',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'']]], + ['intellirasterimage_190',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'']]], + ['intellirendersettings_191',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'']]], + ['intellishapedimage_192',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'']]], + ['intellitool_193',['IntelliTool',['../class_intelli_tool.html',1,'']]], + ['intellitoolcircle_194',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'']]], + ['intellitoolfloodfill_195',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'']]], + ['intellitoolline_196',['IntelliToolLine',['../class_intelli_tool_line.html',1,'']]], + ['intellitoolpen_197',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'']]], + ['intellitoolplaintool_198',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'']]], + ['intellitoolpolygon_199',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'']]], + ['intellitoolrectangle_200',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'']]], + ['intellitoolsettings_201',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'']]] ]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html index baeb182..c7ff4b3 100644 --- a/docs/html/search/classes_1.html +++ b/docs/html/search/classes_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js index 93045cb..bc6e0b8 100644 --- a/docs/html/search/classes_1.js +++ b/docs/html/search/classes_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['layerobject_192',['LayerObject',['../struct_layer_object.html',1,'']]] + ['layerobject_202',['LayerObject',['../struct_layer_object.html',1,'']]] ]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html index d267279..0d1e8a0 100644 --- a/docs/html/search/classes_2.html +++ b/docs/html/search/classes_2.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js index 8820dde..4f740c2 100644 --- a/docs/html/search/classes_2.js +++ b/docs/html/search/classes_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['paintingarea_193',['PaintingArea',['../class_painting_area.html',1,'']]] + ['paintingarea_203',['PaintingArea',['../class_painting_area.html',1,'']]] ]; diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html index 8a5cbe1..2102545 100644 --- a/docs/html/search/classes_3.html +++ b/docs/html/search/classes_3.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js index c457820..9da43d3 100644 --- a/docs/html/search/classes_3.js +++ b/docs/html/search/classes_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['triangle_194',['Triangle',['../struct_triangle.html',1,'']]] + ['triangle_204',['Triangle',['../struct_triangle.html',1,'']]] ]; diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html index 8fb07b8..2deb369 100644 --- a/docs/html/search/defines_0.html +++ b/docs/html/search/defines_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js index c60f4d5..ab1a8f1 100644 --- a/docs/html/search/defines_0.js +++ b/docs/html/search/defines_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['pi_370',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]] + ['pi_388',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]] ]; diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html index ae7a884..9669700 100644 --- a/docs/html/search/enums_0.html +++ b/docs/html/search/enums_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js index 0c801d5..f56fc35 100644 --- a/docs/html/search/enums_0.js +++ b/docs/html/search/enums_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['imagetype_356',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]] + ['imagetype_377',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]] ]; diff --git a/docs/html/search/enums_1.html b/docs/html/search/enums_1.html index dfbb13a..dfec174 100644 --- a/docs/html/search/enums_1.html +++ b/docs/html/search/enums_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enums_1.js b/docs/html/search/enums_1.js index cf61346..61bfe2e 100644 --- a/docs/html/search/enums_1.js +++ b/docs/html/search/enums_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['linestyle_357',['LineStyle',['../class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089',1,'IntelliToolsettings']]] + ['tooltype_378',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_0.html b/docs/html/search/enumvalues_0.html index 1c0bbf9..9286248 100644 --- a/docs/html/search/enumvalues_0.html +++ b/docs/html/search/enumvalues_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js index 270f0e6..c10f52d 100644 --- a/docs/html/search/enumvalues_0.js +++ b/docs/html/search/enumvalues_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['circle_359',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] + ['circle_379',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_1.html b/docs/html/search/enumvalues_1.html index 070fd0b..e22a79f 100644 --- a/docs/html/search/enumvalues_1.html +++ b/docs/html/search/enumvalues_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_1.js b/docs/html/search/enumvalues_1.js index 4ea6630..57b1da8 100644 --- a/docs/html/search/enumvalues_1.js +++ b/docs/html/search/enumvalues_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['dotted_5fline_360',['DOTTED_LINE',['../class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089a7660f396543c877e45d443f99d02bd0e',1,'IntelliToolsettings']]] + ['floodfill_380',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_2.html b/docs/html/search/enumvalues_2.html index 25e9a37..01a77bf 100644 --- a/docs/html/search/enumvalues_2.html +++ b/docs/html/search/enumvalues_2.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_2.js b/docs/html/search/enumvalues_2.js index a2c72c0..06c858c 100644 --- a/docs/html/search/enumvalues_2.js +++ b/docs/html/search/enumvalues_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['floodfill_361',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] + ['line_381',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_3.html b/docs/html/search/enumvalues_3.html index 670eb93..4e761d6 100644 --- a/docs/html/search/enumvalues_3.html +++ b/docs/html/search/enumvalues_3.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_3.js b/docs/html/search/enumvalues_3.js index a0d79fa..3f68a49 100644 --- a/docs/html/search/enumvalues_3.js +++ b/docs/html/search/enumvalues_3.js @@ -1,4 +1,6 @@ var searchData= [ - ['line_362',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] + ['pen_382',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['plain_383',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_384',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_4.html b/docs/html/search/enumvalues_4.html index b96e212..e2977a0 100644 --- a/docs/html/search/enumvalues_4.html +++ b/docs/html/search/enumvalues_4.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_4.js b/docs/html/search/enumvalues_4.js index 9ab3cbf..cd86a8a 100644 --- a/docs/html/search/enumvalues_4.js +++ b/docs/html/search/enumvalues_4.js @@ -1,6 +1,5 @@ var searchData= [ - ['pen_363',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['plain_364',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_365',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] + ['rasterimage_385',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], + ['rectangle_386',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_5.html b/docs/html/search/enumvalues_5.html index ebd7746..eabdd4b 100644 --- a/docs/html/search/enumvalues_5.html +++ b/docs/html/search/enumvalues_5.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_5.js b/docs/html/search/enumvalues_5.js index bde786c..f603ae9 100644 --- a/docs/html/search/enumvalues_5.js +++ b/docs/html/search/enumvalues_5.js @@ -1,5 +1,4 @@ var searchData= [ - ['rasterimage_366',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], - ['rectangle_367',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] + ['shapedimage_387',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]] ]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html index de151d5..737608e 100644 --- a/docs/html/search/files_0.html +++ b/docs/html/search/files_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js index a76a747..3e58c14 100644 --- a/docs/html/search/files_0.js +++ b/docs/html/search/files_0.js @@ -1,35 +1,37 @@ var searchData= [ - ['intellicolorpicker_2ecpp_196',['IntelliColorPicker.cpp',['../_intelli_helper_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)'],['../_tool_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)']]], - ['intellicolorpicker_2eh_197',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], - ['intelliimage_2ecpp_198',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], - ['intelliimage_2eh_199',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], - ['intelliphotogui_2ecpp_200',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], - ['intelliphotogui_2eh_201',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], - ['intellirasterimage_2ecpp_202',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], - ['intellirasterimage_2eh_203',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], - ['intellirendersettings_2ecpp_204',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], - ['intellirendersettings_2eh_205',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], - ['intellishapedimage_2ecpp_206',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], - ['intellishapedimage_2eh_207',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], - ['intellitool_2ecpp_208',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], - ['intellitool_2eh_209',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], - ['intellitoolcircle_2ecpp_210',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], - ['intellitoolcircle_2eh_211',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], - ['intellitoolfloodfill_2ecpp_212',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], - ['intellitoolfloodfill_2eh_213',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], - ['intellitoolline_2ecpp_214',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], - ['intellitoolline_2eh_215',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], - ['intellitoolpen_2ecpp_216',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], - ['intellitoolpen_2eh_217',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], - ['intellitoolplain_2ecpp_218',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], - ['intellitoolplain_2eh_219',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], - ['intellitoolpolygon_2ecpp_220',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], - ['intellitoolpolygon_2eh_221',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], - ['intellitoolrectangle_2ecpp_222',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], - ['intellitoolrectangle_2eh_223',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], - ['intellitoolsettings_2ecpp_224',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], - ['intellitoolsettings_2eh_225',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], - ['intellitriangulation_2ecpp_226',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], - ['intellitriangulation_2eh_227',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]] + ['intellicolorpicker_2ecpp_206',['IntelliColorPicker.cpp',['../_intelli_helper_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)'],['../_tool_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)']]], + ['intellicolorpicker_2eh_207',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], + ['intelliimage_2ecpp_208',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], + ['intelliimage_2eh_209',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], + ['intelliinputdialog_2ecpp_210',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], + ['intelliinputdialog_2eh_211',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], + ['intelliphotogui_2ecpp_212',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], + ['intelliphotogui_2eh_213',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], + ['intellirasterimage_2ecpp_214',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], + ['intellirasterimage_2eh_215',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], + ['intellirendersettings_2ecpp_216',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], + ['intellirendersettings_2eh_217',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], + ['intellishapedimage_2ecpp_218',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], + ['intellishapedimage_2eh_219',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], + ['intellitool_2ecpp_220',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], + ['intellitool_2eh_221',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], + ['intellitoolcircle_2ecpp_222',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], + ['intellitoolcircle_2eh_223',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], + ['intellitoolfloodfill_2ecpp_224',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], + ['intellitoolfloodfill_2eh_225',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], + ['intellitoolline_2ecpp_226',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], + ['intellitoolline_2eh_227',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], + ['intellitoolpen_2ecpp_228',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], + ['intellitoolpen_2eh_229',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], + ['intellitoolplain_2ecpp_230',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], + ['intellitoolplain_2eh_231',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], + ['intellitoolpolygon_2ecpp_232',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], + ['intellitoolpolygon_2eh_233',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], + ['intellitoolrectangle_2ecpp_234',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], + ['intellitoolrectangle_2eh_235',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], + ['intellitoolsettings_2ecpp_236',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], + ['intellitoolsettings_2eh_237',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], + ['intellitriangulation_2ecpp_238',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], + ['intellitriangulation_2eh_239',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]] ]; diff --git a/docs/html/search/files_1.html b/docs/html/search/files_1.html index 73e2c8b..f27a62d 100644 --- a/docs/html/search/files_1.html +++ b/docs/html/search/files_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js index f1baa6c..12f1a9c 100644 --- a/docs/html/search/files_1.js +++ b/docs/html/search/files_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['main_2ecpp_228',['main.cpp',['../main_8cpp.html',1,'']]] + ['main_2ecpp_240',['main.cpp',['../main_8cpp.html',1,'']]] ]; diff --git a/docs/html/search/files_2.html b/docs/html/search/files_2.html index 24cb541..a45066e 100644 --- a/docs/html/search/files_2.html +++ b/docs/html/search/files_2.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js index bfa1f3e..5e8e35d 100644 --- a/docs/html/search/files_2.js +++ b/docs/html/search/files_2.js @@ -1,5 +1,5 @@ var searchData= [ - ['paintingarea_2ecpp_229',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_230',['PaintingArea.h',['../_painting_area_8h.html',1,'']]] + ['paintingarea_2ecpp_241',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_242',['PaintingArea.h',['../_painting_area_8h.html',1,'']]] ]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html index 8a729f7..e17c711 100644 --- a/docs/html/search/functions_0.html +++ b/docs/html/search/functions_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js index d5f7abc..441ec99 100644 --- a/docs/html/search/functions_0.js +++ b/docs/html/search/functions_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['addlayer_231',['addLayer',['../class_painting_area.html#a6e9207612cef104d39013564696fe989',1,'PaintingArea']]], - ['addlayerat_232',['addLayerAt',['../class_painting_area.html#ab4a0b3a497ea8821a045ad12c34bd980',1,'PaintingArea']]] + ['addlayer_243',['addLayer',['../class_painting_area.html#a6e9207612cef104d39013564696fe989',1,'PaintingArea']]], + ['addlayerat_244',['addLayerAt',['../class_painting_area.html#ab4a0b3a497ea8821a045ad12c34bd980',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html index d4929aa..0ddac0a 100644 --- a/docs/html/search/functions_1.html +++ b/docs/html/search/functions_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js index 92cfc2b..fe6b394 100644 --- a/docs/html/search/functions_1.js +++ b/docs/html/search/functions_1.js @@ -1,16 +1,16 @@ var searchData= [ - ['calculatetriangles_233',['calculateTriangles',['../namespace_intelli_triangulation.html#acdaf1ed598e868b25e9e06d580da32e5',1,'IntelliTriangulation']]], - ['calculatevisiblity_234',['calculateVisiblity',['../class_intelli_image.html#aebbced93f4744fad81b7f141b21f4ab2',1,'IntelliImage::calculateVisiblity()'],['../class_intelli_raster_image.html#a87cf2d360c129d64a5db0db85818eb60',1,'IntelliRasterImage::calculateVisiblity()']]], - ['closeevent_235',['closeEvent',['../class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13',1,'IntelliPhotoGui']]], - ['colorpickersetfirstcolor_236',['colorPickerSetFirstColor',['../class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df',1,'PaintingArea']]], - ['colorpickersetsecondcolor_237',['colorPickerSetSecondColor',['../class_painting_area.html#ae261acaaa346610dfed489dbac17e789',1,'PaintingArea']]], - ['colorpickerswapcolors_238',['colorPickerSwapColors',['../class_painting_area.html#acff4563d006fda491469bd41778d07eb',1,'PaintingArea']]], - ['createcircletool_239',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], - ['createfloodfilltool_240',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], - ['createlinetool_241',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], - ['createpentool_242',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], - ['createplaintool_243',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], - ['createpolygontool_244',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], - ['createrectangletool_245',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] + ['calculatetriangles_245',['calculateTriangles',['../namespace_intelli_triangulation.html#acdaf1ed598e868b25e9e06d580da32e5',1,'IntelliTriangulation']]], + ['calculatevisiblity_246',['calculateVisiblity',['../class_intelli_image.html#aebbced93f4744fad81b7f141b21f4ab2',1,'IntelliImage::calculateVisiblity()'],['../class_intelli_raster_image.html#a87cf2d360c129d64a5db0db85818eb60',1,'IntelliRasterImage::calculateVisiblity()']]], + ['closeevent_247',['closeEvent',['../class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13',1,'IntelliPhotoGui']]], + ['colorpickersetfirstcolor_248',['colorPickerSetFirstColor',['../class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df',1,'PaintingArea']]], + ['colorpickersetsecondcolor_249',['colorPickerSetSecondColor',['../class_painting_area.html#ae261acaaa346610dfed489dbac17e789',1,'PaintingArea']]], + ['colorpickerswapcolors_250',['colorPickerSwapColors',['../class_painting_area.html#acff4563d006fda491469bd41778d07eb',1,'PaintingArea']]], + ['createcircletool_251',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], + ['createfloodfilltool_252',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], + ['createlinetool_253',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], + ['createpentool_254',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], + ['createplaintool_255',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], + ['createpolygontool_256',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], + ['createrectangletool_257',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html index 07e3fda..2737c5a 100644 --- a/docs/html/search/functions_2.html +++ b/docs/html/search/functions_2.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js index f7150c8..a30b8ed 100644 --- a/docs/html/search/functions_2.js +++ b/docs/html/search/functions_2.js @@ -1,8 +1,8 @@ var searchData= [ - ['deletelayer_246',['deleteLayer',['../class_painting_area.html#a2382ebf8c31dee36cb714f34a18b71e4',1,'PaintingArea']]], - ['drawline_247',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], - ['drawpixel_248',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], - ['drawplain_249',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], - ['drawpoint_250',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] + ['deletelayer_258',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], + ['drawline_259',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], + ['drawpixel_260',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], + ['drawplain_261',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], + ['drawpoint_262',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html index 40bd389..6da86e7 100644 --- a/docs/html/search/functions_3.html +++ b/docs/html/search/functions_3.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js index 929fef5..1d3e8b7 100644 --- a/docs/html/search/functions_3.js +++ b/docs/html/search/functions_3.js @@ -1,4 +1,25 @@ var searchData= [ - ['floodfill_251',['floodFill',['../class_painting_area.html#aeb5eb394b979ea90f2be9849fdda1774',1,'PaintingArea']]] + ['getdeepcopy_263',['getDeepCopy',['../class_intelli_image.html#af6381067bdf565669f856bb589008ae9',1,'IntelliImage::getDeepCopy()'],['../class_intelli_raster_image.html#a8f901301b106504de3c27308ade897dc',1,'IntelliRasterImage::getDeepCopy()'],['../class_intelli_shaped_image.html#aed0b31e0fa771104399d1f5ff39a0337',1,'IntelliShapedImage::getDeepCopy()']]], + ['getdisplayable_264',['getDisplayable',['../class_intelli_image.html#a21c7e65b59a26db45aac3880133ef21d',1,'IntelliImage::getDisplayable(const QSize &displaySize, int alpha)=0'],['../class_intelli_image.html#a9d4daf3c48c64695105689f61c21bae0',1,'IntelliImage::getDisplayable(int alpha=255)=0'],['../class_intelli_raster_image.html#ae43393397b0141a8033fe34d3a1b1884',1,'IntelliRasterImage::getDisplayable(const QSize &displaySize, int alpha) override'],['../class_intelli_raster_image.html#a612d79124f0e2c158a4f0abbe4b5f97f',1,'IntelliRasterImage::getDisplayable(int alpha=255) override'],['../class_intelli_shaped_image.html#a68cf374247c16f07fd84d50e4cd05630',1,'IntelliShapedImage::getDisplayable(const QSize &displaySize, int alpha=255) override'],['../class_intelli_shaped_image.html#ac6a99e1a96134073bceea252b37636cc',1,'IntelliShapedImage::getDisplayable(int alpha=255) override']]], + ['getfirstcolor_265',['getFirstColor',['../class_intelli_color_picker.html#aae2eb27b928fe9388b9398b0556303b7',1,'IntelliColorPicker']]], + ['getheightofactive_266',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], + ['getimagedata_267',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], + ['getimagedataofactivelayer_268',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], + ['getimageofactivelayer_269',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], + ['getinneralpha_270',['getInnerAlpha',['../class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c',1,'IntelliToolsettings']]], + ['getint_271',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], + ['getisdrawing_272',['getIsDrawing',['../class_intelli_tool.html#a0020fad2e26315d5c4d96dbc95d1dceb',1,'IntelliTool']]], + ['getlinewidth_273',['getLineWidth',['../class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a',1,'IntelliToolsettings']]], + ['getmaxheight_274',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], + ['getmaxwidth_275',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], + ['getnumberofactivelayer_276',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], + ['getpixelcolor_277',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], + ['getpolygondata_278',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], + ['getpolygondataofreallayer_279',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], + ['getsecondcolor_280',['getSecondColor',['../class_intelli_color_picker.html#a55568fbf5dc783f06284b7031ffe9415',1,'IntelliColorPicker']]], + ['gettooltype_281',['getTooltype',['../class_intelli_tool.html#aae2a11c5bae4973ed827c60e0c1352b1',1,'IntelliTool']]], + ['gettypeofimage_282',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], + ['gettypeofimagereallayer_283',['getTypeOfImageRealLayer',['../class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead',1,'PaintingArea']]], + ['getwidthofactive_284',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html index 8a4df4c..911304e 100644 --- a/docs/html/search/functions_4.html +++ b/docs/html/search/functions_4.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js index fd1682b..03a6d77 100644 --- a/docs/html/search/functions_4.js +++ b/docs/html/search/functions_4.js @@ -1,23 +1,22 @@ var searchData= [ - ['getdeepcopy_252',['getDeepCopy',['../class_intelli_image.html#af6381067bdf565669f856bb589008ae9',1,'IntelliImage::getDeepCopy()'],['../class_intelli_raster_image.html#a8f901301b106504de3c27308ade897dc',1,'IntelliRasterImage::getDeepCopy()'],['../class_intelli_shaped_image.html#aed0b31e0fa771104399d1f5ff39a0337',1,'IntelliShapedImage::getDeepCopy()']]], - ['getdisplayable_253',['getDisplayable',['../class_intelli_image.html#a21c7e65b59a26db45aac3880133ef21d',1,'IntelliImage::getDisplayable(const QSize &displaySize, int alpha)=0'],['../class_intelli_image.html#a9d4daf3c48c64695105689f61c21bae0',1,'IntelliImage::getDisplayable(int alpha=255)=0'],['../class_intelli_raster_image.html#ae43393397b0141a8033fe34d3a1b1884',1,'IntelliRasterImage::getDisplayable(const QSize &displaySize, int alpha) override'],['../class_intelli_raster_image.html#a612d79124f0e2c158a4f0abbe4b5f97f',1,'IntelliRasterImage::getDisplayable(int alpha=255) override'],['../class_intelli_shaped_image.html#a68cf374247c16f07fd84d50e4cd05630',1,'IntelliShapedImage::getDisplayable(const QSize &displaySize, int alpha=255) override'],['../class_intelli_shaped_image.html#ac6a99e1a96134073bceea252b37636cc',1,'IntelliShapedImage::getDisplayable(int alpha=255) override']]], - ['getfastrenderer_254',['getFastRenderer',['../class_intelli_render_settings.html#a5a74e7d7ed3a2e944883dddbe8bbf5e8',1,'IntelliRenderSettings']]], - ['getfirstcolor_255',['getFirstColor',['../class_intelli_color_picker.html#aae2eb27b928fe9388b9398b0556303b7',1,'IntelliColorPicker']]], - ['getheightofactive_256',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], - ['getimagedata_257',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], - ['getimageofactivelayer_258',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], - ['getinneralpha_259',['getInnerAlpha',['../class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c',1,'IntelliToolsettings']]], - ['getisdrawing_260',['getIsDrawing',['../class_intelli_tool.html#a0020fad2e26315d5c4d96dbc95d1dceb',1,'IntelliTool']]], - ['getlinestyle_261',['getLinestyle',['../class_intelli_toolsettings.html#a5beb193b25e0665516244c61c5e65aa6',1,'IntelliToolsettings']]], - ['getlinewidth_262',['getLineWidth',['../class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a',1,'IntelliToolsettings']]], - ['getnumberofactivelayer_263',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], - ['getpixelcolor_264',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], - ['getpolygondata_265',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], - ['getpolygondataofreallayer_266',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], - ['getsecondcolor_267',['getSecondColor',['../class_intelli_color_picker.html#a55568fbf5dc783f06284b7031ffe9415',1,'IntelliColorPicker']]], - ['gettooltype_268',['getTooltype',['../class_intelli_tool.html#aae2a11c5bae4973ed827c60e0c1352b1',1,'IntelliTool']]], - ['gettypeofimage_269',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], - ['gettypeofimagereallayer_270',['getTypeOfImageRealLayer',['../class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead',1,'PaintingArea']]], - ['getwidthofactive_271',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] + ['intellicolorpicker_285',['IntelliColorPicker',['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker']]], + ['intelliimage_286',['IntelliImage',['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage']]], + ['intelliinputdialog_287',['IntelliInputDialog',['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog']]], + ['intelliphotogui_288',['IntelliPhotoGui',['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui']]], + ['intellirasterimage_289',['IntelliRasterImage',['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage']]], + ['intellirendersettings_290',['IntelliRenderSettings',['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings']]], + ['intellishapedimage_291',['IntelliShapedImage',['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage']]], + ['intellitool_292',['IntelliTool',['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool']]], + ['intellitoolcircle_293',['IntelliToolCircle',['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle']]], + ['intellitoolfloodfill_294',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill']]], + ['intellitoolline_295',['IntelliToolLine',['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine']]], + ['intellitoolpen_296',['IntelliToolPen',['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen']]], + ['intellitoolplaintool_297',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool']]], + ['intellitoolpolygon_298',['IntelliToolPolygon',['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon']]], + ['intellitoolrectangle_299',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], + ['intellitoolsettings_300',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], + ['isfastrenderering_301',['isFastRenderering',['../class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd',1,'IntelliRenderSettings']]], + ['isinpolygon_302',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], + ['isintriangle_303',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html index 2b983b2..61b920d 100644 --- a/docs/html/search/functions_5.html +++ b/docs/html/search/functions_5.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js index b089b28..9a58991 100644 --- a/docs/html/search/functions_5.js +++ b/docs/html/search/functions_5.js @@ -1,20 +1,4 @@ var searchData= [ - ['intellicolorpicker_272',['IntelliColorPicker',['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker']]], - ['intelliimage_273',['IntelliImage',['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage']]], - ['intelliphotogui_274',['IntelliPhotoGui',['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui']]], - ['intellirasterimage_275',['IntelliRasterImage',['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage']]], - ['intellirendersettings_276',['IntelliRenderSettings',['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings']]], - ['intellishapedimage_277',['IntelliShapedImage',['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage']]], - ['intellitool_278',['IntelliTool',['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool']]], - ['intellitoolcircle_279',['IntelliToolCircle',['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle']]], - ['intellitoolfloodfill_280',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill']]], - ['intellitoolline_281',['IntelliToolLine',['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine']]], - ['intellitoolpen_282',['IntelliToolPen',['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen']]], - ['intellitoolplaintool_283',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool']]], - ['intellitoolpolygon_284',['IntelliToolPolygon',['../class_intelli_tool_polygon.html#a3c39299dfffa5b8a45e72a4c0b48b32c',1,'IntelliToolPolygon']]], - ['intellitoolrectangle_285',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], - ['intellitoolsettings_286',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], - ['isinpolygon_287',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], - ['isintriangle_288',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] + ['loadimage_304',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html index f7d283d..dc70a4a 100644 --- a/docs/html/search/functions_6.html +++ b/docs/html/search/functions_6.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js index ec835e1..d9b6206 100644 --- a/docs/html/search/functions_6.js +++ b/docs/html/search/functions_6.js @@ -1,4 +1,9 @@ var searchData= [ - ['loadimage_289',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]] + ['main_305',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['mousemoveevent_306',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], + ['mousepressevent_307',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], + ['mousereleaseevent_308',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], + ['moveactivelayer_309',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], + ['movepositionactive_310',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html index a74fe44..7de3106 100644 --- a/docs/html/search/functions_7.html +++ b/docs/html/search/functions_7.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js index c10c247..d522fff 100644 --- a/docs/html/search/functions_7.js +++ b/docs/html/search/functions_7.js @@ -1,9 +1,10 @@ var searchData= [ - ['main_290',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], - ['mousemoveevent_291',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], - ['mousepressevent_292',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], - ['mousereleaseevent_293',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], - ['moveactivelayer_294',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], - ['movepositionactive_295',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] + ['onmouseleftpressed_311',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], + ['onmouseleftreleased_312',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], + ['onmousemoved_313',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], + ['onmouserightpressed_314',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], + ['onmouserightreleased_315',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], + ['onwheelscrolled_316',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], + ['open_317',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html index 75fc0be..7422be2 100644 --- a/docs/html/search/functions_8.html +++ b/docs/html/search/functions_8.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js index ef43e79..1069c92 100644 --- a/docs/html/search/functions_8.js +++ b/docs/html/search/functions_8.js @@ -1,10 +1,5 @@ var searchData= [ - ['onmouseleftpressed_296',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], - ['onmouseleftreleased_297',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], - ['onmousemoved_298',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], - ['onmouserightpressed_299',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], - ['onmouserightreleased_300',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], - ['onwheelscrolled_301',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], - ['open_302',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['paintevent_318',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_319',['PaintingArea',['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html index 7541c9e..befd4fa 100644 --- a/docs/html/search/functions_9.html +++ b/docs/html/search/functions_9.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js index 9eda906..f427352 100644 --- a/docs/html/search/functions_9.js +++ b/docs/html/search/functions_9.js @@ -1,5 +1,5 @@ var searchData= [ - ['paintevent_303',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_304',['PaintingArea',['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea']]] + ['resizeevent_320',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], + ['resizeimage_321',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html index 5a5be63..a81e963 100644 --- a/docs/html/search/functions_a.html +++ b/docs/html/search/functions_a.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js index fbad351..c878f47 100644 --- a/docs/html/search/functions_a.js +++ b/docs/html/search/functions_a.js @@ -1,5 +1,21 @@ var searchData= [ - ['resizeevent_305',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], - ['resizeimage_306',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['save_322',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['setfastrendering_323',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_324',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_325',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_326',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_327',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_328',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_329',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_330',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], + ['setrendersettings_331',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_332',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_333',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['sign_334',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_335',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_336',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_337',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_338',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_339',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html index fc2d5aa..345265d 100644 --- a/docs/html/search/functions_b.html +++ b/docs/html/search/functions_b.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js index 3fd13f3..c3b5fa4 100644 --- a/docs/html/search/functions_b.js +++ b/docs/html/search/functions_b.js @@ -1,15 +1,5 @@ var searchData= [ - ['save_307',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['setfirstcolor_308',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setinneralpha_309',['setInnerAlpha',['../class_intelli_toolsettings.html#a32f165c89190e40caf96abb916e6c876',1,'IntelliToolsettings::setInnerAlpha()'],['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings::setInnerAlpha(int innerAlpha)']]], - ['setlayeractive_310',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_311',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlinewidth_312',['setLineWidth',['../class_intelli_toolsettings.html#a906d37de6ee94b433d53fe3e598cc9fa',1,'IntelliToolsettings::setLineWidth()'],['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings::setLineWidth(int LineWidth)']]], - ['setpolygon_313',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()']]], - ['setsecondcolor_314',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['sign_315',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_316',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotdeleteactivelayer_317',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['swapcolors_318',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['updategui_340',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_341',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_c.html b/docs/html/search/functions_c.html index a1a1437..858bfd6 100644 --- a/docs/html/search/functions_c.html +++ b/docs/html/search/functions_c.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js index 5e10ca3..959d316 100644 --- a/docs/html/search/functions_c.js +++ b/docs/html/search/functions_c.js @@ -1,5 +1,4 @@ var searchData= [ - ['updategui_319',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_320',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['wheelevent_342',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_d.html b/docs/html/search/functions_d.html index 4375535..2f09f51 100644 --- a/docs/html/search/functions_d.html +++ b/docs/html/search/functions_d.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js index 6592719..673dd9a 100644 --- a/docs/html/search/functions_d.js +++ b/docs/html/search/functions_d.js @@ -1,4 +1,17 @@ var searchData= [ - ['wheelevent_321',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] + ['_7eintellicolorpicker_343',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_344',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_345',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_346',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_347',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_348',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_349',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolline_350',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_351',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_352',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_353',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_354',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_355',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_356',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]] ]; diff --git a/docs/html/search/namespaces_0.html b/docs/html/search/namespaces_0.html index 93c99f9..76996d1 100644 --- a/docs/html/search/namespaces_0.html +++ b/docs/html/search/namespaces_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js index 5990e7a..04939a0 100644 --- a/docs/html/search/namespaces_0.js +++ b/docs/html/search/namespaces_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['intellitriangulation_195',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]] + ['intellitriangulation_205',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]] ]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css index 4114870..83c346f 100644 --- a/docs/html/search/search.css +++ b/docs/html/search/search.css @@ -99,8 +99,8 @@ display: none; position: absolute; left: 0; top: 0; - border: 1px solid #AFAFAF; - background-color: #FAFAFB; + border: 1px solid #7C8081; + background-color: #F7F7F7; z-index: 10001; padding-top: 4px; padding-bottom: 4px; @@ -144,7 +144,7 @@ a.SelectItem:active { a.SelectItem:hover { color: #FFFFFF; - background-color: #646465; + background-color: #2B2D2D; outline-style: none; text-decoration: none; cursor: pointer; @@ -163,7 +163,7 @@ iframe#MSearchResults { position: absolute; left: 0; top: 0; border: 1px solid #000; - background-color: #F2F2F2; + background-color: #E8E9E9; z-index:10000; } @@ -199,7 +199,7 @@ body.SRPage { .SRSymbol { font-weight: bold; - color: #6C6C6D; + color: #323434; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; @@ -207,7 +207,7 @@ body.SRPage { a.SRScope { display: block; - color: #6C6C6D; + color: #323434; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; @@ -240,7 +240,7 @@ DIV.searchresults { /*---------------- External search page results */ .searchresult { - background-color: #F4F4F4; + background-color: #EBECEC; } .pages b { diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js index 84ee609..68e88af 100644 --- a/docs/html/search/searchdata.js +++ b/docs/html/search/searchdata.js @@ -4,10 +4,10 @@ var indexSectionsWithContent = 1: "ilpt", 2: "i", 3: "imp", - 4: "acdfgilmoprsuw~", + 4: "acdgilmoprsuw~", 5: "abcfhiptw", - 6: "ilt", - 7: "cdflprs", + 6: "it", + 7: "cflprs", 8: "p" }; diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html index a2a3ae6..bf3eba5 100644 --- a/docs/html/search/variables_0.html +++ b/docs/html/search/variables_0.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js index fcc329d..60bc340 100644 --- a/docs/html/search/variables_0.js +++ b/docs/html/search/variables_0.js @@ -1,8 +1,8 @@ var searchData= [ - ['a_336',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], - ['activelayer_337',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], - ['activetype_338',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], - ['alpha_339',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], - ['area_340',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] + ['a_357',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], + ['activelayer_358',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], + ['activetype_359',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], + ['alpha_360',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], + ['area_361',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] ]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html index b243c42..49fe59a 100644 --- a/docs/html/search/variables_1.html +++ b/docs/html/search/variables_1.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js index 3f7bbf9..db4af2b 100644 --- a/docs/html/search/variables_1.js +++ b/docs/html/search/variables_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['b_341',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] + ['b_362',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] ]; diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html index 647df20..0c8a18c 100644 --- a/docs/html/search/variables_2.html +++ b/docs/html/search/variables_2.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js index 520775b..acab1a0 100644 --- a/docs/html/search/variables_2.js +++ b/docs/html/search/variables_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['c_342',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], - ['canvas_343',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], - ['colorpicker_344',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] + ['c_363',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], + ['canvas_364',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], + ['colorpicker_365',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] ]; diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html index 9dc9b89..19a31fc 100644 --- a/docs/html/search/variables_3.html +++ b/docs/html/search/variables_3.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js index df82d3c..e29f1aa 100644 --- a/docs/html/search/variables_3.js +++ b/docs/html/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['fastrenderer_345',['fastRenderer',['../class_intelli_image.html#adade0f6990152f09d953067a51511b9c',1,'IntelliImage']]] + ['fastrenderering_366',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]] ]; diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html index 78cc2c7..bdc37be 100644 --- a/docs/html/search/variables_4.html +++ b/docs/html/search/variables_4.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js index 410896f..1e3f048 100644 --- a/docs/html/search/variables_4.js +++ b/docs/html/search/variables_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['height_346',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], - ['heightoffset_347',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] + ['height_367',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], + ['heightoffset_368',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] ]; diff --git a/docs/html/search/variables_5.html b/docs/html/search/variables_5.html index dfa3558..6aa2249 100644 --- a/docs/html/search/variables_5.html +++ b/docs/html/search/variables_5.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js index cb2bd53..eb4f386 100644 --- a/docs/html/search/variables_5.js +++ b/docs/html/search/variables_5.js @@ -1,6 +1,6 @@ var searchData= [ - ['image_348',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], - ['imagedata_349',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], - ['isdrawing_350',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] + ['image_369',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], + ['imagedata_370',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], + ['isdrawing_371',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] ]; diff --git a/docs/html/search/variables_6.html b/docs/html/search/variables_6.html index cd462bd..ce4a906 100644 --- a/docs/html/search/variables_6.html +++ b/docs/html/search/variables_6.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js index 7461d99..6a1cab9 100644 --- a/docs/html/search/variables_6.js +++ b/docs/html/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['polygondata_351',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['polygondata_372',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] ]; diff --git a/docs/html/search/variables_7.html b/docs/html/search/variables_7.html index 47994b8..39ffd47 100644 --- a/docs/html/search/variables_7.html +++ b/docs/html/search/variables_7.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js index 9f90859..7275765 100644 --- a/docs/html/search/variables_7.js +++ b/docs/html/search/variables_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['toolsettings_352',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['typeofimage_353',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_373',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['typeofimage_374',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/variables_8.html b/docs/html/search/variables_8.html index a50ee8f..37a2edd 100644 --- a/docs/html/search/variables_8.html +++ b/docs/html/search/variables_8.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/variables_8.js b/docs/html/search/variables_8.js index ed40785..f119ac1 100644 --- a/docs/html/search/variables_8.js +++ b/docs/html/search/variables_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['width_354',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_355',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['width_375',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_376',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png index 343046b612b0bef5191e66080ff3bff2338a121e..c7c06a352845790fb9153b1a8fed8c74112fbe11 100644 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@Vh2R)esC0rkV zPGX#;*JRpps=-OK;*1f*@=h2o`eSQ9J3_n#kJ4i)K7&E_ryZ8S2_3!digO)u{pT7C!kA(W2 zJ9N)x)fU%&{qd#7VrI>jw;%S`t$e+!EGQKba P1_FbptDnm{r-UW|>tu5C literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@Vh3v=57WL!Tw zYfCnYCNSG5Pk3-a=ZFUXdA1Eq$_q4ov(~NreaG|M?nl#~|KqNi9(1iVc3SGZ=b5vP z75-s5q3-FRLMp1A(D%6F`@Z+~t5&Ugy=zs@kf3$>Phsonp+`m)LO(%OI5^=;38 qepfl~ectV77gZD{k%9g#loz>Y`|5vS(>$PO89ZJ6T-G@yGywqTerZbp diff --git a/docs/html/struct_layer_object-members.html b/docs/html/struct_layer_object-members.html index 702a111..d535100 100644 --- a/docs/html/struct_layer_object-members.html +++ b/docs/html/struct_layer_object-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -106,7 +102,7 @@ $(document).ready(function(){initNavTree('struct_layer_object.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/struct_layer_object.html b/docs/html/struct_layer_object.html index d424a5a..daba37d 100644 --- a/docs/html/struct_layer_object.html +++ b/docs/html/struct_layer_object.html @@ -3,7 +3,7 @@ - + IntelliPhoto: LayerObject Struct Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -111,7 +107,7 @@ Public Attributes   int heightOffset   -int alpha =255 +int alpha = 255  

    Detailed Description

    @@ -136,7 +132,7 @@ Public Attributes
    - +
    int LayerObject::alpha =255int LayerObject::alpha = 255
    @@ -226,7 +222,7 @@ Public Attributes

    The documentation for this struct was generated from the following file: @@ -236,7 +232,7 @@ Public Attributes + doxygen 1.8.17 diff --git a/docs/html/struct_triangle-members.html b/docs/html/struct_triangle-members.html index 883f66a..1e36bc1 100644 --- a/docs/html/struct_triangle-members.html +++ b/docs/html/struct_triangle-members.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Member List @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -103,7 +99,7 @@ $(document).ready(function(){initNavTree('struct_triangle.html','');});
      + doxygen 1.8.17
    diff --git a/docs/html/struct_triangle.html b/docs/html/struct_triangle.html index 038a78d..b07f1d8 100644 --- a/docs/html/struct_triangle.html +++ b/docs/html/struct_triangle.html @@ -3,7 +3,7 @@ - + IntelliPhoto: Triangle Struct Reference @@ -13,10 +13,6 @@ - @@ -38,7 +34,7 @@ - +
    @@ -162,7 +158,7 @@ Public Attributes

    The documentation for this struct was generated from the following file: @@ -172,7 +168,7 @@ Public Attributes + doxygen 1.8.17 diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png index 05a52f3d75b2dce7379a1af05a26e2ebbf866b54..b6537e9b0799abaabd5d9a76278a822e749d56b1 100644 GIT binary patch delta 836 zcmV-K1H1go2HOUZB!41FL_t(|0qxygXj5kx!0~@t+oWyihqJ@sn#``T1e!8LTfOBqygQ(vIF9-XENg@IL2x^PK0sb+op(1Ef`=PPJAm$0p=l3>=KP)pEz%Rm;soFrZc>N z$<4s=X8yA@sm6b+xee)uKMW8SHgBUk5=n)nEmdU#*S+OGVi(qv%p{6EUnp)^16KLU68Bpg8+m6#O7bkp$ROO&!Jgfp z-8WWS12|&6p;#*wAicv!j=Y%MlnH=UVPV0vxmEn9shk)X;Ezq4*wNMoB*#DZ?lC?- zF7=lDCVw@P+mT4Dgx_4b5=f38hljaz`SNS=%PDPkm*ixN@q>zr0DE_TN@0F}?0V?T z8Ah&N1(?I*@p80Z%N?FfPjmXa@40?m8*JjZr5TKx14JUfbEyC8Sdg;PQnKx9Ja#yp zFP>?Z-wY0N_s$(4WsGVD<#O_y$TdI7apkZpynmCiKmX#&Pgelu@cC8|YHVO|=oAwZ z4*;yHjQv2HT%tiG8kMYjp4%OroSd|6fG($t+1V&hqfr2>5#6ke0A6uZ3jkmd=;yCB z{HswKe~V6lMRHIlx9(^cgqD}~bAbQrq&WJrJ$a`%E(!n^KtHZN^W^3Y$9&v~Z$3-4 z-96fDs{mG7X8L0KO##Vamx1{Rh>t{_c9ZxtN2m81x%4GLBIG}d~2Y*aqv)Kst1=j-y0{~gM-ENK@8^GZx0I(WSy-*1TM5*ykQBe^mPM#p( z_uEseDS)h!$t3ml^+Y1Wl$M#ANS9HSpxb!GQ{`b~WSF|zT7YeFxhffsM5z0;4lu=l zO3;%27YO({H8ey?Ny)|&UZ0n)u1-L8 zJxVYbln-Yf&;3Pf`J|Bl;*Sa1+FEIEZwE55yu3^zkzN z2Qm?h#ebNZdg{^t{%e!n^f#%T-57JPR~xSM{EtSX%+0+5*u?E|^TnAnT76Y!+syMB zVt>YrkGxhrm^LPupPwflj}r>@QBhGretyoy zV7%k}$Vq=F#QXP4%+AgNY*JHGO-pMl4<9^aWq)M_z^Y9pP!+YwZER4+Ss~LeCEpCNt)xCF3AuBpbYC)zJ+r_lFv zfZZAs*K?g{H^nz14zNRNaeXT;8!zS^KOP25F{dA!W%{9EeF*@o`{II7YYNCjt`kG8 ymMwGQu=rB+i%R_J~_r!?X$N9mVJ2UsZd*8YDZapVkTLIh@h<_^auGlBu5*4``6OT)RJkcXslJ@{^o{3+@w_*xN2|s{MwYVq>0oEZ?oDvPjhDJwIw>yzgKYyy4Q-^7eDf?g2A9Z#TNDlxwX%fYnpvGxxg25o4 zb#-~`s;gL9S^`M1urSY&!-x5@`wQ~&Tr0Un6C46kA}mjLwzrpq2Mz$NX>TOLxie=d zE-nVJtI-7etu5u{71DVR1^M}_ZPAJfVvUU)Z#tgP6n~5HUS0j__iyIr($n2dWu?Ab zz>IBLlG}}!rhh(KUk8xlozl_-05^WGm(I2}_7p`J8Xo>I$;rw}e7-a|$k>e=fEl4snEpO3b$GtG$d5zA zOibwJ3Yame?_k`X;Qsx4eAV|&B1utUA?Xga9tgZ@)6rcR7+~u0V*tBx9f3~IZLt+d zi7gphIMvy~gNKi}dhIG;MkKO_Si>;}F8#pl?0>%iPRfn*KsUM74a$1?yxw?bFzBC~ zn*+?q2xPFl9OwUd9Kgw#9#%$zu(+#50I&&k>FWZ%Wo&kTi7tRma#lOHpJ=~`9m)M1 zV57bl{cD}c9pXEY4e%Otah5D@o>t;!veU$T1K7O;ijAvZ^?HlU00000NkvXXu0mjfBnyr5 delta 807 zcmV+?1K9k?2EGQ6B!2}-L_t(|0qx!2OOtIF!13=k-P9B`r%X%pZIf^nYV!xClUL@n zW?57F0R}~Hhd~e>L_sG(5Orh+9Ys(?{R178{eYbB!7F6GJBdIdLQsfcY6s@bu6sPs zw&!t^GEX0_58mF-_FTK~=eqCv)G{)12Oyg&5ftrWpKuAAn12&fA|hUi4*;3u0Ax@m zu83i+4H!c8?a}Uk6OY9W@ewdYrUX6WuGk6i3$}=J;;6VN9;V;40_kx|JpGM_r(aI- zKwQd}pj+HuXW9UM#Vv8hoIqv2w+Ro|FI72p=?SiiYJg1g^YZ}=a&y=HErsH`u&4yv z#c2RDi^cLI(0?7kyW0z3;BvV*aG)2vJr^L8K{X1MpjVUthA1c~;LzbiR&QM$@#Q#x z!P3$awY9Z`!vmCTUGsJQ8deGXfFUX>D;OLcpk~JofOVCZmoX3yQ}b61fLX6f(3IZe z_11Buzn|jb;$)xO2@18kCO>fz=S?UC9gwEY}lqejHdY$w`n@sEfB z{3f-yE{hB4owkDqLx3SBwPSOuc4(M?1c2EyaaO1`1*9U|si9WPNwHTP7d@g(J4jSQ lRUlGd#2f9QiTMUF`w5I!qy?zgr>Xz|002ovPDHLkV1kL_gogkC diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png index 160ff54ac7b46e5b3f29e5d8da5524be10cd0f65..b9143f7b4b056afae1d0eb59a0db53984d27dfad 100644 GIT binary patch delta 100 zcmV-q0Gt1Rf&q{uUP(zrK~#7F?VV8$fG`L{+mcK&{@wj=YSEdPcnDrzDI5ZGmc}tu zRmx07gh&cT9soDJboXS%xmH^QeWA!d``7+v_|`n#>zyxrH33SJILTcA0000ywMkKiV03IUXNqQ0tj z9j;WIE^D)Yy5nFthMs3l(MnBHm01J*Of6PF42gcr!0!_Ap++dZ_|Wf w08Bkr`k1T(r2bVsx_j^S0N&@B=gai~?uHkmEtiOT00000Ne4wvM6N<$f+zw)1poj5 delta 131 zcmV-}0DS+d0iXepBz$K{L_t(|0qxz(4a6V}1W?-(q@+jogv4I>gpa5b%T*D}Vok5T00000Ne4wvM6N<$g7}U@y8r+H delta 126 zcmV-^0D=Fi0hD5ON?<5nFK!(CL(-8U^0fyL{ArbH|xER gfo*Q=#{uvC4Teh=up=+<1poj507*qoM6N<$g2|^cJ^%m! diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png index 3940744c3148e7c384ceb0e8e55f75c60c876cff..e248641ed580799ef1b24ff146a58360e17e7b1e 100644 GIT binary patch delta 147 zcmV;E0BrxK0j~j&B!6~EL_t(|0qxz14T3NLK+(p(4VN4hISQ4#78;n)giR&JLEawX zbDp^4!0kJmbF6=M-7wa&m^YJIn2lkW=F3PojOeaI_dTtCQMV1XYN(W=tSg>nMP3xh zM^1K0rTj^ Date: Thu, 16 Jan 2020 12:10:03 +0100 Subject: [PATCH 67/97] Renamed Preparation Script --- releaseprep.sh => prep.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename releaseprep.sh => prep.sh (100%) diff --git a/releaseprep.sh b/prep.sh similarity index 100% rename from releaseprep.sh rename to prep.sh From 226ab269574764e6a718921f3f07f83fe89b2c12 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:26:56 +0100 Subject: [PATCH 68/97] Added Unit Testing Files to gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 76774be..22c1e68 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,10 @@ phony.c # Testing Files *.o *.qmake.stash +src/Makefile +src/moc_* +src/target_wrapper.sh +src/tst_unittest.moc # Ignore User Files except for the pro file IntelliPhoto.* From c3ff1dbc0af72350acc364d3c6e3e3cdcda7a0d5 Mon Sep 17 00:00:00 2001 From: Mienek Date: Thu, 16 Jan 2020 12:36:19 +0100 Subject: [PATCH 69/97] =?UTF-8?q?kein=20bock=20mehr=20mach=20dein=20schei?= =?UTF-8?q?=C3=9F=20richtig=20das=20n=C3=A4chste=20mal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/IntelliUnitTest.pro | 2 + src/Tool/IntelliToolPolygon.cpp | 15 +--- src/tst_unittest.cpp | 128 ++++++++++++++------------------ 3 files changed, 61 insertions(+), 84 deletions(-) diff --git a/src/IntelliUnitTest.pro b/src/IntelliUnitTest.pro index 6e41ba3..a285e28 100644 --- a/src/IntelliUnitTest.pro +++ b/src/IntelliUnitTest.pro @@ -10,6 +10,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TEMPLATE = app SOURCES += tst_unittest.cpp \ + GUI/IntelliInputDialog.cpp \ GUI/IntelliPhotoGui.cpp \ Image/IntelliImage.cpp \ Image/IntelliRasterImage.cpp \ @@ -41,6 +42,7 @@ DISTFILES += \ icons/rectangle-tool.svg HEADERS += \ + GUI/IntelliInputDialog.h \ GUI/IntelliPhotoGui.h \ Image/IntelliImage.h \ Image/IntelliRasterImage.h \ diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index d80c471..e860120 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -52,7 +52,7 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ this->Canvas->image->calculateVisiblity(); } } - else if(drawingOfPolygon && isNearStart(x,y,QPointList.front())) { + else if(drawingOfPolygon && QPointList.size() > 0 && isNearStart(x,y,QPointList.front())) { if(QPointList.size() > 2) { isPointNearStart = true; this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); @@ -90,7 +90,6 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ if(isPointNearStart) { isInside = false; isPointNearStart = false; - isDrawing = false; if(!isSettingPolygon) { std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); QPoint Point; @@ -139,17 +138,11 @@ void IntelliToolPolygon::onMouseMoved(int x, int y){ } bool IntelliToolPolygon::isNearStart(int x, int y, QPoint Startpoint){ - bool isNear = false; int StartX = Startpoint.x(); int StartY = Startpoint.y(); int valueToNear = 5; - for(int i = StartX - valueToNear; i < StartX + valueToNear; i++) { - for(int j = StartY - valueToNear; j < StartY + valueToNear; j++) { - if((i == x) && (j == y)) { - isNear = true; - } - } - } - return isNear; + float euklid = sqrt(pow(static_cast(StartX-x),2.f)+pow(static_cast(StartY-y),2.f)); + + return static_cast(euklid)layerBundle[0].image->drawPlain(QColor(-1, -1, -1, -1)); - for(size_t i = 0; i<200; i++) { - point.setX(static_cast(i)); - for(size_t j = 0; i<200; i++) { - point.setY(static_cast(j)); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); - } - } - - area->layerBundle[0].image->drawPlain(QColor(256, 256, 256, 256)); - for(size_t i = 0; i<200; i++) { - point.setX(static_cast(i)); - for(size_t j = 0; i<200; i++) { - point.setY(static_cast(j)); - QVERIFY(area->layerBundle[static_cast(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0)); - } - } - area->deleteLayer(0); } @@ -299,7 +281,7 @@ void UnitTest::test_moveActive(){ area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 255)); + area->layerBundle[1].image->drawPlain(QColor(0, 0, 0, 255)); QPoint point(0,0); area->moveActiveLayer(-1); @@ -1153,20 +1135,20 @@ void UnitTest::bench_moveActive(){ } void UnitTest::bench_setPolygon(){ - area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); + area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE); - std::vector polygon{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,10), - QPoint(00,10) - }; + std::vector polygon{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,10), + QPoint(00,10) + }; - QBENCHMARK{ - area->layerBundle[1].image->setPolygon(polygon); - } + QBENCHMARK{ + area->layerBundle[0].image->setPolygon(polygon); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_setLayerUp(){ @@ -1578,65 +1560,65 @@ void UnitTest::bench_Plain_interruptedDraw(){ } void UnitTest::bench_Polygon_fullDraw(){ - area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); - std::vector points{ - QPoint(10,00), - QPoint(00,10), - QPoint(10,20), - QPoint(20,10) - }; + area->addLayer(21,21,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(10,00), + QPoint(00,10), + QPoint(10,20), + QPoint(20,10) + }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPolygonTool(); - area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseMoved(points[1].x(), points[1].y()); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + area->Tool->onMouseMoved(points[1].x(), points[1].y()); - area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); - area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); - area->Tool->onMouseMoved(points[2].x(), points[2].y()); + area->Tool->onMouseLeftPressed(points[1].x(), points[1].y()); + area->Tool->onMouseLeftReleased(points[1].x(), points[1].y()); + area->Tool->onMouseMoved(points[2].x(), points[2].y()); - area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); - area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); - area->Tool->onMouseMoved(points[3].x(), points[3].y()); + area->Tool->onMouseLeftPressed(points[2].x(), points[2].y()); + area->Tool->onMouseLeftReleased(points[2].x(), points[2].y()); + area->Tool->onMouseMoved(points[3].x(), points[3].y()); - area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); - area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); - area->Tool->onMouseMoved(points[0].x(), points[0].y()); + area->Tool->onMouseLeftPressed(points[3].x(), points[3].y()); + area->Tool->onMouseLeftReleased(points[3].x(), points[3].y()); + area->Tool->onMouseMoved(points[0].x(), points[0].y()); - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - } + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } void UnitTest::bench_Polygon_interruptedDraw(){ - area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); - std::vector points{ - QPoint(100,000) - }; + area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE); + std::vector points{ + QPoint(100,000) + }; - area->colorPicker.setFirstColor(QColor(255,255,255,255)); - area->colorPicker.setSecondColor(QColor(0,0,0,255)); - area->createPolygonTool(); - area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); + area->colorPicker.setFirstColor(QColor(255,255,255,255)); + area->colorPicker.setSecondColor(QColor(0,0,0,255)); + area->createPolygonTool(); + area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255)); - QBENCHMARK{ - area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); - area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); + QBENCHMARK{ + area->Tool->onMouseLeftPressed(points[0].x(), points[0].y()); + area->Tool->onMouseLeftReleased(points[0].x(), points[0].y()); - area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); - area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); - } + area->Tool->onMouseRightPressed(points[0].x(), points[0].y()); + area->Tool->onMouseRightReleased(points[0].x(), points[0].y()); + } - area->deleteLayer(0); + area->deleteLayer(0); } From 764aaa927f9ccb50a451c880277a42d7382506ec Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:43:33 +0100 Subject: [PATCH 70/97] Added execution rights for .pro files --- src/IntelliPhoto.pro | 0 src/IntelliUnitTest.pro | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 src/IntelliPhoto.pro mode change 100644 => 100755 src/IntelliUnitTest.pro diff --git a/src/IntelliPhoto.pro b/src/IntelliPhoto.pro old mode 100644 new mode 100755 diff --git a/src/IntelliUnitTest.pro b/src/IntelliUnitTest.pro old mode 100644 new mode 100755 From 805199619314723da6c8b4b23254e6cf4bf88e3c Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 12:10:23 +0100 Subject: [PATCH 71/97] fixed unit test --- src/Tool/IntelliToolPolygon.cpp | 4 +++- src/tst_unittest.cpp | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index e860120..d457395 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -23,7 +23,7 @@ IntelliToolPolygon::~IntelliToolPolygon(){ } void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ - if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + if(!drawingOfPolygon && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { if(Area->getPolygonDataOfRealLayer().size()>2) { std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); QPoint Point(x,y); @@ -80,6 +80,7 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ } void IntelliToolPolygon::onMouseRightPressed(int x, int y){ + drawingOfPolygon = false; isInside = false; isPointNearStart = false; QPointList.clear(); @@ -90,6 +91,7 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ if(isPointNearStart) { isInside = false; isPointNearStart = false; + drawingOfPolygon = false; if(!isSettingPolygon) { std::vector Triangles = IntelliTriangulation::calculateTriangles(QPointList); QPoint Point; diff --git a/src/tst_unittest.cpp b/src/tst_unittest.cpp index 11b1850..dc21b8a 100644 --- a/src/tst_unittest.cpp +++ b/src/tst_unittest.cpp @@ -37,6 +37,7 @@ void cleanupTestCase(); ///Test here + //test painting area void test_addLayer(); void test_deleteLayer(); @@ -171,7 +172,7 @@ void UnitTest::initTestCase() void UnitTest::cleanupTestCase() { - delete gui; + } //test painting area From a6a2a922a50722d0715dcabed9527b1026684723 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:17:31 +0100 Subject: [PATCH 72/97] Automated Release Preparation --- prep.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prep.sh b/prep.sh index e496517..2106377 100755 --- a/prep.sh +++ b/prep.sh @@ -72,6 +72,6 @@ while true; do case $yn in [Mm]* ) prepareMerge;; [Rr]* ) prepareRelease;; - * ) echo "Please answer (m)erge or (r)elease.";; + * ) printLine "Please answer (m)erge or (r)elease.";; esac done From 855dd23b395e903a71294fa5fc4395c2c6cd3272 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:24:21 +0100 Subject: [PATCH 73/97] Added Unit Tests to prep script --- prep.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/prep.sh b/prep.sh index 2106377..4b9e307 100755 --- a/prep.sh +++ b/prep.sh @@ -37,6 +37,16 @@ runDoxygen(){ printLine "Doxygen finished." "\033[0;32m" } +runUnitTests(){ + printLine "Running Unit Tests..." + qmake src/IntelliUnitTest.pro || { printLine "ERROR: qmake not found!" "\033[0;33m"; return; } + cd src + make || { printLine "ERROR: make not found!" "\033[0;33m"; return; } + ./IntelliUnitTest + cd .. + printLine "Doxygen finished." "\033[0;32m" +} + gitCommit(){ printLine "Committing Changes to Git..." git add '*' || { printLine "ERROR: git not found!" "\033[0;33m"; return; } From f2e64e375b548dd0cdcfa6d71237471a53b94680 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:39:59 +0100 Subject: [PATCH 74/97] Added Unit Tests to prep script 2 --- prep.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/prep.sh b/prep.sh index 4b9e307..8d3ab76 100755 --- a/prep.sh +++ b/prep.sh @@ -1,3 +1,5 @@ +QMAKE_PATH = "/Users/$USER/Qt5.14.0/5.14.0/clang_64/bin/qmake" + printLine(){ echo "$2$1 \033[0m" } @@ -39,7 +41,7 @@ runDoxygen(){ runUnitTests(){ printLine "Running Unit Tests..." - qmake src/IntelliUnitTest.pro || { printLine "ERROR: qmake not found!" "\033[0;33m"; return; } + $QMAKE_PATH src/IntelliUnitTest.pro || { printLine "ERROR: qmake not found!" "\033[0;33m"; return; } cd src make || { printLine "ERROR: make not found!" "\033[0;33m"; return; } ./IntelliUnitTest @@ -58,6 +60,7 @@ prepareMerge(){ printLine "Merge Preparation started..." runUncrustify runCPPCheck + runUnitTests runDoxygen gitCommit printLine "Finished." "\033[0;32m" @@ -70,6 +73,7 @@ prepareRelease(){ cleanDir runUncrustify runCPPCheck + runUnitTests runDoxygen gitCommit printLine "Finished." "\033[0;32m" From 25deefdcb9b689f5535e296875ade62dbb6ed511 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 16 Jan 2020 12:45:55 +0100 Subject: [PATCH 75/97] Stopped Unit Test Automation as it doesn't work yet --- prep.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prep.sh b/prep.sh index 8d3ab76..cb2a7e4 100755 --- a/prep.sh +++ b/prep.sh @@ -60,7 +60,7 @@ prepareMerge(){ printLine "Merge Preparation started..." runUncrustify runCPPCheck - runUnitTests + #runUnitTests runDoxygen gitCommit printLine "Finished." "\033[0;32m" @@ -73,7 +73,7 @@ prepareRelease(){ cleanDir runUncrustify runCPPCheck - runUnitTests + #runUnitTests runDoxygen gitCommit printLine "Finished." "\033[0;32m" From f5f4ca7a068ed8c36f0c31cd3b8eb70fb215ac06 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 12:21:09 +0100 Subject: [PATCH 76/97] Automated Release Preparation --- docs/html/_intelli_color_picker_8cpp.html | 104 + .../_intelli_color_picker_8cpp_source.html | 139 ++ .../html/_intelli_color_picker_8h_source.html | 67 +- docs/html/_intelli_image_8cpp_source.html | 191 +- docs/html/_intelli_image_8h_source.html | 161 +- docs/html/_intelli_photo_gui_8cpp_source.html | 60 +- docs/html/_intelli_photo_gui_8h_source.html | 342 +-- .../_intelli_raster_image_8cpp_source.html | 15 +- .../html/_intelli_raster_image_8h_source.html | 49 +- .../_intelli_render_settings_8h_source.html | 33 +- .../_intelli_shaped_image_8cpp_source.html | 14 +- .../html/_intelli_shaped_image_8h_source.html | 73 +- docs/html/_intelli_tool_8cpp_source.html | 42 +- docs/html/_intelli_tool_8h_source.html | 143 +- .../_intelli_tool_circle_8cpp_source.html | 30 +- docs/html/_intelli_tool_circle_8h_source.html | 66 +- .../_intelli_tool_flood_fill_8cpp_source.html | 119 +- .../_intelli_tool_flood_fill_8h_source.html | 68 +- docs/html/_intelli_tool_line_8cpp_source.html | 28 +- docs/html/_intelli_tool_line_8h_source.html | 67 +- docs/html/_intelli_tool_pen_8cpp_source.html | 26 +- docs/html/_intelli_tool_pen_8h_source.html | 61 +- .../html/_intelli_tool_plain_8cpp_source.html | 20 +- docs/html/_intelli_tool_plain_8h_source.html | 62 +- .../_intelli_tool_polygon_8cpp_source.html | 232 +-- .../html/_intelli_tool_polygon_8h_source.html | 88 +- .../_intelli_tool_rectangle_8cpp_source.html | 28 +- .../_intelli_tool_rectangle_8h_source.html | 66 +- .../html/_intelli_toolsettings_8h_source.html | 37 +- .../_intelli_triangulation_8cpp_source.html | 10 +- .../_intelli_triangulation_8h_source.html | 78 +- docs/html/_painting_area_8cpp_source.html | 926 +++++---- docs/html/_painting_area_8h_source.html | 324 +-- docs/html/annotated.html | 1 + docs/html/annotated_dup.js | 3 +- docs/html/class_intelli_color_picker.html | 18 +- docs/html/class_intelli_image.html | 42 +- docs/html/class_intelli_photo_gui.html | 2 +- docs/html/class_intelli_raster_image.html | 6 +- docs/html/class_intelli_render_settings.html | 2 +- docs/html/class_intelli_shaped_image.html | 10 +- docs/html/class_intelli_tool.html | 18 +- docs/html/class_intelli_tool_circle.html | 2 +- docs/html/class_intelli_tool_flood_fill.html | 8 +- docs/html/class_intelli_tool_line.html | 2 +- docs/html/class_intelli_tool_pen.html | 2 +- docs/html/class_intelli_tool_plain_tool.html | 2 +- .../class_intelli_tool_polygon-members.html | 21 +- docs/html/class_intelli_tool_polygon.html | 12 +- docs/html/class_intelli_tool_rectangle.html | 2 +- docs/html/class_intelli_toolsettings.html | 2 +- docs/html/class_painting_area.html | 86 +- docs/html/class_unit_test-members.html | 107 + docs/html/class_unit_test.html | 202 ++ docs/html/class_unit_test.js | 7 + docs/html/class_unit_test.png | Bin 0 -> 372 bytes docs/html/classes.html | 13 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 4 + .../dir_68267d1309a1af8e8297ef4c3efbcdba.js | 8 +- .../dir_858355f3357c73763e566ff49d1e6a7a.html | 2 - .../dir_858355f3357c73763e566ff49d1e6a7a.js | 1 - .../dir_8de6078cba2a961961818cf80b28fd4f.html | 2 +- .../dir_8de6078cba2a961961818cf80b28fd4f.js | 2 +- docs/html/files.html | 39 +- docs/html/functions.html | 6 + docs/html/functions_func.html | 6 + docs/html/hierarchy.html | 8 +- docs/html/hierarchy.js | 3 + docs/html/main_8cpp_source.html | 2 +- docs/html/main_unit_test_8cpp.html | 115 + docs/html/main_unit_test_8cpp_source.html | 309 +++ .../html/namespace_intelli_triangulation.html | 4 +- docs/html/navtreedata.js | 4 +- docs/html/navtreeindex0.js | 74 +- docs/html/navtreeindex1.js | 13 +- docs/html/search/all_10.js | 6 +- docs/html/search/all_11.js | 29 +- docs/html/search/all_7.js | 2 +- docs/html/search/all_9.js | 11 +- docs/html/search/all_a.js | 14 +- docs/html/search/all_b.js | 18 +- docs/html/search/all_c.js | 8 +- docs/html/search/all_d.js | 38 +- docs/html/search/all_e.js | 9 +- docs/html/search/all_f.js | 5 +- docs/html/search/classes_0.js | 32 +- docs/html/search/classes_1.js | 2 +- docs/html/search/classes_2.js | 2 +- docs/html/search/classes_3.js | 2 +- docs/html/search/classes_4.html | 30 + docs/html/search/classes_4.js | 4 + docs/html/search/defines_0.js | 2 +- docs/html/search/enums_0.js | 2 +- docs/html/search/enums_1.js | 2 +- docs/html/search/enumvalues_0.js | 2 +- docs/html/search/enumvalues_1.js | 2 +- docs/html/search/enumvalues_2.js | 2 +- docs/html/search/enumvalues_3.js | 6 +- docs/html/search/enumvalues_4.js | 4 +- docs/html/search/enumvalues_5.js | 2 +- docs/html/search/files_0.js | 68 +- docs/html/search/files_1.js | 3 +- docs/html/search/files_2.js | 4 +- docs/html/search/files_3.html | 30 + docs/html/search/files_3.js | 4 + docs/html/search/functions_0.js | 4 +- docs/html/search/functions_1.js | 26 +- docs/html/search/functions_2.js | 10 +- docs/html/search/functions_3.js | 44 +- docs/html/search/functions_4.js | 38 +- docs/html/search/functions_5.js | 2 +- docs/html/search/functions_6.js | 12 +- docs/html/search/functions_7.js | 14 +- docs/html/search/functions_8.js | 4 +- docs/html/search/functions_9.js | 4 +- docs/html/search/functions_a.js | 36 +- docs/html/search/functions_b.js | 5 +- docs/html/search/functions_c.js | 2 +- docs/html/search/functions_d.js | 29 +- docs/html/search/namespaces_0.js | 2 +- docs/html/search/searchdata.js | 4 +- docs/html/search/variables_0.js | 10 +- docs/html/search/variables_1.js | 2 +- docs/html/search/variables_2.js | 6 +- docs/html/search/variables_3.js | 2 +- docs/html/search/variables_4.js | 4 +- docs/html/search/variables_5.js | 6 +- docs/html/search/variables_6.js | 2 +- docs/html/search/variables_7.js | 4 +- docs/html/search/variables_8.js | 4 +- docs/html/struct_layer_object.html | 42 +- docs/html/struct_triangle.html | 8 +- docs/html/tst__unittest_8cpp.html | 131 ++ docs/html/tst__unittest_8cpp_source.html | 1852 +++++++++++++++++ 134 files changed, 5397 insertions(+), 2198 deletions(-) create mode 100644 docs/html/_intelli_color_picker_8cpp.html create mode 100644 docs/html/_intelli_color_picker_8cpp_source.html create mode 100644 docs/html/class_unit_test-members.html create mode 100644 docs/html/class_unit_test.html create mode 100644 docs/html/class_unit_test.js create mode 100644 docs/html/class_unit_test.png create mode 100644 docs/html/main_unit_test_8cpp.html create mode 100644 docs/html/main_unit_test_8cpp_source.html create mode 100644 docs/html/search/classes_4.html create mode 100644 docs/html/search/classes_4.js create mode 100644 docs/html/search/files_3.html create mode 100644 docs/html/search/files_3.js create mode 100644 docs/html/tst__unittest_8cpp.html create mode 100644 docs/html/tst__unittest_8cpp_source.html diff --git a/docs/html/_intelli_color_picker_8cpp.html b/docs/html/_intelli_color_picker_8cpp.html new file mode 100644 index 0000000..4c18fee --- /dev/null +++ b/docs/html/_intelli_color_picker_8cpp.html @@ -0,0 +1,104 @@ + + + + + + + +IntelliPhoto: src/IntelliHelper/IntelliColorPicker.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    IntelliColorPicker.cpp File Reference
    +
    + +
    + + + + diff --git a/docs/html/_intelli_color_picker_8cpp_source.html b/docs/html/_intelli_color_picker_8cpp_source.html new file mode 100644 index 0000000..d997afc --- /dev/null +++ b/docs/html/_intelli_color_picker_8cpp_source.html @@ -0,0 +1,139 @@ + + + + + + + +IntelliPhoto: src/IntelliHelper/IntelliColorPicker.cpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    IntelliColorPicker.cpp
    +
    +
    +Go to the documentation of this file.
    1 #include "IntelliColorPicker.h"
    +
    2 
    + +
    4  firstColor = {255,0,0,255};
    +
    5  secondColor = {0,255,255,255};
    +
    6 }
    +
    7 
    + +
    9 
    +
    10 }
    +
    11 
    + +
    13  std::swap(firstColor, secondColor);
    +
    14 }
    +
    15 
    + +
    17  return this->firstColor;
    +
    18 }
    +
    19 
    + +
    21  return this->secondColor;
    +
    22 }
    +
    23 
    + +
    25  this->firstColor = Color;
    +
    26 }
    +
    27 
    + +
    29  this->secondColor = Color;
    +
    30 }
    +
    +
    +
    virtual ~IntelliColorPicker()
    IntelliColorPicker destructor clears up his used memory, if there is some.
    +
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    + +
    void setFirstColor(QColor Color)
    A function to set the primary color.
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    void swapColors()
    A function switching primary and secondary color.
    +
    IntelliColorPicker()
    IntelliColorPicker constructor, setting 2 preset colors, be careful, theese color may change in produ...
    + + + + diff --git a/docs/html/_intelli_color_picker_8h_source.html b/docs/html/_intelli_color_picker_8h_source.html index 26bc4f1..7c0b1d8 100644 --- a/docs/html/_intelli_color_picker_8h_source.html +++ b/docs/html/_intelli_color_picker_8h_source.html @@ -93,39 +93,44 @@ $(document).ready(function(){initNavTree('_intelli_color_picker_8h_source.html',
    5 #include "QPoint"
    6 #include "QColorDialog"
    7 
    - -
    12 public:
    - -
    17 
    -
    21 virtual ~IntelliColorPicker();
    -
    22 
    -
    26 void swapColors();
    -
    27 
    -
    32 QColor getFirstColor();
    -
    33 
    -
    38 QColor getSecondColor();
    -
    39 
    -
    44 void setFirstColor(QColor Color);
    -
    45 
    -
    50 void setSecondColor(QColor Color);
    -
    51 
    -
    52 private:
    -
    56 QColor firstColor;
    -
    57 
    -
    61 QColor secondColor;
    -
    62 };
    -
    63 
    -
    64 #endif
    +
    8 //for unit testing
    +
    9 class UnitTest;
    +
    10 
    + +
    15  friend UnitTest;
    +
    16 public:
    + +
    21 
    +
    25 virtual ~IntelliColorPicker();
    +
    26 
    +
    30 void swapColors();
    +
    31 
    +
    36 QColor getFirstColor();
    +
    37 
    +
    42 QColor getSecondColor();
    +
    43 
    +
    48 void setFirstColor(QColor Color);
    +
    49 
    +
    54 void setSecondColor(QColor Color);
    +
    55 
    +
    56 private:
    +
    60 QColor firstColor;
    +
    61 
    +
    65 QColor secondColor;
    +
    66 };
    +
    67 
    +
    68 #endif
    -
    virtual ~IntelliColorPicker()
    IntelliColorPicker destructor clears up his used memory, if there is some.
    -
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    -
    QColor getSecondColor()
    A function to read the secondary selected color.
    -
    void setFirstColor(QColor Color)
    A function to set the primary color.
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    -
    void swapColors()
    A function switching primary and secondary color.
    -
    IntelliColorPicker()
    IntelliColorPicker constructor, setting 2 preset colors, be careful, theese color may change in produ...
    +
    virtual ~IntelliColorPicker()
    IntelliColorPicker destructor clears up his used memory, if there is some.
    +
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    +
    void setFirstColor(QColor Color)
    A function to set the primary color.
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    + +
    void swapColors()
    A function switching primary and secondary color.
    +
    IntelliColorPicker()
    IntelliColorPicker constructor, setting 2 preset colors, be careful, theese color may change in produ...
    -
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws A Line between two given Points in a given color.
    +
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    virtual ~IntelliImage()=0
    An Abstract Destructor.
    virtual void drawPixel(const QPoint &p1, const QColor &color)
    A funtcion used to draw a pixel on the Image with the given Color.
    IntelliImage(int width, int height, bool fastRendererOn)
    The Construcor of the IntelliImage. Given the Image dimensions.
    Definition: IntelliImage.cpp:5
    -
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A.
    -
    virtual void updateRendererSetting(bool fastRendererOn)
    updateRendererSetting updates the existing image format to the new format.
    -
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:47
    -
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    +
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    +
    virtual void updateRendererSetting(bool fastRendererOn)
    updateRendererSetting updates the existing image format to the new format.
    +
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:51
    +
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    void resizeImage(QImage *image, const QSize &newSize)
    -
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    -
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    -
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:37
    +
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    +
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    +
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:41
    virtual bool loadImage(const QString &filePath)
    A function that loads and sclaes an image to the fitting dimensions.
    -
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    +
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    -
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws A Line between two given Points in a given color.
    +
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    virtual ~IntelliImage()=0
    An Abstract Destructor.
    virtual void drawPixel(const QPoint &p1, const QColor &color)
    A funtcion used to draw a pixel on the Image with the given Color.
    virtual QImage getDisplayable(const QSize &displaySize, int alpha)=0
    A function returning the displayable ImageData in a requested transparence and size.
    -
    virtual ImageType getTypeOfImage()
    Definition: IntelliImage.h:134
    -
    virtual std::vector< QPoint > getPolygonData()
    A function that returns the Polygondata if existent.
    Definition: IntelliImage.h:130
    +
    virtual ImageType getTypeOfImage()
    Definition: IntelliImage.h:138
    +
    virtual std::vector< QPoint > getPolygonData()
    A function that returns the Polygondata if existent.
    Definition: IntelliImage.h:134
    IntelliImage(int width, int height, bool fastRendererOn)
    The Construcor of the IntelliImage. Given the Image dimensions.
    Definition: IntelliImage.cpp:5
    -
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A.
    -
    virtual void updateRendererSetting(bool fastRendererOn)
    updateRendererSetting updates the existing image format to the new format.
    -
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:47
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    +
    virtual void updateRendererSetting(bool fastRendererOn)
    updateRendererSetting updates the existing image format to the new format.
    +
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:51
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    +
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    void resizeImage(QImage *image, const QSize &newSize)
    -
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    -
    ImageType TypeOfImage
    The Type, an Image is.
    Definition: IntelliImage.h:42
    -
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    +
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    +
    ImageType TypeOfImage
    The Type, an Image is.
    Definition: IntelliImage.h:46
    +
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    -
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:37
    +
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:41
    +
    virtual bool loadImage(const QString &filePath)
    A function that loads and sclaes an image to the fitting dimensions.
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    virtual IntelliImage * getDeepCopy()=0
    A function that copys all that returns a [allocated] Image.
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    ImageType
    The Types, which an Image can be.
    Definition: IntelliImage.h:26
    -
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    +
    ImageType
    The Types, which an Image can be.
    Definition: IntelliImage.h:30
    +
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
    An abstract function that sets the data of the visible Polygon, if needed.
    -
    void createCircleTool()
    +
    void createCircleTool()
    void setRenderSettings(bool isFastRenderingOn)
    setRenderSettings updates all Images to the new Rendersetting.
    -
    IntelliImage * getImageOfActiveLayer()
    -
    void createRectangleTool()
    - -
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    -
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    -
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    - -
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    QColor getSecondColor()
    A function to read the secondary selected color.
    -
    void createPlainTool()
    +
    IntelliImage * getImageOfActiveLayer()
    +
    void createRectangleTool()
    + +
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    +
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    +
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    + +
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    +
    void createPlainTool()
    IntelliPhotoGui()
    The IntelliPhotoGui method is the constructor and is used to create a new instance of the main progra...
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    void createPenTool()
    -
    void createLineTool()
    -
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    -
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    void createPenTool()
    +
    void createLineTool()
    +
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    +
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    -
    int getNumberOfActiveLayer()
    +
    int getNumberOfActiveLayer()
    void closeEvent(QCloseEvent *event) override
    The closeEvent function handles closing events.
    -
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    +
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    void setToolWidth(int value)
    -
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    -
    void createPolygonTool()
    -
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    -
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:182
    +
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    +
    void createPolygonTool()
    +
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    +
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:202
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    void createFloodFillTool()
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    void createFloodFillTool()
    void setInnerAlpha(int innerAlpha)
    -
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:181
    -
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    +
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:201
    +
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    void setLineWidth(int LineWidth)
    -
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    -
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    -
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    +
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    +
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    +
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    IntelliPhotoGui()
    The IntelliPhotoGui method is the constructor and is used to create a new instance of the main progra...
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    void closeEvent(QCloseEvent *event) override
    The closeEvent function handles closing events.
    void setToolWidth(int value)
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    virtual ~IntelliRasterImage() override
    An Destructor.
    IntelliRasterImage(int width, int height, bool fastRendererOn)
    The Construcor of the IntelliRasterImage. Given the Image dimensions.
    -
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:47
    +
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:51
    virtual QImage getDisplayable(const QSize &displaySize, int alpha) override
    A function returning the displayable ImageData in a requested transparence and size.
    -
    ImageType TypeOfImage
    The Type, an Image is.
    Definition: IntelliImage.h:42
    +
    ImageType TypeOfImage
    The Type, an Image is.
    Definition: IntelliImage.h:46
    -
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:37
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    +
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:41
    +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    virtual IntelliImage * getDeepCopy() override
    A function that copys all that returns a [allocated] Image.
    virtual void calculateVisiblity() override
    A function that calculates the visibility of the image if a polygon is given. [does nothing in RASTER...
    virtual void setPolygon(const std::vector< QPoint > &polygonData) override
    An abstract function that sets the data of the visible Polygon, if needed.
    -
    The IntelliRasterImage manages a RASTERIMAGE.
    +
    The IntelliRasterImage manages a RASTERIMAGE.
    virtual ~IntelliRasterImage() override
    An Destructor.
    IntelliRasterImage(int width, int height, bool fastRendererOn)
    The Construcor of the IntelliRasterImage. Given the Image dimensions.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    virtual QImage getDisplayable(const QSize &displaySize, int alpha) override
    A function returning the displayable ImageData in a requested transparence and size.
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    + +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    virtual IntelliImage * getDeepCopy() override
    A function that copys all that returns a [allocated] Image.
    virtual void calculateVisiblity() override
    A function that calculates the visibility of the image if a polygon is given. [does nothing in RASTER...
    virtual void setPolygon(const std::vector< QPoint > &polygonData) override
    An abstract function that sets the data of the visible Polygon, if needed.
    -
    The IntelliRasterImage manages a RASTERIMAGE.
    +
    The IntelliRasterImage manages a RASTERIMAGE.
    - +
    bool isFastRenderering()
    The getfastRenderer gets the value of the flag for the fastRenderer setting.
    void setFastRendering(bool Updatedsetting)
    setFastRendering sets fastRendering to Updatedsetting.
    +
    virtual QImage getDisplayable(const QSize &displaySize, int alpha=255) override
    A function returning the displayable ImageData in a requested transparence and size.
    -
    The IntelliShapedImage manages a Shapedimage.
    +
    The IntelliShapedImage manages a Shapedimage.
    virtual IntelliImage * getDeepCopy() override
    A function that copys all that returns a [allocated] Image.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    virtual std::vector< QPoint > getPolygonData() override
    A function that returns the Polygondata if existent.
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    -
    std::vector< QPoint > polygonData
    The Vertices of The Polygon. Needs to be a planar Polygon.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    virtual std::vector< QPoint > getPolygonData() override
    A function that returns the Polygondata if existent.
    + +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    +
    std::vector< QPoint > polygonData
    The Vertices of The Polygon. Needs to be a planar Polygon.
    IntelliShapedImage(int width, int height, bool fastRendererOn)
    The Construcor of the IntelliShapedImage. Given the Image dimensions.
    virtual ~IntelliShapedImage() override
    An Destructor.
    -
    The IntelliRasterImage manages a RASTERIMAGE.
    +
    The IntelliRasterImage manages a RASTERIMAGE.
    virtual void setPolygon(const std::vector< QPoint > &polygonData) override
    A function that sets the data of the visible Polygon.
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    -
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    - -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:69
    -
    virtual std::vector< QPoint > getPolygonData()
    A function that returns the Polygondata if existent.
    Definition: IntelliImage.h:130
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    + +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    virtual std::vector< QPoint > getPolygonData()
    A function that returns the Polygondata if existent.
    Definition: IntelliImage.h:134
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:59
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:96
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    - -
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    -
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    +
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    +
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    void setToolWidth(int value)
    bool getIsDrawing()
    - -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general Painting Area and colorPicker.
    Definition: IntelliTool.cpp:4
    -
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:37
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    +
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:41
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - +
    virtual ~IntelliTool()=0
    An abstract Destructor.
    Definition: IntelliTool.cpp:11
    virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
    An abstract function that sets the data of the visible Polygon, if needed.
    diff --git a/docs/html/_intelli_tool_8h_source.html b/docs/html/_intelli_tool_8h_source.html index 2785156..2cc1ee6 100644 --- a/docs/html/_intelli_tool_8h_source.html +++ b/docs/html/_intelli_tool_8h_source.html @@ -93,96 +93,101 @@ $(document).ready(function(){initNavTree('_intelli_tool_8h_source.html',''); ini
    6 #include <vector>
    7 
    -
    8 struct LayerObject;
    -
    9 class PaintingArea;
    +
    8 //for unit testing
    +
    9 class UnitTest;
    10 
    -
    14 class IntelliTool {
    -
    15 public:
    -
    16 enum class Tooltype {
    -
    17  CIRCLE,
    -
    18  FLOODFILL,
    -
    19  LINE,
    -
    20  PEN,
    -
    21  PLAIN,
    -
    22  POLYGON,
    -
    23  RECTANGLE
    -
    24 };
    -
    25 private:
    -
    30 bool createToolLayer();
    -
    31 
    -
    35 void mergeToolLayer();
    -
    36 
    -
    40 void deleteToolLayer();
    -
    41 protected:
    - -
    46 
    - -
    48 
    - -
    53 
    - -
    55 
    - -
    60 
    - -
    65 
    -
    69 bool isDrawing = false;
    -
    70 
    -
    71 public:
    - -
    78 
    -
    82 virtual ~IntelliTool() = 0;
    -
    83 
    -
    89 virtual void onMouseRightPressed(int x, int y);
    -
    90 
    -
    96 virtual void onMouseRightReleased(int x, int y);
    -
    97 
    -
    103 virtual void onMouseLeftPressed(int x, int y);
    -
    104 
    -
    110 virtual void onMouseLeftReleased(int x, int y);
    -
    111 
    -
    116 virtual void onWheelScrolled(int value);
    -
    117 
    -
    123 virtual void onMouseMoved(int x, int y);
    -
    124 
    - -
    126 
    -
    127 bool getIsDrawing();
    +
    11 struct LayerObject;
    +
    12 class PaintingArea;
    +
    13 
    +
    17 class IntelliTool {
    +
    18  friend UnitTest;
    +
    19 public:
    +
    20 enum class Tooltype {
    +
    21  CIRCLE,
    +
    22  FLOODFILL,
    +
    23  LINE,
    +
    24  PEN,
    +
    25  PLAIN,
    +
    26  POLYGON,
    +
    27  RECTANGLE
    +
    28 };
    +
    29 private:
    +
    34 bool createToolLayer();
    +
    35 
    +
    39 void mergeToolLayer();
    +
    40 
    +
    44 void deleteToolLayer();
    +
    45 protected:
    + +
    50 
    + +
    52 
    + +
    57 
    + +
    59 
    + +
    64 
    + +
    69 
    +
    73 bool isDrawing = false;
    +
    74 
    +
    75 public:
    + +
    82 
    +
    86 virtual ~IntelliTool() = 0;
    +
    87 
    +
    93 virtual void onMouseRightPressed(int x, int y);
    +
    94 
    +
    100 virtual void onMouseRightReleased(int x, int y);
    +
    101 
    +
    107 virtual void onMouseLeftPressed(int x, int y);
    +
    108 
    +
    114 virtual void onMouseLeftReleased(int x, int y);
    +
    115 
    +
    120 virtual void onWheelScrolled(int value);
    +
    121 
    +
    127 virtual void onMouseMoved(int x, int y);
    128 
    -
    129 };
    -
    130 #endif
    + +
    130 
    +
    131 bool getIsDrawing();
    +
    132 
    +
    133 };
    +
    134 #endif
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    - -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:69
    -
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:25
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    + +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:23
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:59
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:96
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    bool getIsDrawing()
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general Painting Area and colorPicker.
    Definition: IntelliTool.cpp:4
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - +
    virtual ~IntelliTool()=0
    An abstract Destructor.
    Definition: IntelliTool.cpp:11
    diff --git a/docs/html/_intelli_tool_circle_8cpp_source.html b/docs/html/_intelli_tool_circle_8cpp_source.html index 21aef0b..130ef9b 100644 --- a/docs/html/_intelli_tool_circle_8cpp_source.html +++ b/docs/html/_intelli_tool_circle_8cpp_source.html @@ -176,27 +176,27 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8cpp_source.html'
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    -
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws A Line between two given Points in a given color.
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the edge Width relative to value.
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    -
    QColor getSecondColor()
    A function to read the secondary selected color.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:69
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    -
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A.
    +
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    IntelliToolCircle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and ed...
    virtual ~IntelliToolCircle() override
    A Destructor.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    void setLineWidth(int LineWidth)
    @@ -204,8 +204,8 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8cpp_source.html'
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - -
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    + +
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the middle point of the cricle.
    diff --git a/docs/html/_intelli_tool_circle_8h_source.html b/docs/html/_intelli_tool_circle_8h_source.html index c75d116..3c79cb3 100644 --- a/docs/html/_intelli_tool_circle_8h_source.html +++ b/docs/html/_intelli_tool_circle_8h_source.html @@ -92,48 +92,54 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8h_source.html','
    4 
    5 #include "QColor"
    6 #include "QPoint"
    - -
    15 void drawCircle(int radius);
    -
    16 
    -
    20 QPoint centerPoint;
    +
    7 
    +
    8 //for unit testing
    +
    9 class UnitTest;
    +
    10 
    + +
    15  friend UnitTest;
    +
    20 void drawCircle(int radius);
    21 
    -
    22 public:
    - -
    29 
    -
    33 virtual ~IntelliToolCircle() override;
    +
    25 QPoint centerPoint;
    +
    26 
    +
    27 public:
    +
    34 
    -
    40 virtual void onMouseRightPressed(int x, int y) override;
    -
    41 
    -
    47 virtual void onMouseRightReleased(int x, int y) override;
    -
    48 
    -
    54 virtual void onMouseLeftPressed(int x, int y) override;
    -
    55 
    -
    61 virtual void onMouseLeftReleased(int x, int y) override;
    -
    62 
    -
    67 virtual void onWheelScrolled(int value) override;
    -
    68 
    -
    74 virtual void onMouseMoved(int x, int y) override;
    -
    75 };
    -
    76 
    -
    77 #endif
    +
    38 virtual ~IntelliToolCircle() override;
    +
    39 
    +
    45 virtual void onMouseRightPressed(int x, int y) override;
    +
    46 
    +
    52 virtual void onMouseRightReleased(int x, int y) override;
    +
    53 
    +
    59 virtual void onMouseLeftPressed(int x, int y) override;
    +
    60 
    +
    66 virtual void onMouseLeftReleased(int x, int y) override;
    +
    67 
    +
    72 virtual void onWheelScrolled(int value) override;
    +
    73 
    +
    79 virtual void onMouseMoved(int x, int y) override;
    +
    80 };
    +
    81 
    +
    82 #endif
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas layer.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the edge Width relative to value.
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    IntelliToolCircle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and ed...
    virtual ~IntelliToolCircle() override
    A Destructor.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
    +
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    -
    The IntelliToolCircle class represents a tool to draw a circle.
    - +
    The IntelliToolCircle class represents a tool to draw a circle.
    +
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the middle point of the cricle.
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    virtual void drawPixel(const QPoint &p1, const QColor &color)
    A funtcion used to draw a pixel on the Image with the given Color.
    IntelliToolFloodFill(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    -
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    -
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    +
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    +
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the point to flood fill around and does t...
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual ~IntelliToolFloodFill() override
    A Destructor.
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:59
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    - -
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    +
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    - -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    +
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas.
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - + -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    IntelliToolFloodFill(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    -
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    -
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    +
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    +
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the point to flood fill around and does t...
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual ~IntelliToolFloodFill() override
    A Destructor.
    -
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas.
    -
    The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
    - + +
    The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    -
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws A Line between two given Points in a given color.
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Drawing a Line from the startpoint to the current mouse po...
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the lineWidth relative to value.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:69
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    virtual ~IntelliToolLine() override
    An abstract Destructor.
    -
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A.
    +
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas.
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the starting point of the line.
    void setLineWidth(int LineWidth)
    @@ -166,8 +166,8 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8cpp_source.html','
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - -
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    + +
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Drawing a Line from the startpoint to the current mouse po...
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the lineWidth relative to value.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual ~IntelliToolLine() override
    An abstract Destructor.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the starting point of the line.
    - -
    The IntelliToolFloodFill class represents a tool to draw a line.
    + +
    The IntelliToolFloodFill class represents a tool to draw a line.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    virtual ~IntelliToolPen() override
    A Destructor.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. To draw the line.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current draw.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    The IntelliToolPen class represents a tool to draw a line.
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    The IntelliToolPen class represents a tool to draw a line.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing penWidth relativ to value.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the drawing to the active layer.
    IntelliToolPen(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. Reading the penWidth.
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Starting the drawing procedure.
    - +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Filling the whole canvas.
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    IntelliToolPlainTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual ~IntelliToolPlainTool() override
    A Destructor.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - -
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    + +
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    -
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Filling the whole canvas.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    +
    IntelliToolPlainTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    virtual ~IntelliToolPlainTool() override
    A Destructor.
    - +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    -
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws A Line between two given Points in a given color.
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    virtual void drawPixel(const QPoint &p1, const QColor &color)
    A funtcion used to draw a pixel on the Image with the given Color.
    std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
    A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    -
    QColor getSecondColor()
    A function to read the secondary selected color.
    -
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    +
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    -
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A.
    +
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:59
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
    A constructor setting the general paintingArea and colorPicker.
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:64
    -
    IntelliImage::ImageType getTypeOfImageRealLayer()
    - -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    IntelliImage::ImageType getTypeOfImageRealLayer()
    +
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    +
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    -
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    +
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    - -
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:47
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    +
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    ~IntelliToolPolygon() override
    A Destructor.
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    -
    std::vector< QPoint > getPolygonDataOfRealLayer()
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    +
    std::vector< QPoint > getPolygonDataOfRealLayer()
    void setLineWidth(int LineWidth)
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Setting polygon points.
    -
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    +
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    +
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    - -
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. CHanging the lineWidth relative to value.
    + +
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. CHanging the lineWidth relative to value.
    virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
    An abstract function that sets the data of the visible Polygon, if needed.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    -
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
    A constructor setting the general paintingArea and colorPicker.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    ~IntelliToolPolygon() override
    A Destructor.
    +
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Setting polygon points.
    -
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    The IntelliToolPolygon managed the Drawing of Polygonforms.
    -
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    +
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    +
    The IntelliToolPolygon managed the Drawing of Polygonforms.
    +
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    - -
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. CHanging the lineWidth relative to value.
    + +
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. CHanging the lineWidth relative to value.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.Changing edgeWidth relativ to value.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:52
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:54
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    virtual ~IntelliToolRectangle() override
    A Destructor.
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Setting the originCorner and draws a rectangle...
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:45
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse.Resetting the current draw.
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    The IntelliToolRectangle class represents a tool to draw a rectangle.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    The IntelliToolRectangle class represents a tool to draw a rectangle.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.Drawing a rectangle to currrent mouse position.
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the draw to the active layer.
    - +
    IntelliToolRectangle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. And reading in the alphaInner and edg...
    void setInnerAlpha(int innerAlpha)
    +
    void setLineWidth(int LineWidth)
    - + -
    bool isInTriangle(Triangle &tri, QPoint &P)
    A function to check if a given point is in a triangle.
    +
    bool isInTriangle(Triangle &tri, QPoint &P)
    A function to check if a given point is in a triangle.
    std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
    A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
    - +
    #define pi
    - -
    The Triangle struct holds the 3 vertices of a triangle.
    + +
    The Triangle struct holds the 3 vertices of a triangle.
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    - + -
    bool isInTriangle(Triangle &tri, QPoint &P)
    A function to check if a given point is in a triangle.
    -
    float sign(QPoint &p1, QPoint &p2, QPoint &p3)
    A function to get the 2*area of a traingle, using its determinat.
    +
    bool isInTriangle(Triangle &tri, QPoint &P)
    A function to check if a given point is in a triangle.
    +
    float sign(QPoint &p1, QPoint &p2, QPoint &p3)
    A function to get the 2*area of a traingle, using its determinat.
    std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
    A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
    - - -
    The Triangle struct holds the 3 vertices of a triangle.
    + + +
    The Triangle struct holds the 3 vertices of a triangle.
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    - - + + + -
    int getWidthOfActive()
    The getWidthOfActive gets the horizontal dimensions of the active layer.
    +
    int getWidthOfActive()
    The getWidthOfActive gets the horizontal dimensions of the active layer.
    -
    void createCircleTool()
    +
    void createCircleTool()
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    void setRenderSettings(bool isFastRenderingOn)
    setRenderSettings updates all Images to the new Rendersetting.
    -
    IntelliImage * getImageOfActiveLayer()
    -
    void mouseReleaseEvent(QMouseEvent *event) override
    -
    void createRectangleTool()
    +
    IntelliImage * getImageOfActiveLayer()
    +
    void mouseReleaseEvent(QMouseEvent *event) override
    +
    void createRectangleTool()
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    - + -
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    -
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    +
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    +
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    -
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    - - -
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    -
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    -
    The IntelliShapedImage manages a Shapedimage.
    -
    QColor getSecondColor()
    A function to read the secondary selected color.
    -
    int heightOffset
    Definition: PaintingArea.h:30
    -
    int getHeightOfActive()
    The getHeightOfActive gets the vertical dimensions of the active layer.
    +
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    +
    int widthOffset
    widthOffset - Stores the number of pixles from the left side of the painting area.
    Definition: PaintingArea.h:39
    + +
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    +
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    +
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    +
    The IntelliShapedImage manages a Shapedimage.
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    +
    int heightOffset
    heightOffset - Stores the number of pixles from the top of the painting area.
    Definition: PaintingArea.h:43
    +
    int getHeightOfActive()
    The getHeightOfActive gets the vertical dimensions of the active layer.
    virtual QImage getDisplayable(const QSize &displaySize, int alpha)=0
    A function returning the displayable ImageData in a requested transparence and size.
    -
    void createPlainTool()
    -
    void wheelEvent(QWheelEvent *event) override
    -
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:25
    -
    void createPenTool()
    +
    void createPlainTool()
    +
    void wheelEvent(QWheelEvent *event) override
    +
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:23
    +
    void createPenTool()
    -
    void mousePressEvent(QMouseEvent *event) override
    +
    void mousePressEvent(QMouseEvent *event) override
    - -
    The IntelliToolRectangle class represents a tool to draw a rectangle.
    -
    void createLineTool()
    +
    int alpha
    alpha - Stores the alpha value of the layer (default=255).
    Definition: PaintingArea.h:47
    +
    The IntelliToolRectangle class represents a tool to draw a rectangle.
    +
    void createLineTool()
    -
    The IntelliToolPen class represents a tool to draw a line.
    -
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    +
    The IntelliToolPen class represents a tool to draw a line.
    +
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    +
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:96
    -
    IntelliImage::ImageType getTypeOfImageRealLayer()
    - +
    IntelliImage::ImageType getTypeOfImageRealLayer()
    +
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    bool isFastRenderering()
    The getfastRenderer gets the value of the flag for the fastRenderer setting.
    ~PaintingArea() override
    This deconstructor is used to clear up the memory and remove the currently active window.
    -
    void mouseMoveEvent(QMouseEvent *event) override
    -
    int getNumberOfActiveLayer()
    -
    void setFirstColor(QColor Color)
    A function to set the primary color.
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    +
    void mouseMoveEvent(QMouseEvent *event) override
    +
    int getNumberOfActiveLayer()
    +
    void setFirstColor(QColor Color)
    A function to set the primary color.
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    void slotDeleteActiveLayer()
    The slotDeleteActiveLayer method handles the deletion of the active layer.
    +
    void slotDeleteActiveLayer()
    The slotDeleteActiveLayer method handles the deletion of the active layer.
    void setToolWidth(int value)
    -
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    -
    void createPolygonTool()
    -
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    -
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:182
    +
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    +
    void createPolygonTool()
    +
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    +
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:202
    PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
    PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
    bool getIsDrawing()
    -
    QColor getFirstColor()
    A function to read the primary selected color.
    - -
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    -
    void createFloodFillTool()
    -
    void slotActivateLayer(int a)
    The slotActivateLayer method handles the event of selecting one layer as active.
    -
    void paintEvent(QPaintEvent *event) override
    +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    +
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    +
    void createFloodFillTool()
    +
    void slotActivateLayer(int a)
    The slotActivateLayer method handles the event of selecting one layer as active.
    +
    void paintEvent(QPaintEvent *event) override
    void setFastRendering(bool Updatedsetting)
    setFastRendering sets fastRendering to Updatedsetting.
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual bool loadImage(const QString &filePath)
    A function that loads and sclaes an image to the fitting dimensions.
    -
    std::vector< QPoint > getPolygonDataOfRealLayer()
    -
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:181
    -
    void resizeEvent(QResizeEvent *event) override
    -
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    +
    std::vector< QPoint > getPolygonDataOfRealLayer()
    +
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:201
    +
    void resizeEvent(QResizeEvent *event) override
    +
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    -
    void swapColors()
    A function switching primary and secondary color.
    -
    The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
    -
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    +
    void swapColors()
    A function switching primary and secondary color.
    +
    The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
    +
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    -
    The IntelliToolCircle class represents a tool to draw a circle.
    -
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    +
    The IntelliToolCircle class represents a tool to draw a circle.
    +
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    -
    The IntelliToolPolygon managed the Drawing of Polygonforms.
    +
    The IntelliToolPolygon managed the Drawing of Polygonforms.
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    -
    The IntelliRasterImage manages a RASTERIMAGE.
    +
    The IntelliRasterImage manages a RASTERIMAGE.
    -
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    -
    ImageType
    The Types, which an Image can be.
    Definition: IntelliImage.h:26
    +
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    +
    ImageType
    The Types, which an Image can be.
    Definition: IntelliImage.h:30
    -
    The IntelliToolFloodFill class represents a tool to draw a line.
    +
    The IntelliToolFloodFill class represents a tool to draw a line.
    -
    int getWidthOfActive()
    The getWidthOfActive gets the horizontal dimensions of the active layer.
    -
    void createCircleTool()
    +
    int getWidthOfActive()
    The getWidthOfActive gets the horizontal dimensions of the active layer.
    +
    void createCircleTool()
    void setRenderSettings(bool isFastRenderingOn)
    setRenderSettings updates all Images to the new Rendersetting.
    -
    IntelliImage * getImageOfActiveLayer()
    -
    void mouseReleaseEvent(QMouseEvent *event) override
    -
    void createRectangleTool()
    +
    IntelliImage * getImageOfActiveLayer()
    +
    void mouseReleaseEvent(QMouseEvent *event) override
    +
    void createRectangleTool()
    - + -
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    -
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    - -
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    - - -
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    -
    int heightOffset
    Definition: PaintingArea.h:30
    -
    int getHeightOfActive()
    The getHeightOfActive gets the vertical dimensions of the active layer.
    -
    void createPlainTool()
    -
    void wheelEvent(QWheelEvent *event) override
    -
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:37
    -
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:25
    -
    void createPenTool()
    -
    void mousePressEvent(QMouseEvent *event) override
    +
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    +
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    + +
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    +
    int widthOffset
    widthOffset - Stores the number of pixles from the left side of the painting area.
    Definition: PaintingArea.h:39
    + +
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    int heightOffset
    heightOffset - Stores the number of pixles from the top of the painting area.
    Definition: PaintingArea.h:43
    +
    int getHeightOfActive()
    The getHeightOfActive gets the vertical dimensions of the active layer.
    +
    void createPlainTool()
    +
    void wheelEvent(QWheelEvent *event) override
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:23
    +
    void createPenTool()
    +
    void mousePressEvent(QMouseEvent *event) override
    - -
    void createLineTool()
    -
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    -
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    +
    int alpha
    alpha - Stores the alpha value of the layer (default=255).
    Definition: PaintingArea.h:47
    +
    void createLineTool()
    +
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    +
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer...
    -
    IntelliImage::ImageType getTypeOfImageRealLayer()
    - +
    IntelliImage::ImageType getTypeOfImageRealLayer()
    +
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    ~PaintingArea() override
    This deconstructor is used to clear up the memory and remove the currently active window.
    -
    void mouseMoveEvent(QMouseEvent *event) override
    +
    void mouseMoveEvent(QMouseEvent *event) override
    -
    int getNumberOfActiveLayer()
    -
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:14
    -
    void slotDeleteActiveLayer()
    The slotDeleteActiveLayer method handles the deletion of the active layer.
    -
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    -
    void createPolygonTool()
    -
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    -
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:182
    +
    int getNumberOfActiveLayer()
    +
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    +
    void slotDeleteActiveLayer()
    The slotDeleteActiveLayer method handles the deletion of the active layer.
    +
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    +
    void createPolygonTool()
    +
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    +
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:202
    PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
    PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
    - -
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    -
    void createFloodFillTool()
    -
    void slotActivateLayer(int a)
    The slotActivateLayer method handles the event of selecting one layer as active.
    -
    The IntelliColorPicker manages the selected colors for one whole project.
    -
    void paintEvent(QPaintEvent *event) override
    +
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    +
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    +
    void createFloodFillTool()
    +
    void slotActivateLayer(int a)
    The slotActivateLayer method handles the event of selecting one layer as active.
    +
    The IntelliColorPicker manages the selected colors for one whole project.
    +
    void paintEvent(QPaintEvent *event) override
    -
    IntelliImage * image
    Definition: PaintingArea.h:26
    -
    std::vector< QPoint > getPolygonDataOfRealLayer()
    -
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:181
    -
    void resizeEvent(QResizeEvent *event) override
    -
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    -
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    -
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    -
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:19
    - -
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    -
    ImageType
    The Types, which an Image can be.
    Definition: IntelliImage.h:26
    + +
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    +
    std::vector< QPoint > getPolygonDataOfRealLayer()
    +
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:201
    +
    void resizeEvent(QResizeEvent *event) override
    +
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    +
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    +
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    +
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    + +
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    +
    ImageType
    The Types, which an Image can be.
    Definition: IntelliImage.h:30
    diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js index 0bd7c03..e7e6e6e 100644 --- a/docs/html/annotated_dup.js +++ b/docs/html/annotated_dup.js @@ -18,5 +18,6 @@ var annotated_dup = [ "IntelliToolsettings", "class_intelli_toolsettings.html", "class_intelli_toolsettings" ], [ "LayerObject", "struct_layer_object.html", "struct_layer_object" ], [ "PaintingArea", "class_painting_area.html", "class_painting_area" ], - [ "Triangle", "struct_triangle.html", "struct_triangle" ] + [ "Triangle", "struct_triangle.html", "struct_triangle" ], + [ "UnitTest", "class_unit_test.html", "class_unit_test" ] ]; \ No newline at end of file diff --git a/docs/html/class_intelli_color_picker.html b/docs/html/class_intelli_color_picker.html index 393deac..9eac72c 100644 --- a/docs/html/class_intelli_color_picker.html +++ b/docs/html/class_intelli_color_picker.html @@ -122,7 +122,7 @@ Public Member Functions

    Detailed Description

    The IntelliColorPicker manages the selected colors for one whole project.

    -

    Definition at line 11 of file IntelliColorPicker.h.

    +

    Definition at line 14 of file IntelliColorPicker.h.

    Constructor & Destructor Documentation

    ◆ IntelliColorPicker()

    @@ -141,7 +141,7 @@ Public Member Functions

    IntelliColorPicker constructor, setting 2 preset colors, be careful, theese color may change in production.

    -

    Definition at line 3 of file IntelliColorPicker.cpp.

    +

    Definition at line 3 of file IntelliColorPicker.cpp.

    @@ -170,7 +170,7 @@ Public Member Functions

    IntelliColorPicker destructor clears up his used memory, if there is some.

    -

    Definition at line 8 of file IntelliColorPicker.cpp.

    +

    Definition at line 8 of file IntelliColorPicker.cpp.

    @@ -193,7 +193,7 @@ Public Member Functions

    A function to read the primary selected color.

    Returns
    Returns the primary color.
    -

    Definition at line 16 of file IntelliColorPicker.cpp.

    +

    Definition at line 16 of file IntelliColorPicker.cpp.

    @@ -215,7 +215,7 @@ Public Member Functions

    A function to read the secondary selected color.

    Returns
    Returns the secondary color.
    -

    Definition at line 20 of file IntelliColorPicker.cpp.

    +

    Definition at line 20 of file IntelliColorPicker.cpp.

    @@ -243,7 +243,7 @@ Public Member Functions -

    Definition at line 24 of file IntelliColorPicker.cpp.

    +

    Definition at line 24 of file IntelliColorPicker.cpp.

    @@ -271,7 +271,7 @@ Public Member Functions -

    Definition at line 28 of file IntelliColorPicker.cpp.

    +

    Definition at line 28 of file IntelliColorPicker.cpp.

    @@ -292,13 +292,13 @@ Public Member Functions

    A function switching primary and secondary color.

    -

    Definition at line 12 of file IntelliColorPicker.cpp.

    +

    Definition at line 12 of file IntelliColorPicker.cpp.


    The documentation for this class was generated from the following files: diff --git a/docs/html/class_intelli_image.html b/docs/html/class_intelli_image.html index 594de07..66a4383 100644 --- a/docs/html/class_intelli_image.html +++ b/docs/html/class_intelli_image.html @@ -128,10 +128,10 @@ Public Member Functions  A funtcion used to draw a pixel on the Image with the given Color. More...
      virtual void drawLine (const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth) - A function that draws A Line between two given Points in a given color. More...
    + A function that draws a line between two given points in a given color. More...
      virtual void drawPoint (const QPoint &p1, const QColor &color, const int &penWidth) - A. More...
    + A function that draws a point between on a given point in a given color. More...
      virtual void drawPlain (const QColor &color)  A function that clears the whole image in a given Color. More...
    @@ -192,7 +192,7 @@ Protected Attributes

    Detailed Description

    An abstract class which manages the basic IntelliImage operations.

    -

    Definition at line 19 of file IntelliImage.h.

    +

    Definition at line 22 of file IntelliImage.h.

    Member Enumeration Documentation

    ◆ ImageType

    @@ -220,7 +220,7 @@ Protected Attributes SHAPEDIMAGE  -

    Definition at line 26 of file IntelliImage.h.

    +

    Definition at line 30 of file IntelliImage.h.

    @@ -376,7 +376,7 @@ Protected Attributes
    -

    A function that draws A Line between two given Points in a given color.

    +

    A function that draws a line between two given points in a given color.

    Parameters
    @@ -387,7 +387,7 @@ Protected Attributes -

    Definition at line 90 of file IntelliImage.cpp.

    +

    Definition at line 96 of file IntelliImage.cpp.

    @@ -470,7 +470,7 @@ Protected Attributes -

    Definition at line 107 of file IntelliImage.cpp.

    +

    Definition at line 116 of file IntelliImage.cpp.

    @@ -514,17 +514,17 @@ Protected Attributes
    p1- The coordinates of the first Point.
    -

    A.

    +

    A function that draws a point between on a given point in a given color.

    Parameters
    - - - + + +
    p1
    color
    penWidth
    p1- The coordinates of the first Point.
    color- The color of the point.
    penWidth- The size of the point.
    -

    Definition at line 74 of file IntelliImage.cpp.

    +

    Definition at line 77 of file IntelliImage.cpp.

    @@ -668,7 +668,7 @@ Protected Attributes

    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!).

    -

    Definition at line 125 of file IntelliImage.cpp.

    +

    Definition at line 134 of file IntelliImage.cpp.

    @@ -705,7 +705,7 @@ Protected Attributes
    Returns
    The color of the Pixel as QColor.
    -

    Definition at line 117 of file IntelliImage.cpp.

    +

    Definition at line 126 of file IntelliImage.cpp.

    @@ -737,7 +737,7 @@ Protected Attributes

    Reimplemented in IntelliShapedImage.

    -

    Definition at line 130 of file IntelliImage.h.

    +

    Definition at line 134 of file IntelliImage.h.

    @@ -764,7 +764,7 @@ Protected Attributes
    -

    Definition at line 134 of file IntelliImage.h.

    +

    Definition at line 138 of file IntelliImage.h.

    @@ -875,7 +875,7 @@ Protected Attributes -

    Definition at line 133 of file IntelliImage.cpp.

    +

    Definition at line 142 of file IntelliImage.cpp.

    @@ -947,7 +947,7 @@ Protected Attributes -

    Definition at line 143 of file IntelliImage.cpp.

    +

    Definition at line 152 of file IntelliImage.cpp.

    @@ -974,7 +974,7 @@ Protected Attributes

    fastRendering is the flag that represents the usage of 8bit pictures.

    -

    Definition at line 47 of file IntelliImage.h.

    +

    Definition at line 51 of file IntelliImage.h.

    @@ -1000,7 +1000,7 @@ Protected Attributes

    The underlying image data.

    -

    Definition at line 37 of file IntelliImage.h.

    +

    Definition at line 41 of file IntelliImage.h.

    @@ -1026,7 +1026,7 @@ Protected Attributes

    The Type, an Image is.

    -

    Definition at line 42 of file IntelliImage.h.

    +

    Definition at line 46 of file IntelliImage.h.

    diff --git a/docs/html/class_intelli_photo_gui.html b/docs/html/class_intelli_photo_gui.html index f0f2685..d0f4eab 100644 --- a/docs/html/class_intelli_photo_gui.html +++ b/docs/html/class_intelli_photo_gui.html @@ -121,7 +121,7 @@ Protected Member Functions

    Detailed Description

    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program.

    -

    Definition at line 27 of file IntelliPhotoGui.h.

    +

    Definition at line 28 of file IntelliPhotoGui.h.

    Constructor & Destructor Documentation

    ◆ IntelliPhotoGui()

    diff --git a/docs/html/class_intelli_raster_image.html b/docs/html/class_intelli_raster_image.html index 6c7699b..c33fd64 100644 --- a/docs/html/class_intelli_raster_image.html +++ b/docs/html/class_intelli_raster_image.html @@ -137,10 +137,10 @@ Public Member Functions  A funtcion used to draw a pixel on the Image with the given Color. More...
      virtual void drawLine (const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth) - A function that draws A Line between two given Points in a given color. More...
    + A function that draws a line between two given points in a given color. More...
      virtual void drawPoint (const QPoint &p1, const QColor &color, const int &penWidth) - A. More...
    + A function that draws a point between on a given point in a given color. More...
      virtual void drawPlain (const QColor &color)  A function that clears the whole image in a given Color. More...
    @@ -197,7 +197,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliRasterImage manages a RASTERIMAGE.

    -

    Definition at line 9 of file IntelliRasterImage.h.

    +

    Definition at line 12 of file IntelliRasterImage.h.

    Constructor & Destructor Documentation

    ◆ IntelliRasterImage()

    diff --git a/docs/html/class_intelli_render_settings.html b/docs/html/class_intelli_render_settings.html index 0f69132..d0d1d39 100644 --- a/docs/html/class_intelli_render_settings.html +++ b/docs/html/class_intelli_render_settings.html @@ -105,7 +105,7 @@ Public Member Functions

    Detailed Description

    -

    Definition at line 5 of file IntelliRenderSettings.h.

    +

    Definition at line 8 of file IntelliRenderSettings.h.

    Constructor & Destructor Documentation

    ◆ IntelliRenderSettings()

    diff --git a/docs/html/class_intelli_shaped_image.html b/docs/html/class_intelli_shaped_image.html index 43f1d4a..c2857a4 100644 --- a/docs/html/class_intelli_shaped_image.html +++ b/docs/html/class_intelli_shaped_image.html @@ -147,10 +147,10 @@ Public Member Functions  A funtcion used to draw a pixel on the Image with the given Color. More...
      virtual void drawLine (const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth) - A function that draws A Line between two given Points in a given color. More...
    + A function that draws a line between two given points in a given color. More...
      virtual void drawPoint (const QPoint &p1, const QColor &color, const int &penWidth) - A. More...
    + A function that draws a point between on a given point in a given color. More...
      virtual void drawPlain (const QColor &color)  A function that clears the whole image in a given Color. More...
    @@ -204,7 +204,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliShapedImage manages a Shapedimage.

    -

    Definition at line 10 of file IntelliShapedImage.h.

    +

    Definition at line 13 of file IntelliShapedImage.h.

    Constructor & Destructor Documentation

    ◆ IntelliShapedImage()

    @@ -431,7 +431,7 @@ Additional Inherited Members

    Reimplemented from IntelliImage.

    -

    Definition at line 67 of file IntelliShapedImage.h.

    +

    Definition at line 71 of file IntelliShapedImage.h.

    @@ -496,7 +496,7 @@ Additional Inherited Members

    The Vertices of The Polygon. Needs to be a planar Polygon.

    -

    Definition at line 27 of file IntelliShapedImage.h.

    +

    Definition at line 31 of file IntelliShapedImage.h.

    diff --git a/docs/html/class_intelli_tool.html b/docs/html/class_intelli_tool.html index 287a8cd..f53b14d 100644 --- a/docs/html/class_intelli_tool.html +++ b/docs/html/class_intelli_tool.html @@ -183,7 +183,7 @@ Protected Attributes

    Detailed Description

    An abstract class that manages the basic events, like mouse clicks or scrolls events.

    -

    Definition at line 14 of file IntelliTool.h.

    +

    Definition at line 17 of file IntelliTool.h.

    Member Enumeration Documentation

    ◆ Tooltype

    @@ -214,7 +214,7 @@ Protected Attributes RECTANGLE  -

    Definition at line 16 of file IntelliTool.h.

    +

    Definition at line 20 of file IntelliTool.h.

    @@ -638,7 +638,7 @@ Protected Attributes

    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews.

    -

    Definition at line 59 of file IntelliTool.h.

    +

    Definition at line 63 of file IntelliTool.h.

    @@ -662,7 +662,7 @@ Protected Attributes
    -

    Definition at line 47 of file IntelliTool.h.

    +

    Definition at line 51 of file IntelliTool.h.

    @@ -688,7 +688,7 @@ Protected Attributes

    A pointer to the general PaintingArea to interact with.

    -

    Definition at line 45 of file IntelliTool.h.

    +

    Definition at line 49 of file IntelliTool.h.

    @@ -714,7 +714,7 @@ Protected Attributes

    A pointer to the drawing canvas of the tool, work on this.

    -

    Definition at line 64 of file IntelliTool.h.

    +

    Definition at line 68 of file IntelliTool.h.

    @@ -740,7 +740,7 @@ Protected Attributes

    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.

    -

    Definition at line 52 of file IntelliTool.h.

    +

    Definition at line 56 of file IntelliTool.h.

    @@ -766,7 +766,7 @@ Protected Attributes

    A flag checking if the user is currently drawing or not.

    -

    Definition at line 69 of file IntelliTool.h.

    +

    Definition at line 73 of file IntelliTool.h.

    @@ -790,7 +790,7 @@ Protected Attributes
    -

    Definition at line 54 of file IntelliTool.h.

    +

    Definition at line 58 of file IntelliTool.h.

    diff --git a/docs/html/class_intelli_tool_circle.html b/docs/html/class_intelli_tool_circle.html index ac2bf56..252908e 100644 --- a/docs/html/class_intelli_tool_circle.html +++ b/docs/html/class_intelli_tool_circle.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolCircle class represents a tool to draw a circle.

    -

    Definition at line 10 of file IntelliToolCircle.h.

    +

    Definition at line 14 of file IntelliToolCircle.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolCircle()

    diff --git a/docs/html/class_intelli_tool_flood_fill.html b/docs/html/class_intelli_tool_flood_fill.html index 2a2dc9e..c376724 100644 --- a/docs/html/class_intelli_tool_flood_fill.html +++ b/docs/html/class_intelli_tool_flood_fill.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolFloodFill class represents a tool to flood FIll a certian area.

    -

    Definition at line 10 of file IntelliToolFloodFill.h.

    +

    Definition at line 14 of file IntelliToolFloodFill.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolFloodFill()

    @@ -352,7 +352,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 69 of file IntelliToolFloodFill.cpp.

    +

    Definition at line 72 of file IntelliToolFloodFill.cpp.

    @@ -401,7 +401,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 78 of file IntelliToolFloodFill.cpp.

    +

    Definition at line 81 of file IntelliToolFloodFill.cpp.

    @@ -537,7 +537,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 73 of file IntelliToolFloodFill.cpp.

    +

    Definition at line 76 of file IntelliToolFloodFill.cpp.

    diff --git a/docs/html/class_intelli_tool_line.html b/docs/html/class_intelli_tool_line.html index a6e71fb..fbe600e 100644 --- a/docs/html/class_intelli_tool_line.html +++ b/docs/html/class_intelli_tool_line.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolFloodFill class represents a tool to draw a line.

    -

    Definition at line 10 of file IntelliToolLine.h.

    +

    Definition at line 13 of file IntelliToolLine.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolLine()

    diff --git a/docs/html/class_intelli_tool_pen.html b/docs/html/class_intelli_tool_pen.html index c80262c..8e58a78 100644 --- a/docs/html/class_intelli_tool_pen.html +++ b/docs/html/class_intelli_tool_pen.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolPen class represents a tool to draw a line.

    -

    Definition at line 11 of file IntelliToolPen.h.

    +

    Definition at line 14 of file IntelliToolPen.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolPen()

    diff --git a/docs/html/class_intelli_tool_plain_tool.html b/docs/html/class_intelli_tool_plain_tool.html index d095921..1e74cd8 100644 --- a/docs/html/class_intelli_tool_plain_tool.html +++ b/docs/html/class_intelli_tool_plain_tool.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.

    -

    Definition at line 9 of file IntelliToolPlain.h.

    +

    Definition at line 13 of file IntelliToolPlain.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolPlainTool()

    diff --git a/docs/html/class_intelli_tool_polygon-members.html b/docs/html/class_intelli_tool_polygon-members.html index 6240740..9741c30 100644 --- a/docs/html/class_intelli_tool_polygon-members.html +++ b/docs/html/class_intelli_tool_polygon-members.html @@ -98,16 +98,17 @@ $(document).ready(function(){initNavTree('class_intelli_tool_polygon.html',''); getTooltype()IntelliTool IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)IntelliTool IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)IntelliToolPolygon - onMouseLeftPressed(int x, int y) overrideIntelliToolPolygonvirtual - onMouseLeftReleased(int x, int y) overrideIntelliToolPolygonvirtual - onMouseMoved(int x, int y) overrideIntelliToolPolygonvirtual - onMouseRightPressed(int x, int y) overrideIntelliToolPolygonvirtual - onMouseRightReleased(int x, int y) overrideIntelliToolPolygonvirtual - onWheelScrolled(int value) overrideIntelliToolPolygonvirtual - ToolsettingsIntelliToolprotected - Tooltype enum nameIntelliTool - ~IntelliTool()=0IntelliToolpure virtual - ~IntelliToolPolygon() overrideIntelliToolPolygon + isDrawingIntelliToolprotected + onMouseLeftPressed(int x, int y) overrideIntelliToolPolygonvirtual + onMouseLeftReleased(int x, int y) overrideIntelliToolPolygonvirtual + onMouseMoved(int x, int y) overrideIntelliToolPolygonvirtual + onMouseRightPressed(int x, int y) overrideIntelliToolPolygonvirtual + onMouseRightReleased(int x, int y) overrideIntelliToolPolygonvirtual + onWheelScrolled(int value) overrideIntelliToolPolygonvirtual + ToolsettingsIntelliToolprotected + Tooltype enum nameIntelliTool + ~IntelliTool()=0IntelliToolpure virtual + ~IntelliToolPolygon() overrideIntelliToolPolygon diff --git a/docs/html/class_intelli_tool_polygon.html b/docs/html/class_intelli_tool_polygon.html index cc8857a..ac3ad17 100644 --- a/docs/html/class_intelli_tool_polygon.html +++ b/docs/html/class_intelli_tool_polygon.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolPolygon managed the Drawing of Polygonforms.

    -

    Definition at line 11 of file IntelliToolPolygon.h.

    +

    Definition at line 15 of file IntelliToolPolygon.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolPolygon()

    @@ -359,7 +359,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 89 of file IntelliToolPolygon.cpp.

    +

    Definition at line 90 of file IntelliToolPolygon.cpp.

    @@ -408,7 +408,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 135 of file IntelliToolPolygon.cpp.

    +

    Definition at line 136 of file IntelliToolPolygon.cpp.

    @@ -457,7 +457,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 81 of file IntelliToolPolygon.cpp.

    +

    Definition at line 82 of file IntelliToolPolygon.cpp.

    @@ -506,7 +506,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 122 of file IntelliToolPolygon.cpp.

    +

    Definition at line 123 of file IntelliToolPolygon.cpp.

    @@ -544,7 +544,7 @@ Additional Inherited Members

    Reimplemented from IntelliTool.

    -

    Definition at line 126 of file IntelliToolPolygon.cpp.

    +

    Definition at line 127 of file IntelliToolPolygon.cpp.

    diff --git a/docs/html/class_intelli_tool_rectangle.html b/docs/html/class_intelli_tool_rectangle.html index eb9d4b3..ef936c6 100644 --- a/docs/html/class_intelli_tool_rectangle.html +++ b/docs/html/class_intelli_tool_rectangle.html @@ -181,7 +181,7 @@ Additional Inherited Members

    Detailed Description

    The IntelliToolRectangle class represents a tool to draw a rectangle.

    -

    Definition at line 11 of file IntelliToolRectangle.h.

    +

    Definition at line 15 of file IntelliToolRectangle.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolRectangle()

    diff --git a/docs/html/class_intelli_toolsettings.html b/docs/html/class_intelli_toolsettings.html index e73d85c..2dd77e8 100644 --- a/docs/html/class_intelli_toolsettings.html +++ b/docs/html/class_intelli_toolsettings.html @@ -109,7 +109,7 @@ Public Member Functions

    Detailed Description

    -

    Definition at line 4 of file IntelliToolsettings.h.

    +

    Definition at line 7 of file IntelliToolsettings.h.

    Constructor & Destructor Documentation

    ◆ IntelliToolsettings()

    diff --git a/docs/html/class_painting_area.html b/docs/html/class_painting_area.html index b1ac146..726411a 100644 --- a/docs/html/class_painting_area.html +++ b/docs/html/class_painting_area.html @@ -224,7 +224,7 @@ Protected Member Functions

    Detailed Description

    The PaintingArea class manages the methods and stores information about the current painting area, which is the currently opened project.

    -

    Definition at line 37 of file PaintingArea.h.

    +

    Definition at line 53 of file PaintingArea.h.

    Constructor & Destructor Documentation

    ◆ PaintingArea()

    @@ -359,7 +359,7 @@ Protected Member Functions
    Returns
    Returns the number of layers in the project
    -

    Definition at line 54 of file PaintingArea.cpp.

    +

    Definition at line 62 of file PaintingArea.cpp.

    @@ -446,7 +446,7 @@ Protected Member Functions

    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.

    -

    Definition at line 177 of file PaintingArea.cpp.

    +

    Definition at line 187 of file PaintingArea.cpp.

    @@ -467,7 +467,7 @@ Protected Member Functions

    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.

    -

    Definition at line 182 of file PaintingArea.cpp.

    +

    Definition at line 192 of file PaintingArea.cpp.

    @@ -488,7 +488,7 @@ Protected Member Functions

    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.

    -

    Definition at line 187 of file PaintingArea.cpp.

    +

    Definition at line 197 of file PaintingArea.cpp.

    @@ -507,7 +507,7 @@ Protected Member Functions
    -

    Definition at line 211 of file PaintingArea.cpp.

    +

    Definition at line 221 of file PaintingArea.cpp.

    @@ -526,7 +526,7 @@ Protected Member Functions
    -

    Definition at line 220 of file PaintingArea.cpp.

    +

    Definition at line 230 of file PaintingArea.cpp.

    @@ -545,7 +545,7 @@ Protected Member Functions
    -

    Definition at line 201 of file PaintingArea.cpp.

    +

    Definition at line 211 of file PaintingArea.cpp.

    @@ -564,7 +564,7 @@ Protected Member Functions
    -

    Definition at line 191 of file PaintingArea.cpp.

    +

    Definition at line 201 of file PaintingArea.cpp.

    @@ -583,7 +583,7 @@ Protected Member Functions
    -

    Definition at line 196 of file PaintingArea.cpp.

    +

    Definition at line 206 of file PaintingArea.cpp.

    @@ -602,7 +602,7 @@ Protected Member Functions
    -

    Definition at line 215 of file PaintingArea.cpp.

    +

    Definition at line 225 of file PaintingArea.cpp.

    @@ -621,7 +621,7 @@ Protected Member Functions
    -

    Definition at line 206 of file PaintingArea.cpp.

    +

    Definition at line 216 of file PaintingArea.cpp.

    @@ -660,7 +660,7 @@ Protected Member Functions -

    Definition at line 73 of file PaintingArea.cpp.

    +

    Definition at line 81 of file PaintingArea.cpp.

    @@ -682,7 +682,7 @@ Protected Member Functions

    The getHeightOfActive gets the vertical dimensions of the active layer.

    Returns
    Returns the vertical pixle count of the active layer
    -

    Definition at line 229 of file PaintingArea.cpp.

    +

    Definition at line 239 of file PaintingArea.cpp.

    @@ -704,7 +704,7 @@ Protected Member Functions

    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer it return a 10*10 white picture)

    Returns
    return the image as an rgba32bit qImage
    -

    Definition at line 424 of file PaintingArea.cpp.

    +

    Definition at line 434 of file PaintingArea.cpp.

    @@ -723,7 +723,7 @@ Protected Member Functions
    -

    Definition at line 417 of file PaintingArea.cpp.

    +

    Definition at line 427 of file PaintingArea.cpp.

    @@ -742,7 +742,7 @@ Protected Member Functions
    -

    Definition at line 237 of file PaintingArea.cpp.

    +

    Definition at line 247 of file PaintingArea.cpp.

    @@ -761,7 +761,7 @@ Protected Member Functions
    -

    Definition at line 233 of file PaintingArea.cpp.

    +

    Definition at line 243 of file PaintingArea.cpp.

    @@ -780,7 +780,7 @@ Protected Member Functions
    -

    Definition at line 413 of file PaintingArea.cpp.

    +

    Definition at line 423 of file PaintingArea.cpp.

    @@ -799,7 +799,7 @@ Protected Member Functions
    -

    Definition at line 245 of file PaintingArea.cpp.

    +

    Definition at line 255 of file PaintingArea.cpp.

    @@ -818,7 +818,7 @@ Protected Member Functions
    -

    Definition at line 241 of file PaintingArea.cpp.

    +

    Definition at line 251 of file PaintingArea.cpp.

    @@ -840,7 +840,7 @@ Protected Member Functions

    The getWidthOfActive gets the horizontal dimensions of the active layer.

    Returns
    Returns the horizontal pixle count of the active layer
    -

    Definition at line 225 of file PaintingArea.cpp.

    +

    Definition at line 235 of file PaintingArea.cpp.

    @@ -868,7 +868,7 @@ Protected Member Functions
    -

    Definition at line 271 of file PaintingArea.cpp.

    +

    Definition at line 281 of file PaintingArea.cpp.

    @@ -896,7 +896,7 @@ Protected Member Functions
    -

    Definition at line 252 of file PaintingArea.cpp.

    +

    Definition at line 262 of file PaintingArea.cpp.

    @@ -924,7 +924,7 @@ Protected Member Functions
    -

    Definition at line 284 of file PaintingArea.cpp.

    +

    Definition at line 294 of file PaintingArea.cpp.

    @@ -952,7 +952,7 @@ Protected Member Functions -

    Definition at line 160 of file PaintingArea.cpp.

    +

    Definition at line 170 of file PaintingArea.cpp.

    @@ -991,7 +991,7 @@ Protected Member Functions -

    Definition at line 154 of file PaintingArea.cpp.

    +

    Definition at line 164 of file PaintingArea.cpp.

    @@ -1014,13 +1014,13 @@ Protected Member Functions

    The open method is used for loading a picture into the current layer.

    Parameters
    - +
    fileName- Path and filename which are used to determine where the to-be-opened file is stored
    filePath- Path and Name which are used to determine where the to-be-opened file is stored.
    -
    Returns
    Returns a boolean variable whether the file was successfully opened or not
    +
    Returns
    Returns a boolean variable whether the file was successfully opened or not.
    -

    Definition at line 119 of file PaintingArea.cpp.

    +

    Definition at line 129 of file PaintingArea.cpp.

    @@ -1048,7 +1048,7 @@ Protected Member Functions
    -

    Definition at line 314 of file PaintingArea.cpp.

    +

    Definition at line 324 of file PaintingArea.cpp.

    @@ -1076,7 +1076,7 @@ Protected Member Functions
    -

    Definition at line 325 of file PaintingArea.cpp.

    +

    Definition at line 335 of file PaintingArea.cpp.

    @@ -1109,14 +1109,14 @@ Protected Member Functions

    The save method is used for exporting the current project as one picture.

    Parameters
    - - + +
    fileName
    fileFormat
    filePath- Specifies the path and name of the file to create.
    fileFormat- Specifies the format of the file to create.
    Returns
    Returns a boolean variable, true if the file was saved successfully, false if not
    -

    Definition at line 131 of file PaintingArea.cpp.

    +

    Definition at line 141 of file PaintingArea.cpp.

    @@ -1144,7 +1144,7 @@ Protected Member Functions -

    Definition at line 95 of file PaintingArea.cpp.

    +

    Definition at line 103 of file PaintingArea.cpp.

    @@ -1183,7 +1183,7 @@ Protected Member Functions -

    Definition at line 102 of file PaintingArea.cpp.

    +

    Definition at line 110 of file PaintingArea.cpp.

    @@ -1211,7 +1211,7 @@ Protected Member Functions -

    Definition at line 107 of file PaintingArea.cpp.

    +

    Definition at line 117 of file PaintingArea.cpp.

    @@ -1275,7 +1275,7 @@ Protected Member Functions -

    Definition at line 170 of file PaintingArea.cpp.

    +

    Definition at line 180 of file PaintingArea.cpp.

    @@ -1304,7 +1304,7 @@ Protected Member Functions

    The slotDeleteActiveLayer method handles the deletion of the active layer.

    -

    Definition at line 88 of file PaintingArea.cpp.

    +

    Definition at line 96 of file PaintingArea.cpp.

    @@ -1332,7 +1332,7 @@ Protected Member Functions
    -

    Definition at line 299 of file PaintingArea.cpp.

    +

    Definition at line 309 of file PaintingArea.cpp.

    @@ -1349,7 +1349,7 @@ Protected Member Functions
    -

    Definition at line 182 of file PaintingArea.h.

    +

    Definition at line 202 of file PaintingArea.h.

    @@ -1365,7 +1365,7 @@ Protected Member Functions
    -

    Definition at line 181 of file PaintingArea.h.

    +

    Definition at line 201 of file PaintingArea.h.

    diff --git a/docs/html/class_unit_test-members.html b/docs/html/class_unit_test-members.html new file mode 100644 index 0000000..4a3dd58 --- /dev/null +++ b/docs/html/class_unit_test-members.html @@ -0,0 +1,107 @@ + + + + + + + +IntelliPhoto: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    UnitTest Member List
    +
    +
    + +

    This is the complete list of members for UnitTest, including all inherited members.

    + + + + + +
    UnitTest()UnitTest
    UnitTest()UnitTest
    ~UnitTest()UnitTest
    ~UnitTest()UnitTest
    +
    + + + + diff --git a/docs/html/class_unit_test.html b/docs/html/class_unit_test.html new file mode 100644 index 0000000..838fb6f --- /dev/null +++ b/docs/html/class_unit_test.html @@ -0,0 +1,202 @@ + + + + + + + +IntelliPhoto: UnitTest Class Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    UnitTest Class Reference
    +
    +
    +
    +Inheritance diagram for UnitTest:
    +
    +
    + +
    + + + + + + + + + + +

    +Public Member Functions

     UnitTest ()
     
     ~UnitTest ()
     
     UnitTest ()
     
     ~UnitTest ()
     
    +

    Detailed Description

    +
    +

    Definition at line 8 of file mainUnitTest.cpp.

    +

    Constructor & Destructor Documentation

    + +

    ◆ UnitTest() [1/2]

    + +
    +
    + + + + + + + +
    UnitTest::UnitTest ()
    +
    + +

    Definition at line 95 of file mainUnitTest.cpp.

    + +
    +
    + +

    ◆ ~UnitTest() [1/2]

    + +
    +
    + + + + + + + +
    UnitTest::~UnitTest ()
    +
    + +

    Definition at line 108 of file mainUnitTest.cpp.

    + +
    +
    + +

    ◆ UnitTest() [2/2]

    + +
    +
    + + + + + + + +
    UnitTest::UnitTest ()
    +
    + +
    +
    + +

    ◆ ~UnitTest() [2/2]

    + +
    +
    + + + + + + + +
    UnitTest::~UnitTest ()
    +
    + +
    +
    +
    The documentation for this class was generated from the following files: +
    +
    + + + + diff --git a/docs/html/class_unit_test.js b/docs/html/class_unit_test.js new file mode 100644 index 0000000..0a29f02 --- /dev/null +++ b/docs/html/class_unit_test.js @@ -0,0 +1,7 @@ +var class_unit_test = +[ + [ "UnitTest", "class_unit_test.html#a67ddaff817b55a624741d32550052f4b", null ], + [ "~UnitTest", "class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf", null ], + [ "UnitTest", "class_unit_test.html#a67ddaff817b55a624741d32550052f4b", null ], + [ "~UnitTest", "class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf", null ] +]; \ No newline at end of file diff --git a/docs/html/class_unit_test.png b/docs/html/class_unit_test.png new file mode 100644 index 0000000000000000000000000000000000000000..452282e27bfcbbb13725921762e30e7c493b73e5 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^)<7Jcge?*lw@f`KCH?ajp8BvIBMZ#2=rpm9xpOT7C0ujN9qwJFLpq z?^^$Jb58l;Ki|%tIksifq$k1-@!So;<~LG59yY%rT6(zr#`>Q&kqwT%VhKKzStTx~ zFdqBDAL&`t)m@+8&^PaNTSQ%k?Ar5_<~wBm-g4S3eBBM*=$Z*hyI2h095$2wafL5- z@14`t$KtNuNtm469=vDj_k{hMpP5N>t^RIW+jn>Ke%6NXU)&=-KfPq{;!!fH**EJS QFo+mDUHx3vIVCg!055T^6951J literal 0 HcmV?d00001 diff --git a/docs/html/classes.html b/docs/html/classes.html index d1cb6ea..ffab68d 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
    Class Index
    -
    i | l | p | t
    +
    i | l | p | t | u
    @@ -111,19 +111,22 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); }) - + + - + - + +
      i  
    IntelliToolPolygon   
      p  
      u  
    +
    IntelliInputDialog    IntelliToolCircle    IntelliToolRectangle   
    IntelliPhotoGui    IntelliToolFloodFill    IntelliToolsettings    PaintingArea   
    UnitTest   
    -
    i | l | p | t
    +
    i | l | p | t | u
    diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 88b8a1b..86f4e3b 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -104,6 +104,10 @@ Directories Files file  main.cpp [code]   +file  mainUnitTest.cpp [code] +  +file  tst_unittest.cpp [code] diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js index eee6b10..64c14e9 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -5,5 +5,11 @@ var dir_68267d1309a1af8e8297ef4c3efbcdba = [ "IntelliHelper", "dir_8de6078cba2a961961818cf80b28fd4f.html", "dir_8de6078cba2a961961818cf80b28fd4f" ], [ "Layer", "dir_13830bfc3dd6736fe878600c9081919f.html", "dir_13830bfc3dd6736fe878600c9081919f" ], [ "Tool", "dir_858355f3357c73763e566ff49d1e6a7a.html", "dir_858355f3357c73763e566ff49d1e6a7a" ], - [ "main.cpp", "main_8cpp.html", "main_8cpp" ] + [ "main.cpp", "main_8cpp.html", "main_8cpp" ], + [ "mainUnitTest.cpp", "main_unit_test_8cpp.html", [ + [ "UnitTest", "class_unit_test.html", "class_unit_test" ] + ] ], + [ "tst_unittest.cpp", "tst__unittest_8cpp.html", [ + [ "UnitTest", "class_unit_test.html", "class_unit_test" ] + ] ] ]; \ No newline at end of file diff --git a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html index a54757f..b8f1c91 100644 --- a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html +++ b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html @@ -89,8 +89,6 @@ $(document).ready(function(){initNavTree('dir_858355f3357c73763e566ff49d1e6a7a.h - - diff --git a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js index 19d8762..c69fb83 100644 --- a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js +++ b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js @@ -1,6 +1,5 @@ var dir_858355f3357c73763e566ff49d1e6a7a = [ - [ "IntelliColorPicker.cpp", "_tool_2_intelli_color_picker_8cpp.html", null ], [ "IntelliTool.cpp", "_intelli_tool_8cpp.html", null ], [ "IntelliTool.h", "_intelli_tool_8h.html", [ [ "IntelliTool", "class_intelli_tool.html", "class_intelli_tool" ] diff --git a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html index 03da172..03bd1ac 100644 --- a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html +++ b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html @@ -89,7 +89,7 @@ $(document).ready(function(){initNavTree('dir_8de6078cba2a961961818cf80b28fd4f.h

    Files

    file  IntelliColorPicker.cpp [code]
     
    file  IntelliTool.cpp [code]
     
    file  IntelliTool.h [code]
    - + diff --git a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js index b339aad..88cefe4 100644 --- a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js +++ b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.js @@ -1,6 +1,6 @@ var dir_8de6078cba2a961961818cf80b28fd4f = [ - [ "IntelliColorPicker.cpp", "_intelli_helper_2_intelli_color_picker_8cpp.html", null ], + [ "IntelliColorPicker.cpp", "_intelli_color_picker_8cpp.html", null ], [ "IntelliColorPicker.h", "_intelli_color_picker_8h.html", [ [ "IntelliColorPicker", "class_intelli_color_picker.html", "class_intelli_color_picker" ] ] ], diff --git a/docs/html/files.html b/docs/html/files.html index d8be851..987452b 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -102,7 +102,7 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); }); - + @@ -114,24 +114,25 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); }); - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    Files

    file  IntelliColorPicker.cpp [code]
    file  IntelliColorPicker.cpp [code]
     
    file  IntelliColorPicker.h [code]
     
     IntelliShapedImage.cpp
     IntelliShapedImage.h
      IntelliHelper
     IntelliColorPicker.cpp
     IntelliColorPicker.cpp
     IntelliColorPicker.h
     IntelliRenderSettings.cpp
     IntelliRenderSettings.h
     PaintingArea.cpp
     PaintingArea.h
      Tool
     IntelliColorPicker.cpp
     IntelliTool.cpp
     IntelliTool.h
     IntelliToolCircle.cpp
     IntelliToolCircle.h
     IntelliToolFloodFill.cpp
     IntelliToolFloodFill.h
     IntelliToolLine.cpp
     IntelliToolLine.h
     IntelliToolPen.cpp
     IntelliToolPen.h
     IntelliToolPlain.cpp
     IntelliToolPlain.h
     IntelliToolPolygon.cpp
     IntelliToolPolygon.h
     IntelliToolRectangle.cpp
     IntelliToolRectangle.h
     main.cpp
     IntelliTool.cpp
     IntelliTool.h
     IntelliToolCircle.cpp
     IntelliToolCircle.h
     IntelliToolFloodFill.cpp
     IntelliToolFloodFill.h
     IntelliToolLine.cpp
     IntelliToolLine.h
     IntelliToolPen.cpp
     IntelliToolPen.h
     IntelliToolPlain.cpp
     IntelliToolPlain.h
     IntelliToolPolygon.cpp
     IntelliToolPolygon.h
     IntelliToolRectangle.cpp
     IntelliToolRectangle.h
     main.cpp
     mainUnitTest.cpp
     tst_unittest.cpp
    diff --git a/docs/html/functions.html b/docs/html/functions.html index e1c6880..3ddbda5 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -534,6 +534,9 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();

    - u -

      +
    • UnitTest() +: UnitTest +
    • UpdateGui() : IntelliPhotoGui
    • @@ -599,6 +602,9 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
    • ~PaintingArea() : PaintingArea
    • +
    • ~UnitTest() +: UnitTest +
    diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index 5bcfd1c..e16fd3a 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -456,6 +456,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl

    - u -

      +
    • UnitTest() +: UnitTest +
    • UpdateGui() : IntelliPhotoGui
    • @@ -515,6 +518,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
    • ~PaintingArea() : PaintingArea
    • +
    • ~UnitTest() +: UnitTest +
    diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index 76d1bc9..75d499c 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -107,9 +107,11 @@ $(document).ready(function(){initNavTree('hierarchy.html',''); initResizable();  CIntelliInputDialog  CQMainWindow  CIntelliPhotoGuiThe IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program - CQWidget - CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project - CTriangleThe Triangle struct holds the 3 vertices of a triangle + CQObject + CUnitTest + CQWidget + CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project + CTriangleThe Triangle struct holds the 3 vertices of a triangle diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js index 617e7cc..8e6f13d 100644 --- a/docs/html/hierarchy.js +++ b/docs/html/hierarchy.js @@ -24,6 +24,9 @@ var hierarchy = [ "QMainWindow", null, [ [ "IntelliPhotoGui", "class_intelli_photo_gui.html", null ] ] ], + [ "QObject", null, [ + [ "UnitTest", "class_unit_test.html", null ] + ] ], [ "QWidget", null, [ [ "PaintingArea", "class_painting_area.html", null ] ] ], diff --git a/docs/html/main_8cpp_source.html b/docs/html/main_8cpp_source.html index 8a58d0c..49516cf 100644 --- a/docs/html/main_8cpp_source.html +++ b/docs/html/main_8cpp_source.html @@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('main_8cpp_source.html',''); initResiza
    15 }
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    int main(int argc, char *argv[])
    Definition: main.cpp:6
    diff --git a/docs/html/main_unit_test_8cpp.html b/docs/html/main_unit_test_8cpp.html new file mode 100644 index 0000000..b6b374d --- /dev/null +++ b/docs/html/main_unit_test_8cpp.html @@ -0,0 +1,115 @@ + + + + + + + +IntelliPhoto: src/mainUnitTest.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mainUnitTest.cpp File Reference
    +
    +
    +
    #include <QtTest>
    +#include <string>
    +#include "GUI/IntelliPhotoGui.h"
    +#include "tst_unittest.moc"
    +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    class  UnitTest
     
    +
    +
    + + + + diff --git a/docs/html/main_unit_test_8cpp_source.html b/docs/html/main_unit_test_8cpp_source.html new file mode 100644 index 0000000..6ab93b1 --- /dev/null +++ b/docs/html/main_unit_test_8cpp_source.html @@ -0,0 +1,309 @@ + + + + + + + +IntelliPhoto: src/mainUnitTest.cpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mainUnitTest.cpp
    +
    +
    +Go to the documentation of this file.
    1 #include <QtTest>
    +
    2 // add necessary includes here
    +
    3 #include<string>
    +
    4 
    +
    5 #include "GUI/IntelliPhotoGui.h"
    +
    6 
    +
    7 
    +
    8 class UnitTest : public QObject
    +
    9 {
    +
    10  Q_OBJECT
    +
    11 private:
    +
    12  IntelliPhotoGui* gui;
    +
    13  PaintingArea* area;
    +
    14  QApplication* app;
    +
    15 
    +
    16 public:
    +
    17  UnitTest();
    +
    18  ~UnitTest();
    +
    19 
    +
    20 private slots:
    +
    21  void initTestCase();
    +
    22  void cleanupTestCase();
    +
    23  //void test_case1();
    +
    24 
    +
    25  //test painting area
    +
    26  void test_addLayer();
    +
    27  void test_deleteLayer();
    +
    28  void test_setActive();
    +
    29  void test_setAlpha();
    +
    30  void test_floodFill();
    +
    31  void test_moveActive();
    +
    32  void test_setPolygon();
    +
    33  void test_setLayerUp();
    +
    34  void test_setLayerDown();
    +
    35 
    +
    36  void test_createTools();
    +
    37 
    +
    38  //test Raster-Image operations
    +
    39  void test_RasterImage_drawPixel();
    +
    40  void test_RasterImage_drawLine();
    +
    41  void test_RasterImage_drawPoint();
    +
    42  void test_RasterImage_getDisplayable();
    +
    43  void test_RasterImage_setPolygon();
    +
    44  void test_RasterImage_loadImage();
    +
    45  void test_RasterImage_getPixelColor();
    +
    46  void test_RasterImage_getImageData();
    +
    47  void test_RasterImage_setImageData();
    +
    48 
    +
    49  //test Shaped-Image operations
    +
    50  void test_ShapedImage_drawPixel();
    +
    51  void test_ShapedImage_drawLine();
    +
    52  void test_ShapedImage_drawPoint();
    +
    53  void test_ShapedImage_getDisplayable();
    +
    54  void test_ShapedImage_setPolygon();
    +
    55  void test_ShapedImage_loadImage();
    +
    56  void test_ShapedImage_getPixelColor();
    +
    57  void test_ShapedImage_getImageData();
    +
    58  void test_ShapedImage_setImageData();
    +
    59 
    +
    60  //test painting-area tools
    +
    61  void test_createTool_Circle();
    +
    62  void test_createTool_FloodFill();
    +
    63  void test_createTool_Line();
    +
    64  void test_createTool_Pen();
    +
    65  void test_createTool_Plain();
    +
    66  void test_createTool_Polygon();
    +
    67  void test_createTool_Rectangle();
    +
    68 
    +
    69  //test tools
    +
    70  void test_Circle_fullDraw();
    +
    71  void test_Circle_interruptedDraw();
    +
    72 
    +
    73  void test_FloodFill_fullDraw();
    +
    74  void test_FloodFill_interruptedDraw();
    +
    75 
    +
    76  void test_Line_fullDraw();
    +
    77  void test_Line_interruptedDraw();
    +
    78 
    +
    79  void test_Pen_fullDraw();
    +
    80  void test_Pen_interruptedDraw();
    +
    81 
    +
    82  void test_Plain_fullDraw();
    +
    83  void test_Plain_interruptedDraw();
    +
    84 
    +
    85  void test_Polygon_fullDraw();
    +
    86  void test_Polygon_interruptedDraw();
    +
    87 
    +
    88  void test_Rectangle_fullDraw();
    +
    89  void test_Rectangle_interruptedDraw();
    +
    90 
    +
    91  //test Triangulation
    +
    92  void test_Triangulation_Coverage();
    +
    93 };
    +
    94 
    + +
    96 {
    +
    97  char arg0[] = "programName";
    +
    98  char arg1[] = "arg1";
    +
    99  char arg2[] = "arg2";
    +
    100  char *argv[] = {arg0, arg1, arg2, nullptr};
    +
    101  int argc = sizeof(argv) / sizeof(char*) - 1;
    +
    102 
    +
    103  app = new QApplication(argc,argv);
    +
    104  gui = new IntelliPhotoGui();
    +
    105  area = gui->paintingArea;
    +
    106 }
    +
    107 
    + +
    109 {
    +
    110 
    +
    111 }
    +
    112 
    +
    113 void UnitTest::initTestCase()
    +
    114 {
    +
    115 
    +
    116 }
    +
    117 
    +
    118 void UnitTest::cleanupTestCase()
    +
    119 {
    +
    120  delete gui;
    +
    121  delete app;
    +
    122 }
    +
    123 
    +
    124 //void UnitTest::test_case1()
    +
    125 //{
    +
    126 // QBENCHMARK {
    +
    127 // QVERIFY(1 == 1);
    +
    128 // }
    +
    129 //}
    +
    130 
    +
    131 //test painting area
    +
    132 void UnitTest::test_addLayer(){}
    +
    133 void UnitTest::test_deleteLayer(){}
    +
    134 void UnitTest::test_setActive(){}
    +
    135 void UnitTest::test_setAlpha(){}
    +
    136 void UnitTest::test_floodFill(){}
    +
    137 void UnitTest::test_moveActive(){}
    +
    138 void UnitTest::test_setPolygon(){}
    +
    139 void UnitTest::test_setLayerUp(){}
    +
    140 void UnitTest::test_setLayerDown(){}
    +
    141 
    +
    142 void UnitTest::test_createTools(){}
    +
    143 
    +
    144 //test Raster-Image operations
    +
    145 void UnitTest::test_RasterImage_drawPixel(){}
    +
    146 void UnitTest::test_RasterImage_drawLine(){}
    +
    147 void UnitTest::test_RasterImage_drawPoint(){}
    +
    148 void UnitTest::test_RasterImage_getDisplayable(){}
    +
    149 void UnitTest::test_RasterImage_setPolygon(){}
    +
    150 void UnitTest::test_RasterImage_loadImage(){}
    +
    151 void UnitTest::test_RasterImage_getPixelColor(){}
    +
    152 void UnitTest::test_RasterImage_getImageData(){}
    +
    153 void UnitTest::test_RasterImage_setImageData(){}
    +
    154 
    +
    155 //test Shaped-Image operations
    +
    156 void UnitTest::test_ShapedImage_drawPixel(){}
    +
    157 void UnitTest::test_ShapedImage_drawLine(){}
    +
    158 void UnitTest::test_ShapedImage_drawPoint(){}
    +
    159 void UnitTest::test_ShapedImage_getDisplayable(){}
    +
    160 void UnitTest::test_ShapedImage_setPolygon(){}
    +
    161 void UnitTest::test_ShapedImage_loadImage(){}
    +
    162 void UnitTest::test_ShapedImage_getPixelColor(){}
    +
    163 void UnitTest::test_ShapedImage_getImageData(){}
    +
    164 void UnitTest::test_ShapedImage_setImageData(){}
    +
    165 
    +
    166 //test painting-area tools
    +
    167 void UnitTest::test_createTool_Circle(){}
    +
    168 void UnitTest::test_createTool_FloodFill(){}
    +
    169 void UnitTest::test_createTool_Line(){}
    +
    170 void UnitTest::test_createTool_Pen(){}
    +
    171 void UnitTest::test_createTool_Plain(){}
    +
    172 void UnitTest::test_createTool_Polygon(){}
    +
    173 void UnitTest::test_createTool_Rectangle(){}
    +
    174 
    +
    175 //test tools
    +
    176 void UnitTest::test_Circle_fullDraw(){}
    +
    177 void UnitTest::test_Circle_interruptedDraw(){}
    +
    178 
    +
    179 void UnitTest::test_FloodFill_fullDraw(){}
    +
    180 void UnitTest::test_FloodFill_interruptedDraw(){}
    +
    181 
    +
    182 void UnitTest::test_Line_fullDraw(){}
    +
    183 void UnitTest::test_Line_interruptedDraw(){}
    +
    184 
    +
    185 void UnitTest::test_Pen_fullDraw(){}
    +
    186 void UnitTest::test_Pen_interruptedDraw(){}
    +
    187 
    +
    188 void UnitTest::test_Plain_fullDraw(){}
    +
    189 void UnitTest::test_Plain_interruptedDraw(){}
    +
    190 
    +
    191 void UnitTest::test_Polygon_fullDraw(){}
    +
    192 void UnitTest::test_Polygon_interruptedDraw(){}
    +
    193 
    +
    194 void UnitTest::test_Rectangle_fullDraw(){}
    +
    195 void UnitTest::test_Rectangle_interruptedDraw(){}
    +
    196 
    +
    197 //test Triangulation
    +
    198 void UnitTest::test_Triangulation_Coverage(){}
    +
    199 
    +
    200 QTEST_APPLESS_MAIN(UnitTest)
    +
    201 
    +
    202 #include "tst_unittest.moc"
    +
    +
    + +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    + +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    + + + + + + diff --git a/docs/html/namespace_intelli_triangulation.html b/docs/html/namespace_intelli_triangulation.html index 10ec8ee..ea5d042 100644 --- a/docs/html/namespace_intelli_triangulation.html +++ b/docs/html/namespace_intelli_triangulation.html @@ -218,7 +218,7 @@ Functions
    Returns
    Returns true if the point is in the triangle, false otheriwse
    -

    Definition at line 33 of file IntelliTriangulation.h.

    +

    Definition at line 36 of file IntelliTriangulation.h.

    @@ -273,7 +273,7 @@ Functions
    Returns
    Returns the area of the traingle*2
    -

    Definition at line 23 of file IntelliTriangulation.h.

    +

    Definition at line 26 of file IntelliTriangulation.h.

    diff --git a/docs/html/navtreedata.js b/docs/html/navtreedata.js index 154afb6..d347af5 100644 --- a/docs/html/navtreedata.js +++ b/docs/html/navtreedata.js @@ -54,8 +54,8 @@ var NAVTREE = var NAVTREEINDEX = [ -"_intelli_color_picker_8h.html", -"class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df" +"_intelli_color_picker_8cpp.html", +"class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/docs/html/navtreeindex0.js b/docs/html/navtreeindex0.js index a421ac7..49b8dd2 100644 --- a/docs/html/navtreeindex0.js +++ b/docs/html/navtreeindex0.js @@ -1,9 +1,9 @@ var NAVTREEINDEX0 = { +"_intelli_color_picker_8cpp.html":[2,0,0,2,0], +"_intelli_color_picker_8cpp_source.html":[2,0,0,2,0], "_intelli_color_picker_8h.html":[2,0,0,2,1], "_intelli_color_picker_8h_source.html":[2,0,0,2,1], -"_intelli_helper_2_intelli_color_picker_8cpp.html":[2,0,0,2,0], -"_intelli_helper_2_intelli_color_picker_8cpp_source.html":[2,0,0,2,0], "_intelli_image_8cpp.html":[2,0,0,1,0], "_intelli_image_8cpp_source.html":[2,0,0,1,0], "_intelli_image_8h.html":[2,0,0,1,1], @@ -28,38 +28,38 @@ var NAVTREEINDEX0 = "_intelli_shaped_image_8cpp_source.html":[2,0,0,1,4], "_intelli_shaped_image_8h.html":[2,0,0,1,5], "_intelli_shaped_image_8h_source.html":[2,0,0,1,5], -"_intelli_tool_8cpp.html":[2,0,0,4,1], -"_intelli_tool_8cpp_source.html":[2,0,0,4,1], -"_intelli_tool_8h.html":[2,0,0,4,2], -"_intelli_tool_8h_source.html":[2,0,0,4,2], -"_intelli_tool_circle_8cpp.html":[2,0,0,4,3], -"_intelli_tool_circle_8cpp_source.html":[2,0,0,4,3], -"_intelli_tool_circle_8h.html":[2,0,0,4,4], -"_intelli_tool_circle_8h_source.html":[2,0,0,4,4], -"_intelli_tool_flood_fill_8cpp.html":[2,0,0,4,5], -"_intelli_tool_flood_fill_8cpp_source.html":[2,0,0,4,5], -"_intelli_tool_flood_fill_8h.html":[2,0,0,4,6], -"_intelli_tool_flood_fill_8h_source.html":[2,0,0,4,6], -"_intelli_tool_line_8cpp.html":[2,0,0,4,7], -"_intelli_tool_line_8cpp_source.html":[2,0,0,4,7], -"_intelli_tool_line_8h.html":[2,0,0,4,8], -"_intelli_tool_line_8h_source.html":[2,0,0,4,8], -"_intelli_tool_pen_8cpp.html":[2,0,0,4,9], -"_intelli_tool_pen_8cpp_source.html":[2,0,0,4,9], -"_intelli_tool_pen_8h.html":[2,0,0,4,10], -"_intelli_tool_pen_8h_source.html":[2,0,0,4,10], -"_intelli_tool_plain_8cpp.html":[2,0,0,4,11], -"_intelli_tool_plain_8cpp_source.html":[2,0,0,4,11], -"_intelli_tool_plain_8h.html":[2,0,0,4,12], -"_intelli_tool_plain_8h_source.html":[2,0,0,4,12], -"_intelli_tool_polygon_8cpp.html":[2,0,0,4,13], -"_intelli_tool_polygon_8cpp_source.html":[2,0,0,4,13], -"_intelli_tool_polygon_8h.html":[2,0,0,4,14], -"_intelli_tool_polygon_8h_source.html":[2,0,0,4,14], -"_intelli_tool_rectangle_8cpp.html":[2,0,0,4,15], -"_intelli_tool_rectangle_8cpp_source.html":[2,0,0,4,15], -"_intelli_tool_rectangle_8h.html":[2,0,0,4,16], -"_intelli_tool_rectangle_8h_source.html":[2,0,0,4,16], +"_intelli_tool_8cpp.html":[2,0,0,4,0], +"_intelli_tool_8cpp_source.html":[2,0,0,4,0], +"_intelli_tool_8h.html":[2,0,0,4,1], +"_intelli_tool_8h_source.html":[2,0,0,4,1], +"_intelli_tool_circle_8cpp.html":[2,0,0,4,2], +"_intelli_tool_circle_8cpp_source.html":[2,0,0,4,2], +"_intelli_tool_circle_8h.html":[2,0,0,4,3], +"_intelli_tool_circle_8h_source.html":[2,0,0,4,3], +"_intelli_tool_flood_fill_8cpp.html":[2,0,0,4,4], +"_intelli_tool_flood_fill_8cpp_source.html":[2,0,0,4,4], +"_intelli_tool_flood_fill_8h.html":[2,0,0,4,5], +"_intelli_tool_flood_fill_8h_source.html":[2,0,0,4,5], +"_intelli_tool_line_8cpp.html":[2,0,0,4,6], +"_intelli_tool_line_8cpp_source.html":[2,0,0,4,6], +"_intelli_tool_line_8h.html":[2,0,0,4,7], +"_intelli_tool_line_8h_source.html":[2,0,0,4,7], +"_intelli_tool_pen_8cpp.html":[2,0,0,4,8], +"_intelli_tool_pen_8cpp_source.html":[2,0,0,4,8], +"_intelli_tool_pen_8h.html":[2,0,0,4,9], +"_intelli_tool_pen_8h_source.html":[2,0,0,4,9], +"_intelli_tool_plain_8cpp.html":[2,0,0,4,10], +"_intelli_tool_plain_8cpp_source.html":[2,0,0,4,10], +"_intelli_tool_plain_8h.html":[2,0,0,4,11], +"_intelli_tool_plain_8h_source.html":[2,0,0,4,11], +"_intelli_tool_polygon_8cpp.html":[2,0,0,4,12], +"_intelli_tool_polygon_8cpp_source.html":[2,0,0,4,12], +"_intelli_tool_polygon_8h.html":[2,0,0,4,13], +"_intelli_tool_polygon_8h_source.html":[2,0,0,4,13], +"_intelli_tool_rectangle_8cpp.html":[2,0,0,4,14], +"_intelli_tool_rectangle_8cpp_source.html":[2,0,0,4,14], +"_intelli_tool_rectangle_8h.html":[2,0,0,4,15], +"_intelli_tool_rectangle_8h_source.html":[2,0,0,4,15], "_intelli_toolsettings_8cpp.html":[2,0,0,2,4], "_intelli_toolsettings_8cpp_source.html":[2,0,0,2,4], "_intelli_toolsettings_8h.html":[2,0,0,2,5], @@ -77,8 +77,6 @@ var NAVTREEINDEX0 = "_painting_area_8cpp_source.html":[2,0,0,3,0], "_painting_area_8h.html":[2,0,0,3,1], "_painting_area_8h_source.html":[2,0,0,3,1], -"_tool_2_intelli_color_picker_8cpp.html":[2,0,0,4,0], -"_tool_2_intelli_color_picker_8cpp_source.html":[2,0,0,4,0], "annotated.html":[1,0], "class_intelli_color_picker.html":[1,0,0], "class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae":[1,0,0,0], @@ -249,5 +247,7 @@ var NAVTREEINDEX0 = "class_painting_area.html#a24280454ebb80db7feba2fd621513353":[1,0,17,20], "class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466":[1,0,17,7], "class_painting_area.html#a35b5df914acb608cc29717659793359c":[1,0,17,26], -"class_painting_area.html#a3de83443d2d5cf460ff48d0602070938":[1,0,17,11] +"class_painting_area.html#a3de83443d2d5cf460ff48d0602070938":[1,0,17,11], +"class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df":[1,0,17,4], +"class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7":[1,0,17,30] }; diff --git a/docs/html/navtreeindex1.js b/docs/html/navtreeindex1.js index 7608701..37e2e48 100644 --- a/docs/html/navtreeindex1.js +++ b/docs/html/navtreeindex1.js @@ -1,7 +1,5 @@ var NAVTREEINDEX1 = { -"class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df":[1,0,17,4], -"class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7":[1,0,17,30], "class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423":[1,0,17,16], "class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460":[1,0,17,0], "class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd":[1,0,17,13], @@ -33,6 +31,11 @@ var NAVTREEINDEX1 = "class_painting_area.html#ae261acaaa346610dfed489dbac17e789":[1,0,17,5], "class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead":[1,0,17,22], "class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8":[1,0,17,19], +"class_unit_test.html":[1,0,19], +"class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,19,0], +"class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,19,2], +"class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,19,1], +"class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,19,3], "classes.html":[1,1], "dir_13830bfc3dd6736fe878600c9081919f.html":[2,0,0,3], "dir_4e4e2e75df7fa6971448b424c011c8b5.html":[2,0,0,0], @@ -53,6 +56,8 @@ var NAVTREEINDEX1 = "main_8cpp.html":[2,0,0,5], "main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97":[2,0,0,5,0], "main_8cpp_source.html":[2,0,0,5], +"main_unit_test_8cpp.html":[2,0,0,6], +"main_unit_test_8cpp_source.html":[2,0,0,6], "namespace_intelli_triangulation.html":[0,0,0], "namespacemembers.html":[0,1,0], "namespacemembers_func.html":[0,1,1], @@ -68,5 +73,7 @@ var NAVTREEINDEX1 = "struct_triangle.html":[1,0,18], "struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b":[1,0,18,0], "struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7":[1,0,18,1], -"struct_triangle.html#addb8aaab314d79f3617acca01e12872a":[1,0,18,2] +"struct_triangle.html#addb8aaab314d79f3617acca01e12872a":[1,0,18,2], +"tst__unittest_8cpp.html":[2,0,0,7], +"tst__unittest_8cpp_source.html":[2,0,0,7] }; diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js index 5c3fd99..c478149 100644 --- a/docs/html/search/all_10.js +++ b/docs/html/search/all_10.js @@ -1,6 +1,6 @@ var searchData= [ - ['wheelevent_169',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], - ['width_170',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_171',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['wheelevent_172',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], + ['width_173',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_174',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js index d23bbcf..e5b1ebc 100644 --- a/docs/html/search/all_11.js +++ b/docs/html/search/all_11.js @@ -1,17 +1,18 @@ var searchData= [ - ['_7eintellicolorpicker_172',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_173',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_174',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_175',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_176',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_177',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_178',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_179',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_180',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_181',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_182',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_183',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_184',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_185',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]] + ['_7eintellicolorpicker_175',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_176',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_177',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_178',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_179',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_180',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_181',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolline_182',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_183',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_184',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_185',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_186',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_187',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_188',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], + ['_7eunittest_189',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] ]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index ba1df0a..da51913 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -4,7 +4,7 @@ var searchData= ['imagedata_57',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], ['imagetype_58',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]], ['intellicolorpicker_59',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'IntelliColorPicker'],['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker::IntelliColorPicker()']]], - ['intellicolorpicker_2ecpp_60',['IntelliColorPicker.cpp',['../_intelli_helper_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)'],['../_tool_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)']]], + ['intellicolorpicker_2ecpp_60',['IntelliColorPicker.cpp',['../_intelli_color_picker_8cpp.html',1,'']]], ['intellicolorpicker_2eh_61',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], ['intelliimage_62',['IntelliImage',['../class_intelli_image.html',1,'IntelliImage'],['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage::IntelliImage()']]], ['intelliimage_2ecpp_63',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index 159fcbd..9276f07 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -2,9 +2,10 @@ var searchData= [ ['main_117',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], ['main_2ecpp_118',['main.cpp',['../main_8cpp.html',1,'']]], - ['mousemoveevent_119',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], - ['mousepressevent_120',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], - ['mousereleaseevent_121',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], - ['moveactivelayer_122',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], - ['movepositionactive_123',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] + ['mainunittest_2ecpp_119',['mainUnitTest.cpp',['../main_unit_test_8cpp.html',1,'']]], + ['mousemoveevent_120',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], + ['mousepressevent_121',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], + ['mousereleaseevent_122',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], + ['moveactivelayer_123',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], + ['movepositionactive_124',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js index 19151ca..2178336 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,10 +1,10 @@ var searchData= [ - ['onmouseleftpressed_124',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], - ['onmouseleftreleased_125',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], - ['onmousemoved_126',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], - ['onmouserightpressed_127',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], - ['onmouserightreleased_128',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], - ['onwheelscrolled_129',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], - ['open_130',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['onmouseleftpressed_125',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], + ['onmouseleftreleased_126',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], + ['onmousemoved_127',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], + ['onmouserightpressed_128',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], + ['onmouserightreleased_129',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], + ['onwheelscrolled_130',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], + ['open_131',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index 7d7b8b7..5271c89 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,12 +1,12 @@ var searchData= [ - ['paintevent_131',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_132',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], - ['paintingarea_2ecpp_133',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_134',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], - ['pen_135',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['pi_136',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], - ['plain_137',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_138',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], - ['polygondata_139',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['paintevent_132',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_133',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], + ['paintingarea_2ecpp_134',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_135',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], + ['pen_136',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['pi_137',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], + ['plain_138',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_139',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], + ['polygondata_140',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] ]; diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index ca661e9..dc3c2ae 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,7 +1,7 @@ var searchData= [ - ['rasterimage_140',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], - ['rectangle_141',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], - ['resizeevent_142',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], - ['resizeimage_143',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['rasterimage_141',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], + ['rectangle_142',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], + ['resizeevent_143',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], + ['resizeimage_144',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js index 4c8b128..fa7e83c 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,22 +1,22 @@ var searchData= [ - ['save_144',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['setfastrendering_145',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], - ['setfirstcolor_146',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setimagedata_147',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], - ['setinneralpha_148',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], - ['setlayeractive_149',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_150',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlinewidth_151',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], - ['setpolygon_152',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], - ['setrendersettings_153',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], - ['setsecondcolor_154',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['settoolwidth_155',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], - ['shapedimage_156',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], - ['sign_157',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_158',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotcloseevent_159',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], - ['slotdeleteactivelayer_160',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['sloteingabe_161',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], - ['swapcolors_162',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['save_145',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['setfastrendering_146',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_147',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_148',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_149',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_150',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_151',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_152',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_153',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], + ['setrendersettings_154',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_155',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_156',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['shapedimage_157',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], + ['sign_158',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_159',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_160',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_161',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_162',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_163',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js index b6ea8eb..9dc44e7 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,7 +1,8 @@ var searchData= [ - ['toolsettings_163',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['tooltype_164',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], - ['triangle_165',['Triangle',['../struct_triangle.html',1,'']]], - ['typeofimage_166',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_164',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['tooltype_165',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], + ['triangle_166',['Triangle',['../struct_triangle.html',1,'']]], + ['tst_5funittest_2ecpp_167',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]], + ['typeofimage_168',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js index 927af63..c04840d 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -1,5 +1,6 @@ var searchData= [ - ['updategui_167',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_168',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['unittest_169',['UnitTest',['../class_unit_test.html',1,'UnitTest'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], + ['updategui_170',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_171',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js index 2af9c60..fdc09c0 100644 --- a/docs/html/search/classes_0.js +++ b/docs/html/search/classes_0.js @@ -1,19 +1,19 @@ var searchData= [ - ['intellicolorpicker_186',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'']]], - ['intelliimage_187',['IntelliImage',['../class_intelli_image.html',1,'']]], - ['intelliinputdialog_188',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'']]], - ['intelliphotogui_189',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'']]], - ['intellirasterimage_190',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'']]], - ['intellirendersettings_191',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'']]], - ['intellishapedimage_192',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'']]], - ['intellitool_193',['IntelliTool',['../class_intelli_tool.html',1,'']]], - ['intellitoolcircle_194',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'']]], - ['intellitoolfloodfill_195',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'']]], - ['intellitoolline_196',['IntelliToolLine',['../class_intelli_tool_line.html',1,'']]], - ['intellitoolpen_197',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'']]], - ['intellitoolplaintool_198',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'']]], - ['intellitoolpolygon_199',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'']]], - ['intellitoolrectangle_200',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'']]], - ['intellitoolsettings_201',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'']]] + ['intellicolorpicker_190',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'']]], + ['intelliimage_191',['IntelliImage',['../class_intelli_image.html',1,'']]], + ['intelliinputdialog_192',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'']]], + ['intelliphotogui_193',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'']]], + ['intellirasterimage_194',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'']]], + ['intellirendersettings_195',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'']]], + ['intellishapedimage_196',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'']]], + ['intellitool_197',['IntelliTool',['../class_intelli_tool.html',1,'']]], + ['intellitoolcircle_198',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'']]], + ['intellitoolfloodfill_199',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'']]], + ['intellitoolline_200',['IntelliToolLine',['../class_intelli_tool_line.html',1,'']]], + ['intellitoolpen_201',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'']]], + ['intellitoolplaintool_202',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'']]], + ['intellitoolpolygon_203',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'']]], + ['intellitoolrectangle_204',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'']]], + ['intellitoolsettings_205',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'']]] ]; diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js index bc6e0b8..3dc67ba 100644 --- a/docs/html/search/classes_1.js +++ b/docs/html/search/classes_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['layerobject_202',['LayerObject',['../struct_layer_object.html',1,'']]] + ['layerobject_206',['LayerObject',['../struct_layer_object.html',1,'']]] ]; diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js index 4f740c2..77f270c 100644 --- a/docs/html/search/classes_2.js +++ b/docs/html/search/classes_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['paintingarea_203',['PaintingArea',['../class_painting_area.html',1,'']]] + ['paintingarea_207',['PaintingArea',['../class_painting_area.html',1,'']]] ]; diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js index 9da43d3..8e64488 100644 --- a/docs/html/search/classes_3.js +++ b/docs/html/search/classes_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['triangle_204',['Triangle',['../struct_triangle.html',1,'']]] + ['triangle_208',['Triangle',['../struct_triangle.html',1,'']]] ]; diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html new file mode 100644 index 0000000..095ab59 --- /dev/null +++ b/docs/html/search/classes_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js new file mode 100644 index 0000000..a01181e --- /dev/null +++ b/docs/html/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unittest_209',['UnitTest',['../class_unit_test.html',1,'']]] +]; diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js index ab1a8f1..51788b0 100644 --- a/docs/html/search/defines_0.js +++ b/docs/html/search/defines_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['pi_388',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]] + ['pi_397',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]] ]; diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js index f56fc35..5df6bbf 100644 --- a/docs/html/search/enums_0.js +++ b/docs/html/search/enums_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['imagetype_377',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]] + ['imagetype_386',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]] ]; diff --git a/docs/html/search/enums_1.js b/docs/html/search/enums_1.js index 61bfe2e..b2eaa58 100644 --- a/docs/html/search/enums_1.js +++ b/docs/html/search/enums_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['tooltype_378',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]] + ['tooltype_387',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js index c10f52d..79025de 100644 --- a/docs/html/search/enumvalues_0.js +++ b/docs/html/search/enumvalues_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['circle_379',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] + ['circle_388',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_1.js b/docs/html/search/enumvalues_1.js index 57b1da8..61de8b1 100644 --- a/docs/html/search/enumvalues_1.js +++ b/docs/html/search/enumvalues_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['floodfill_380',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] + ['floodfill_389',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_2.js b/docs/html/search/enumvalues_2.js index 06c858c..7d5dc9e 100644 --- a/docs/html/search/enumvalues_2.js +++ b/docs/html/search/enumvalues_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['line_381',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] + ['line_390',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_3.js b/docs/html/search/enumvalues_3.js index 3f68a49..92b44e4 100644 --- a/docs/html/search/enumvalues_3.js +++ b/docs/html/search/enumvalues_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['pen_382',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['plain_383',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_384',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] + ['pen_391',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['plain_392',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_393',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_4.js b/docs/html/search/enumvalues_4.js index cd86a8a..31b7d8d 100644 --- a/docs/html/search/enumvalues_4.js +++ b/docs/html/search/enumvalues_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['rasterimage_385',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], - ['rectangle_386',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] + ['rasterimage_394',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], + ['rectangle_395',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_5.js b/docs/html/search/enumvalues_5.js index f603ae9..b7988e0 100644 --- a/docs/html/search/enumvalues_5.js +++ b/docs/html/search/enumvalues_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['shapedimage_387',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]] + ['shapedimage_396',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]] ]; diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js index 3e58c14..28002b1 100644 --- a/docs/html/search/files_0.js +++ b/docs/html/search/files_0.js @@ -1,37 +1,37 @@ var searchData= [ - ['intellicolorpicker_2ecpp_206',['IntelliColorPicker.cpp',['../_intelli_helper_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)'],['../_tool_2_intelli_color_picker_8cpp.html',1,'(Global Namespace)']]], - ['intellicolorpicker_2eh_207',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], - ['intelliimage_2ecpp_208',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], - ['intelliimage_2eh_209',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], - ['intelliinputdialog_2ecpp_210',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], - ['intelliinputdialog_2eh_211',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], - ['intelliphotogui_2ecpp_212',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], - ['intelliphotogui_2eh_213',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], - ['intellirasterimage_2ecpp_214',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], - ['intellirasterimage_2eh_215',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], - ['intellirendersettings_2ecpp_216',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], - ['intellirendersettings_2eh_217',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], - ['intellishapedimage_2ecpp_218',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], - ['intellishapedimage_2eh_219',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], - ['intellitool_2ecpp_220',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], - ['intellitool_2eh_221',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], - ['intellitoolcircle_2ecpp_222',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], - ['intellitoolcircle_2eh_223',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], - ['intellitoolfloodfill_2ecpp_224',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], - ['intellitoolfloodfill_2eh_225',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], - ['intellitoolline_2ecpp_226',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], - ['intellitoolline_2eh_227',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], - ['intellitoolpen_2ecpp_228',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], - ['intellitoolpen_2eh_229',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], - ['intellitoolplain_2ecpp_230',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], - ['intellitoolplain_2eh_231',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], - ['intellitoolpolygon_2ecpp_232',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], - ['intellitoolpolygon_2eh_233',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], - ['intellitoolrectangle_2ecpp_234',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], - ['intellitoolrectangle_2eh_235',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], - ['intellitoolsettings_2ecpp_236',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], - ['intellitoolsettings_2eh_237',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], - ['intellitriangulation_2ecpp_238',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], - ['intellitriangulation_2eh_239',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]] + ['intellicolorpicker_2ecpp_211',['IntelliColorPicker.cpp',['../_intelli_color_picker_8cpp.html',1,'']]], + ['intellicolorpicker_2eh_212',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], + ['intelliimage_2ecpp_213',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], + ['intelliimage_2eh_214',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], + ['intelliinputdialog_2ecpp_215',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], + ['intelliinputdialog_2eh_216',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], + ['intelliphotogui_2ecpp_217',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], + ['intelliphotogui_2eh_218',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], + ['intellirasterimage_2ecpp_219',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], + ['intellirasterimage_2eh_220',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], + ['intellirendersettings_2ecpp_221',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], + ['intellirendersettings_2eh_222',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], + ['intellishapedimage_2ecpp_223',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], + ['intellishapedimage_2eh_224',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], + ['intellitool_2ecpp_225',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], + ['intellitool_2eh_226',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], + ['intellitoolcircle_2ecpp_227',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], + ['intellitoolcircle_2eh_228',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], + ['intellitoolfloodfill_2ecpp_229',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], + ['intellitoolfloodfill_2eh_230',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], + ['intellitoolline_2ecpp_231',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], + ['intellitoolline_2eh_232',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], + ['intellitoolpen_2ecpp_233',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], + ['intellitoolpen_2eh_234',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], + ['intellitoolplain_2ecpp_235',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], + ['intellitoolplain_2eh_236',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], + ['intellitoolpolygon_2ecpp_237',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], + ['intellitoolpolygon_2eh_238',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], + ['intellitoolrectangle_2ecpp_239',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], + ['intellitoolrectangle_2eh_240',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], + ['intellitoolsettings_2ecpp_241',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], + ['intellitoolsettings_2eh_242',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], + ['intellitriangulation_2ecpp_243',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], + ['intellitriangulation_2eh_244',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]] ]; diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js index 12f1a9c..c3bff03 100644 --- a/docs/html/search/files_1.js +++ b/docs/html/search/files_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['main_2ecpp_240',['main.cpp',['../main_8cpp.html',1,'']]] + ['main_2ecpp_245',['main.cpp',['../main_8cpp.html',1,'']]], + ['mainunittest_2ecpp_246',['mainUnitTest.cpp',['../main_unit_test_8cpp.html',1,'']]] ]; diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js index 5e8e35d..0fa739d 100644 --- a/docs/html/search/files_2.js +++ b/docs/html/search/files_2.js @@ -1,5 +1,5 @@ var searchData= [ - ['paintingarea_2ecpp_241',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_242',['PaintingArea.h',['../_painting_area_8h.html',1,'']]] + ['paintingarea_2ecpp_247',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_248',['PaintingArea.h',['../_painting_area_8h.html',1,'']]] ]; diff --git a/docs/html/search/files_3.html b/docs/html/search/files_3.html new file mode 100644 index 0000000..1076bc5 --- /dev/null +++ b/docs/html/search/files_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js new file mode 100644 index 0000000..18e7b0d --- /dev/null +++ b/docs/html/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tst_5funittest_2ecpp_249',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js index 441ec99..0aeb97c 100644 --- a/docs/html/search/functions_0.js +++ b/docs/html/search/functions_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['addlayer_243',['addLayer',['../class_painting_area.html#a6e9207612cef104d39013564696fe989',1,'PaintingArea']]], - ['addlayerat_244',['addLayerAt',['../class_painting_area.html#ab4a0b3a497ea8821a045ad12c34bd980',1,'PaintingArea']]] + ['addlayer_250',['addLayer',['../class_painting_area.html#a6e9207612cef104d39013564696fe989',1,'PaintingArea']]], + ['addlayerat_251',['addLayerAt',['../class_painting_area.html#ab4a0b3a497ea8821a045ad12c34bd980',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js index fe6b394..f37c11c 100644 --- a/docs/html/search/functions_1.js +++ b/docs/html/search/functions_1.js @@ -1,16 +1,16 @@ var searchData= [ - ['calculatetriangles_245',['calculateTriangles',['../namespace_intelli_triangulation.html#acdaf1ed598e868b25e9e06d580da32e5',1,'IntelliTriangulation']]], - ['calculatevisiblity_246',['calculateVisiblity',['../class_intelli_image.html#aebbced93f4744fad81b7f141b21f4ab2',1,'IntelliImage::calculateVisiblity()'],['../class_intelli_raster_image.html#a87cf2d360c129d64a5db0db85818eb60',1,'IntelliRasterImage::calculateVisiblity()']]], - ['closeevent_247',['closeEvent',['../class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13',1,'IntelliPhotoGui']]], - ['colorpickersetfirstcolor_248',['colorPickerSetFirstColor',['../class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df',1,'PaintingArea']]], - ['colorpickersetsecondcolor_249',['colorPickerSetSecondColor',['../class_painting_area.html#ae261acaaa346610dfed489dbac17e789',1,'PaintingArea']]], - ['colorpickerswapcolors_250',['colorPickerSwapColors',['../class_painting_area.html#acff4563d006fda491469bd41778d07eb',1,'PaintingArea']]], - ['createcircletool_251',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], - ['createfloodfilltool_252',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], - ['createlinetool_253',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], - ['createpentool_254',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], - ['createplaintool_255',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], - ['createpolygontool_256',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], - ['createrectangletool_257',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] + ['calculatetriangles_252',['calculateTriangles',['../namespace_intelli_triangulation.html#acdaf1ed598e868b25e9e06d580da32e5',1,'IntelliTriangulation']]], + ['calculatevisiblity_253',['calculateVisiblity',['../class_intelli_image.html#aebbced93f4744fad81b7f141b21f4ab2',1,'IntelliImage::calculateVisiblity()'],['../class_intelli_raster_image.html#a87cf2d360c129d64a5db0db85818eb60',1,'IntelliRasterImage::calculateVisiblity()']]], + ['closeevent_254',['closeEvent',['../class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13',1,'IntelliPhotoGui']]], + ['colorpickersetfirstcolor_255',['colorPickerSetFirstColor',['../class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df',1,'PaintingArea']]], + ['colorpickersetsecondcolor_256',['colorPickerSetSecondColor',['../class_painting_area.html#ae261acaaa346610dfed489dbac17e789',1,'PaintingArea']]], + ['colorpickerswapcolors_257',['colorPickerSwapColors',['../class_painting_area.html#acff4563d006fda491469bd41778d07eb',1,'PaintingArea']]], + ['createcircletool_258',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], + ['createfloodfilltool_259',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], + ['createlinetool_260',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], + ['createpentool_261',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], + ['createplaintool_262',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], + ['createpolygontool_263',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], + ['createrectangletool_264',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js index a30b8ed..fa94b3d 100644 --- a/docs/html/search/functions_2.js +++ b/docs/html/search/functions_2.js @@ -1,8 +1,8 @@ var searchData= [ - ['deletelayer_258',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], - ['drawline_259',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], - ['drawpixel_260',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], - ['drawplain_261',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], - ['drawpoint_262',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] + ['deletelayer_265',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], + ['drawline_266',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], + ['drawpixel_267',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], + ['drawplain_268',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], + ['drawpoint_269',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js index 1d3e8b7..46edeb3 100644 --- a/docs/html/search/functions_3.js +++ b/docs/html/search/functions_3.js @@ -1,25 +1,25 @@ var searchData= [ - ['getdeepcopy_263',['getDeepCopy',['../class_intelli_image.html#af6381067bdf565669f856bb589008ae9',1,'IntelliImage::getDeepCopy()'],['../class_intelli_raster_image.html#a8f901301b106504de3c27308ade897dc',1,'IntelliRasterImage::getDeepCopy()'],['../class_intelli_shaped_image.html#aed0b31e0fa771104399d1f5ff39a0337',1,'IntelliShapedImage::getDeepCopy()']]], - ['getdisplayable_264',['getDisplayable',['../class_intelli_image.html#a21c7e65b59a26db45aac3880133ef21d',1,'IntelliImage::getDisplayable(const QSize &displaySize, int alpha)=0'],['../class_intelli_image.html#a9d4daf3c48c64695105689f61c21bae0',1,'IntelliImage::getDisplayable(int alpha=255)=0'],['../class_intelli_raster_image.html#ae43393397b0141a8033fe34d3a1b1884',1,'IntelliRasterImage::getDisplayable(const QSize &displaySize, int alpha) override'],['../class_intelli_raster_image.html#a612d79124f0e2c158a4f0abbe4b5f97f',1,'IntelliRasterImage::getDisplayable(int alpha=255) override'],['../class_intelli_shaped_image.html#a68cf374247c16f07fd84d50e4cd05630',1,'IntelliShapedImage::getDisplayable(const QSize &displaySize, int alpha=255) override'],['../class_intelli_shaped_image.html#ac6a99e1a96134073bceea252b37636cc',1,'IntelliShapedImage::getDisplayable(int alpha=255) override']]], - ['getfirstcolor_265',['getFirstColor',['../class_intelli_color_picker.html#aae2eb27b928fe9388b9398b0556303b7',1,'IntelliColorPicker']]], - ['getheightofactive_266',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], - ['getimagedata_267',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], - ['getimagedataofactivelayer_268',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], - ['getimageofactivelayer_269',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], - ['getinneralpha_270',['getInnerAlpha',['../class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c',1,'IntelliToolsettings']]], - ['getint_271',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], - ['getisdrawing_272',['getIsDrawing',['../class_intelli_tool.html#a0020fad2e26315d5c4d96dbc95d1dceb',1,'IntelliTool']]], - ['getlinewidth_273',['getLineWidth',['../class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a',1,'IntelliToolsettings']]], - ['getmaxheight_274',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], - ['getmaxwidth_275',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], - ['getnumberofactivelayer_276',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], - ['getpixelcolor_277',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], - ['getpolygondata_278',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], - ['getpolygondataofreallayer_279',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], - ['getsecondcolor_280',['getSecondColor',['../class_intelli_color_picker.html#a55568fbf5dc783f06284b7031ffe9415',1,'IntelliColorPicker']]], - ['gettooltype_281',['getTooltype',['../class_intelli_tool.html#aae2a11c5bae4973ed827c60e0c1352b1',1,'IntelliTool']]], - ['gettypeofimage_282',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], - ['gettypeofimagereallayer_283',['getTypeOfImageRealLayer',['../class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead',1,'PaintingArea']]], - ['getwidthofactive_284',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] + ['getdeepcopy_270',['getDeepCopy',['../class_intelli_image.html#af6381067bdf565669f856bb589008ae9',1,'IntelliImage::getDeepCopy()'],['../class_intelli_raster_image.html#a8f901301b106504de3c27308ade897dc',1,'IntelliRasterImage::getDeepCopy()'],['../class_intelli_shaped_image.html#aed0b31e0fa771104399d1f5ff39a0337',1,'IntelliShapedImage::getDeepCopy()']]], + ['getdisplayable_271',['getDisplayable',['../class_intelli_image.html#a21c7e65b59a26db45aac3880133ef21d',1,'IntelliImage::getDisplayable(const QSize &displaySize, int alpha)=0'],['../class_intelli_image.html#a9d4daf3c48c64695105689f61c21bae0',1,'IntelliImage::getDisplayable(int alpha=255)=0'],['../class_intelli_raster_image.html#ae43393397b0141a8033fe34d3a1b1884',1,'IntelliRasterImage::getDisplayable(const QSize &displaySize, int alpha) override'],['../class_intelli_raster_image.html#a612d79124f0e2c158a4f0abbe4b5f97f',1,'IntelliRasterImage::getDisplayable(int alpha=255) override'],['../class_intelli_shaped_image.html#a68cf374247c16f07fd84d50e4cd05630',1,'IntelliShapedImage::getDisplayable(const QSize &displaySize, int alpha=255) override'],['../class_intelli_shaped_image.html#ac6a99e1a96134073bceea252b37636cc',1,'IntelliShapedImage::getDisplayable(int alpha=255) override']]], + ['getfirstcolor_272',['getFirstColor',['../class_intelli_color_picker.html#aae2eb27b928fe9388b9398b0556303b7',1,'IntelliColorPicker']]], + ['getheightofactive_273',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], + ['getimagedata_274',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], + ['getimagedataofactivelayer_275',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], + ['getimageofactivelayer_276',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], + ['getinneralpha_277',['getInnerAlpha',['../class_intelli_toolsettings.html#a7d6ce2054ec4bcba7629dc2b514b6b5c',1,'IntelliToolsettings']]], + ['getint_278',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], + ['getisdrawing_279',['getIsDrawing',['../class_intelli_tool.html#a0020fad2e26315d5c4d96dbc95d1dceb',1,'IntelliTool']]], + ['getlinewidth_280',['getLineWidth',['../class_intelli_toolsettings.html#a68528dd3bad8f39ba19fa6b12a4e415a',1,'IntelliToolsettings']]], + ['getmaxheight_281',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], + ['getmaxwidth_282',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], + ['getnumberofactivelayer_283',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], + ['getpixelcolor_284',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], + ['getpolygondata_285',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], + ['getpolygondataofreallayer_286',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], + ['getsecondcolor_287',['getSecondColor',['../class_intelli_color_picker.html#a55568fbf5dc783f06284b7031ffe9415',1,'IntelliColorPicker']]], + ['gettooltype_288',['getTooltype',['../class_intelli_tool.html#aae2a11c5bae4973ed827c60e0c1352b1',1,'IntelliTool']]], + ['gettypeofimage_289',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], + ['gettypeofimagereallayer_290',['getTypeOfImageRealLayer',['../class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead',1,'PaintingArea']]], + ['getwidthofactive_291',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js index 03a6d77..959b7f5 100644 --- a/docs/html/search/functions_4.js +++ b/docs/html/search/functions_4.js @@ -1,22 +1,22 @@ var searchData= [ - ['intellicolorpicker_285',['IntelliColorPicker',['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker']]], - ['intelliimage_286',['IntelliImage',['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage']]], - ['intelliinputdialog_287',['IntelliInputDialog',['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog']]], - ['intelliphotogui_288',['IntelliPhotoGui',['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui']]], - ['intellirasterimage_289',['IntelliRasterImage',['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage']]], - ['intellirendersettings_290',['IntelliRenderSettings',['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings']]], - ['intellishapedimage_291',['IntelliShapedImage',['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage']]], - ['intellitool_292',['IntelliTool',['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool']]], - ['intellitoolcircle_293',['IntelliToolCircle',['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle']]], - ['intellitoolfloodfill_294',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill']]], - ['intellitoolline_295',['IntelliToolLine',['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine']]], - ['intellitoolpen_296',['IntelliToolPen',['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen']]], - ['intellitoolplaintool_297',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool']]], - ['intellitoolpolygon_298',['IntelliToolPolygon',['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon']]], - ['intellitoolrectangle_299',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], - ['intellitoolsettings_300',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], - ['isfastrenderering_301',['isFastRenderering',['../class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd',1,'IntelliRenderSettings']]], - ['isinpolygon_302',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], - ['isintriangle_303',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] + ['intellicolorpicker_292',['IntelliColorPicker',['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker']]], + ['intelliimage_293',['IntelliImage',['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage']]], + ['intelliinputdialog_294',['IntelliInputDialog',['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog']]], + ['intelliphotogui_295',['IntelliPhotoGui',['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui']]], + ['intellirasterimage_296',['IntelliRasterImage',['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage']]], + ['intellirendersettings_297',['IntelliRenderSettings',['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings']]], + ['intellishapedimage_298',['IntelliShapedImage',['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage']]], + ['intellitool_299',['IntelliTool',['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool']]], + ['intellitoolcircle_300',['IntelliToolCircle',['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle']]], + ['intellitoolfloodfill_301',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill']]], + ['intellitoolline_302',['IntelliToolLine',['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine']]], + ['intellitoolpen_303',['IntelliToolPen',['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen']]], + ['intellitoolplaintool_304',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool']]], + ['intellitoolpolygon_305',['IntelliToolPolygon',['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon']]], + ['intellitoolrectangle_306',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], + ['intellitoolsettings_307',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], + ['isfastrenderering_308',['isFastRenderering',['../class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd',1,'IntelliRenderSettings']]], + ['isinpolygon_309',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], + ['isintriangle_310',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js index 9a58991..7c550e9 100644 --- a/docs/html/search/functions_5.js +++ b/docs/html/search/functions_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['loadimage_304',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]] + ['loadimage_311',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js index d9b6206..05e60ef 100644 --- a/docs/html/search/functions_6.js +++ b/docs/html/search/functions_6.js @@ -1,9 +1,9 @@ var searchData= [ - ['main_305',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], - ['mousemoveevent_306',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], - ['mousepressevent_307',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], - ['mousereleaseevent_308',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], - ['moveactivelayer_309',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], - ['movepositionactive_310',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] + ['main_312',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['mousemoveevent_313',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], + ['mousepressevent_314',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], + ['mousereleaseevent_315',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], + ['moveactivelayer_316',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], + ['movepositionactive_317',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js index d522fff..176d04b 100644 --- a/docs/html/search/functions_7.js +++ b/docs/html/search/functions_7.js @@ -1,10 +1,10 @@ var searchData= [ - ['onmouseleftpressed_311',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], - ['onmouseleftreleased_312',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], - ['onmousemoved_313',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], - ['onmouserightpressed_314',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], - ['onmouserightreleased_315',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], - ['onwheelscrolled_316',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], - ['open_317',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['onmouseleftpressed_318',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], + ['onmouseleftreleased_319',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], + ['onmousemoved_320',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], + ['onmouserightpressed_321',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], + ['onmouserightreleased_322',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], + ['onwheelscrolled_323',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], + ['open_324',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js index 1069c92..990e950 100644 --- a/docs/html/search/functions_8.js +++ b/docs/html/search/functions_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['paintevent_318',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_319',['PaintingArea',['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea']]] + ['paintevent_325',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_326',['PaintingArea',['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js index f427352..1615c64 100644 --- a/docs/html/search/functions_9.js +++ b/docs/html/search/functions_9.js @@ -1,5 +1,5 @@ var searchData= [ - ['resizeevent_320',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], - ['resizeimage_321',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['resizeevent_327',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], + ['resizeimage_328',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js index c878f47..513ad94 100644 --- a/docs/html/search/functions_a.js +++ b/docs/html/search/functions_a.js @@ -1,21 +1,21 @@ var searchData= [ - ['save_322',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['setfastrendering_323',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], - ['setfirstcolor_324',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setimagedata_325',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], - ['setinneralpha_326',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], - ['setlayeractive_327',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_328',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlinewidth_329',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], - ['setpolygon_330',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], - ['setrendersettings_331',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], - ['setsecondcolor_332',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['settoolwidth_333',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], - ['sign_334',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_335',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotcloseevent_336',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], - ['slotdeleteactivelayer_337',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['sloteingabe_338',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], - ['swapcolors_339',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['save_329',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['setfastrendering_330',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_331',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_332',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_333',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_334',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_335',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_336',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_337',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], + ['setrendersettings_338',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_339',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_340',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['sign_341',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_342',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_343',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_344',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_345',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_346',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js index c3b5fa4..91445d2 100644 --- a/docs/html/search/functions_b.js +++ b/docs/html/search/functions_b.js @@ -1,5 +1,6 @@ var searchData= [ - ['updategui_340',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_341',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['unittest_347',['UnitTest',['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], + ['updategui_348',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_349',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js index 959d316..686df1e 100644 --- a/docs/html/search/functions_c.js +++ b/docs/html/search/functions_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['wheelevent_342',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] + ['wheelevent_350',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js index 673dd9a..0bc346e 100644 --- a/docs/html/search/functions_d.js +++ b/docs/html/search/functions_d.js @@ -1,17 +1,18 @@ var searchData= [ - ['_7eintellicolorpicker_343',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_344',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_345',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_346',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_347',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_348',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_349',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_350',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_351',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_352',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_353',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_354',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_355',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_356',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]] + ['_7eintellicolorpicker_351',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_352',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_353',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_354',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_355',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_356',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_357',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolline_358',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_359',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_360',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_361',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_362',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_363',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_364',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], + ['_7eunittest_365',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] ]; diff --git a/docs/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js index 04939a0..a9bc87f 100644 --- a/docs/html/search/namespaces_0.js +++ b/docs/html/search/namespaces_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['intellitriangulation_205',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]] + ['intellitriangulation_210',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]] ]; diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js index 68e88af..43635c5 100644 --- a/docs/html/search/searchdata.js +++ b/docs/html/search/searchdata.js @@ -1,9 +1,9 @@ var indexSectionsWithContent = { 0: "abcdfghilmoprstuw~", - 1: "ilpt", + 1: "ilptu", 2: "i", - 3: "imp", + 3: "impt", 4: "acdgilmoprsuw~", 5: "abcfhiptw", 6: "it", diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js index 60bc340..27906d5 100644 --- a/docs/html/search/variables_0.js +++ b/docs/html/search/variables_0.js @@ -1,8 +1,8 @@ var searchData= [ - ['a_357',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], - ['activelayer_358',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], - ['activetype_359',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], - ['alpha_360',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], - ['area_361',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] + ['a_366',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], + ['activelayer_367',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], + ['activetype_368',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], + ['alpha_369',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], + ['area_370',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] ]; diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js index db4af2b..f1630c4 100644 --- a/docs/html/search/variables_1.js +++ b/docs/html/search/variables_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['b_362',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] + ['b_371',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] ]; diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js index acab1a0..0230af2 100644 --- a/docs/html/search/variables_2.js +++ b/docs/html/search/variables_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['c_363',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], - ['canvas_364',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], - ['colorpicker_365',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] + ['c_372',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], + ['canvas_373',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], + ['colorpicker_374',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] ]; diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js index e29f1aa..389024f 100644 --- a/docs/html/search/variables_3.js +++ b/docs/html/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['fastrenderering_366',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]] + ['fastrenderering_375',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]] ]; diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js index 1e3f048..096c756 100644 --- a/docs/html/search/variables_4.js +++ b/docs/html/search/variables_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['height_367',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], - ['heightoffset_368',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] + ['height_376',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], + ['heightoffset_377',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] ]; diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js index eb4f386..cd257ab 100644 --- a/docs/html/search/variables_5.js +++ b/docs/html/search/variables_5.js @@ -1,6 +1,6 @@ var searchData= [ - ['image_369',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], - ['imagedata_370',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], - ['isdrawing_371',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] + ['image_378',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], + ['imagedata_379',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], + ['isdrawing_380',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] ]; diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js index 6a1cab9..1cfc5e5 100644 --- a/docs/html/search/variables_6.js +++ b/docs/html/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['polygondata_372',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['polygondata_381',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] ]; diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js index 7275765..ee88f95 100644 --- a/docs/html/search/variables_7.js +++ b/docs/html/search/variables_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['toolsettings_373',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['typeofimage_374',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_382',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['typeofimage_383',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/variables_8.js b/docs/html/search/variables_8.js index f119ac1..d14ebf9 100644 --- a/docs/html/search/variables_8.js +++ b/docs/html/search/variables_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['width_375',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_376',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['width_384',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_385',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/struct_layer_object.html b/docs/html/struct_layer_object.html index daba37d..05f0cb1 100644 --- a/docs/html/struct_layer_object.html +++ b/docs/html/struct_layer_object.html @@ -98,32 +98,28 @@ $(document).ready(function(){initNavTree('struct_layer_object.html',''); initRes

    Public Attributes

    IntelliImageimage + image - Stores the imageData of the current LayerObject. More...
      int width + width - Stores the width of a layer in pixels. More...
      int height + height - Stores the height of a layer in pixels. More...
      int widthOffset + widthOffset - Stores the number of pixles from the left side of the painting area. More...
      int heightOffset + heightOffset - Stores the number of pixles from the top of the painting area. More...
      int alpha = 255 + alpha - Stores the alpha value of the layer (default=255). More...
     

    Detailed Description

    The LayerObject struct holds all the information needed to construct a layer.

    -
    Parameters
    - - - - - - -
    width- Stores the width of a layer in pixels
    height- Stores the height of a layer in pixels
    alpha- Stores the alpha value of the layer (default=255)
    widthOffset- Stores the number of pixles from the left side of the painting area
    heightOffset- Stores the number of pixles from the top of the painting area
    -
    -
    -

    Definition at line 25 of file PaintingArea.h.

    +

    Definition at line 23 of file PaintingArea.h.

    Member Data Documentation

    ◆ alpha

    @@ -137,7 +133,9 @@ Public Attributes
    -

    Definition at line 31 of file PaintingArea.h.

    +

    alpha - Stores the alpha value of the layer (default=255).

    + +

    Definition at line 47 of file PaintingArea.h.

    @@ -153,7 +151,9 @@ Public Attributes
    -

    Definition at line 28 of file PaintingArea.h.

    +

    height - Stores the height of a layer in pixels.

    + +

    Definition at line 35 of file PaintingArea.h.

    @@ -169,7 +169,9 @@ Public Attributes
    -

    Definition at line 30 of file PaintingArea.h.

    +

    heightOffset - Stores the number of pixles from the top of the painting area.

    + +

    Definition at line 43 of file PaintingArea.h.

    @@ -185,7 +187,9 @@ Public Attributes
    -

    Definition at line 26 of file PaintingArea.h.

    +

    image - Stores the imageData of the current LayerObject.

    + +

    Definition at line 27 of file PaintingArea.h.

    @@ -201,7 +205,9 @@ Public Attributes
    -

    Definition at line 27 of file PaintingArea.h.

    +

    width - Stores the width of a layer in pixels.

    + +

    Definition at line 31 of file PaintingArea.h.

    @@ -217,7 +223,9 @@ Public Attributes
    -

    Definition at line 29 of file PaintingArea.h.

    +

    widthOffset - Stores the number of pixles from the left side of the painting area.

    + +

    Definition at line 39 of file PaintingArea.h.

    diff --git a/docs/html/struct_triangle.html b/docs/html/struct_triangle.html index b07f1d8..46b4d8e 100644 --- a/docs/html/struct_triangle.html +++ b/docs/html/struct_triangle.html @@ -107,7 +107,7 @@ Public Attributes

    Detailed Description

    The Triangle struct holds the 3 vertices of a triangle.

    -

    Definition at line 10 of file IntelliTriangulation.h.

    +

    Definition at line 13 of file IntelliTriangulation.h.

    Member Data Documentation

    ◆ A

    @@ -121,7 +121,7 @@ Public Attributes
    -

    Definition at line 11 of file IntelliTriangulation.h.

    +

    Definition at line 14 of file IntelliTriangulation.h.

    @@ -137,7 +137,7 @@ Public Attributes
    -

    Definition at line 11 of file IntelliTriangulation.h.

    +

    Definition at line 14 of file IntelliTriangulation.h.

    @@ -153,7 +153,7 @@ Public Attributes
    -

    Definition at line 11 of file IntelliTriangulation.h.

    +

    Definition at line 14 of file IntelliTriangulation.h.

    diff --git a/docs/html/tst__unittest_8cpp.html b/docs/html/tst__unittest_8cpp.html new file mode 100644 index 0000000..20cd4a2 --- /dev/null +++ b/docs/html/tst__unittest_8cpp.html @@ -0,0 +1,131 @@ + + + + + + + +IntelliPhoto: src/tst_unittest.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    tst_unittest.cpp File Reference
    +
    +
    +
    #include <QtTest>
    +#include <QCoreApplication>
    +#include "GUI/IntelliPhotoGui.h"
    +#include "Image/IntelliImage.h"
    +#include "Image/IntelliRasterImage.h"
    +#include "Image/IntelliShapedImage.h"
    +#include "IntelliHelper/IntelliColorPicker.h"
    +#include "IntelliHelper/IntelliRenderSettings.h"
    +#include "IntelliHelper/IntelliToolsettings.h"
    +#include "IntelliHelper/IntelliTriangulation.h"
    +#include "Layer/PaintingArea.h"
    +#include "Tool/IntelliTool.h"
    +#include "Tool/IntelliToolCircle.h"
    +#include "Tool/IntelliToolFloodFill.h"
    +#include "Tool/IntelliToolLine.h"
    +#include "Tool/IntelliToolPen.h"
    +#include "Tool/IntelliToolPlain.h"
    +#include "Tool/IntelliToolPolygon.h"
    +#include "Tool/IntelliToolRectangle.h"
    +#include "tst_unittest.moc"
    +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    class  UnitTest
     
    +
    +
    + + + + diff --git a/docs/html/tst__unittest_8cpp_source.html b/docs/html/tst__unittest_8cpp_source.html new file mode 100644 index 0000000..b533ae0 --- /dev/null +++ b/docs/html/tst__unittest_8cpp_source.html @@ -0,0 +1,1852 @@ + + + + + + + +IntelliPhoto: src/tst_unittest.cpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    IntelliPhoto +  0.5 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tst_unittest.cpp
    +
    +
    +Go to the documentation of this file.
    1 #include <QtTest>
    +
    2 #include <QCoreApplication>
    +
    3 // add necessary includes here
    +
    4 #include "GUI/IntelliPhotoGui.h"
    +
    5 #include "Image/IntelliImage.h"
    + + + + + + +
    12 #include "Layer/PaintingArea.h"
    +
    13 #include "Tool/IntelliTool.h"
    +
    14 #include "Tool/IntelliToolCircle.h"
    + +
    16 #include "Tool/IntelliToolLine.h"
    +
    17 #include "Tool/IntelliToolPen.h"
    +
    18 #include "Tool/IntelliToolPlain.h"
    + + +
    21 
    +
    22 class UnitTest : public QObject
    +
    23 {
    +
    24 Q_OBJECT
    +
    25 private:
    +
    26 IntelliPhotoGui* gui;
    +
    27 PaintingArea* area;
    +
    28 
    +
    29 public:
    +
    30 UnitTest();
    +
    31 ~UnitTest();
    +
    32 
    +
    33 private slots:
    +
    34 void initTestCase();
    +
    35 void cleanupTestCase();
    +
    36 //void test_case1();
    +
    37 
    +
    39 
    +
    40 
    +
    41 //test painting area
    +
    42 void test_addLayer();
    +
    43 void test_deleteLayer();
    +
    44 void test_setActive();
    +
    45 void test_setAlpha();
    +
    46 void test_floodFill();
    +
    47 void test_moveActive();
    +
    48 void test_setPolygon();
    +
    49 void test_setLayerUp();
    +
    50 void test_setLayerDown();
    +
    51 
    +
    52 void test_createTools();
    +
    53 
    +
    54 //test Raster-Image operations
    +
    55 void test_RasterImage_drawPixel();
    +
    56 void test_RasterImage_drawLine();
    +
    57 void test_RasterImage_drawPoint();
    +
    58 void test_RasterImage_getDisplayable();
    +
    59 void test_RasterImage_getPixelColor();
    +
    60 void test_RasterImage_getImageData();
    +
    61 void test_RasterImage_setImageData();
    +
    62 
    +
    63 //test Shaped-Image operations
    +
    64 void test_ShapedImage_drawPixel();
    +
    65 void test_ShapedImage_drawLine();
    +
    66 void test_ShapedImage_drawPoint();
    +
    67 void test_ShapedImage_getDisplayable();
    +
    68 void test_ShapedImage_getPixelColor();
    +
    69 void test_ShapedImage_getImageData();
    +
    70 void test_ShapedImage_setImageData();
    +
    71 
    +
    72 //test tools
    +
    73 void test_Circle_fullDraw();
    +
    74 void test_Circle_interruptedDraw();
    +
    75 
    +
    76 void test_FloodFill_fullDraw();
    +
    77 void test_FloodFill_interruptedDraw();
    +
    78 
    +
    79 void test_Line_fullDraw();
    +
    80 void test_Line_interruptedDraw();
    +
    81 
    +
    82 void test_Pen_fullDraw();
    +
    83 void test_Pen_interruptedDraw();
    +
    84 
    +
    85 void test_Plain_fullDraw();
    +
    86 void test_Plain_interruptedDraw();
    +
    87 
    +
    88 void test_Polygon_fullDraw();
    +
    89 void test_Polygon_interruptedDraw();
    +
    90 
    +
    91 void test_Rectangle_fullDraw();
    +
    92 void test_Rectangle_interruptedDraw();
    +
    93 
    +
    94 //test Triangulation
    +
    95 void test_Triangulation_Coverage();
    +
    96 
    +
    97 
    +
    99 
    +
    100 //bench painting area
    +
    101 void bench_addLayer();
    +
    102 void bench_deleteLayer();
    +
    103 void bench_setActive();
    +
    104 void bench_setAlpha();
    +
    105 void bench_floodFill();
    +
    106 void bench_moveActive();
    +
    107 void bench_setPolygon();
    +
    108 void bench_setLayerUp();
    +
    109 void bench_setLayerDown();
    +
    110 
    +
    111 void bench_createTools();
    +
    112 
    +
    113 //bench Raster-Image operations
    +
    114 void bench_RasterImage_drawPixel();
    +
    115 void bench_RasterImage_drawLine();
    +
    116 void bench_RasterImage_drawPoint();
    +
    117 void bench_RasterImage_getDisplayable();
    +
    118 void bench_RasterImage_getPixelColor();
    +
    119 void bench_RasterImage_getImageData();
    +
    120 void bench_RasterImage_setImageData();
    +
    121 
    +
    122 //bench Shaped-Image operations
    +
    123 void bench_ShapedImage_drawPixel();
    +
    124 void bench_ShapedImage_drawLine();
    +
    125 void bench_ShapedImage_drawPoint();
    +
    126 void bench_ShapedImage_getDisplayable();
    +
    127 void bench_ShapedImage_getPixelColor();
    +
    128 void bench_ShapedImage_getImageData();
    +
    129 void bench_ShapedImage_setImageData();
    +
    130 
    +
    131 //bench tools
    +
    132 void bench_Circle_fullDraw();
    +
    133 void bench_Circle_interruptedDraw();
    +
    134 
    +
    135 void bench_FloodFill_fullDraw();
    +
    136 void bench_FloodFill_interruptedDraw();
    +
    137 
    +
    138 void bench_Line_fullDraw();
    +
    139 void bench_Line_interruptedDraw();
    +
    140 
    +
    141 void bench_Pen_fullDraw();
    +
    142 void bench_Pen_interruptedDraw();
    +
    143 
    +
    144 void bench_Plain_fullDraw();
    +
    145 void bench_Plain_interruptedDraw();
    +
    146 
    +
    147 void bench_Polygon_fullDraw();
    +
    148 void bench_Polygon_interruptedDraw();
    +
    149 
    +
    150 void bench_Rectangle_fullDraw();
    +
    151 void bench_Rectangle_interruptedDraw();
    +
    152 
    +
    153 //bench Triangulation
    +
    154 void bench_Triangulation_Coverage();
    +
    155 };
    +
    156 
    + +
    158 {
    +
    159  gui = new IntelliPhotoGui();
    +
    160  area = gui->paintingArea;
    +
    161 }
    +
    162 
    + +
    164 {
    +
    165 
    +
    166 }
    +
    167 
    +
    168 void UnitTest::initTestCase()
    +
    169 {
    +
    170 
    +
    171 }
    +
    172 
    +
    173 void UnitTest::cleanupTestCase()
    +
    174 {
    +
    175 
    +
    176 }
    +
    177 
    +
    178 //test painting area
    +
    179 void UnitTest::test_addLayer(){
    +
    180  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    181 
    +
    182  QCOMPARE(area->layerBundle.size(), 1);
    +
    183  QCOMPARE(area->activeLayer, 0);
    +
    184 
    +
    185  QCOMPARE(area->layerBundle[static_cast<size_t>(area->activeLayer)].width, 200);
    +
    186  QCOMPARE(area->layerBundle[static_cast<size_t>(area->activeLayer)].widthOffset, 10);
    +
    187 
    +
    188  QCOMPARE(area->layerBundle[static_cast<size_t>(area->activeLayer)].height, 200);
    +
    189  QCOMPARE(area->layerBundle[static_cast<size_t>(area->activeLayer)].heightOffset, 20);
    +
    190 
    +
    191  area->deleteLayer(0);
    +
    192 }
    +
    193 
    +
    194 void UnitTest::test_deleteLayer(){
    +
    195  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    196  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    197 
    +
    198  area->deleteLayer(3);
    +
    199  QCOMPARE(area->layerBundle.size(), 2);
    +
    200  QCOMPARE(area->activeLayer, 1);
    +
    201 
    +
    202  area->deleteLayer(-1);
    +
    203  QCOMPARE(area->layerBundle.size(), 2);
    +
    204  QCOMPARE(area->activeLayer, 1);
    +
    205 
    +
    206  area->deleteLayer(1);
    +
    207  QCOMPARE(area->layerBundle.size(), 1);
    +
    208  QCOMPARE(area->activeLayer, 0);
    +
    209 
    +
    210  area->deleteLayer(0);
    +
    211  QCOMPARE(area->layerBundle.size(), 0);
    +
    212  QCOMPARE(area->activeLayer, -1);
    +
    213 
    +
    214 }
    +
    215 
    +
    216 void UnitTest::test_setActive(){
    +
    217  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    218  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    219 
    +
    220  area->setLayerActive(0);
    +
    221  QCOMPARE(area->activeLayer, 0);
    +
    222  area->setLayerActive(1);
    +
    223  QCOMPARE(area->activeLayer, 1);
    +
    224  area->setLayerActive(-1);
    +
    225  QCOMPARE(area->activeLayer, 1);
    +
    226  area->setLayerActive(3);
    +
    227  QCOMPARE(area->activeLayer, 1);
    +
    228 
    +
    229  area->deleteLayer(0);
    +
    230  area->deleteLayer(0);
    +
    231 }
    +
    232 
    +
    233 void UnitTest::test_setAlpha(){
    +
    234  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    235  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    236 
    +
    237  area->setLayerAlpha(0,0);
    +
    238  QCOMPARE(area->layerBundle[0].alpha, 0);
    +
    239 
    +
    240  area->setLayerAlpha(0,255);
    +
    241  QCOMPARE(area->layerBundle[0].alpha, 255);
    +
    242 
    +
    243  area->setLayerAlpha(1,123);
    +
    244  QCOMPARE(area->layerBundle[1].alpha, 123);
    +
    245 
    +
    246  area->setLayerAlpha(1,-12);
    +
    247  QCOMPARE(area->layerBundle[1].alpha, 123);
    +
    248 
    +
    249  area->setLayerAlpha(1,300);
    +
    250  QCOMPARE(area->layerBundle[1].alpha, 123);
    +
    251 
    +
    252  area->deleteLayer(1);
    +
    253  area->deleteLayer(0);
    +
    254 }
    +
    255 
    +
    256 void UnitTest::test_floodFill(){
    +
    257  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    258 
    +
    259  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    260  QPoint point;
    +
    261  for(size_t i = 0; i<200; i++) {
    +
    262  point.setX(static_cast<int>(i));
    +
    263  for(size_t j = 0; i<200; i++) {
    +
    264  point.setY(static_cast<int>(j));
    +
    265  QVERIFY(area->layerBundle[static_cast<size_t>(area->activeLayer)].image->getPixelColor(point)==QColor(255,255,255,255));
    +
    266  }
    +
    267  }
    +
    268 
    +
    269  area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 0));
    +
    270  for(size_t i = 0; i<200; i++) {
    +
    271  point.setX(static_cast<int>(i));
    +
    272  for(size_t j = 0; i<200; i++) {
    +
    273  point.setY(static_cast<int>(j));
    +
    274  QVERIFY(area->layerBundle[static_cast<size_t>(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,0));
    +
    275  }
    +
    276  }
    +
    277 
    +
    278  area->deleteLayer(0);
    +
    279 }
    +
    280 
    +
    281 void UnitTest::test_moveActive(){
    +
    282  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    283  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    284 
    +
    285  area->layerBundle[1].image->drawPlain(QColor(0, 0, 0, 255));
    +
    286  QPoint point(0,0);
    +
    287 
    +
    288  area->moveActiveLayer(-1);
    +
    289  QCOMPARE(area->activeLayer, 0);
    +
    290  QVERIFY(area->layerBundle[static_cast<size_t>(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255));
    +
    291 
    +
    292  area->moveActiveLayer(-1);
    +
    293  QCOMPARE(area->activeLayer, 0);
    +
    294  QVERIFY(area->layerBundle[static_cast<size_t>(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255));
    +
    295 
    +
    296  area->moveActiveLayer(1);
    +
    297  QCOMPARE(area->activeLayer, 1);
    +
    298  QVERIFY(area->layerBundle[static_cast<size_t>(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255));
    +
    299 
    +
    300  area->moveActiveLayer(1);
    +
    301  QCOMPARE(area->activeLayer, 1);
    +
    302  QVERIFY(area->layerBundle[static_cast<size_t>(area->activeLayer)].image->getPixelColor(point)==QColor(0,0,0,255));
    +
    303 
    +
    304  area->deleteLayer(1);
    +
    305  area->deleteLayer(0);
    +
    306 }
    +
    307 
    +
    308 void UnitTest::test_setPolygon(){
    +
    309  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    310  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    311 
    +
    312  std::vector<QPoint> polygon{
    +
    313  QPoint(10,00),
    +
    314  QPoint(00,10),
    +
    315  QPoint(10,10),
    +
    316  QPoint(00,10)
    +
    317  };
    +
    318 
    +
    319  area->layerBundle[1].image->setPolygon(polygon);
    +
    320  IntelliShapedImage* image = dynamic_cast<IntelliShapedImage*>(area->layerBundle[1].image);
    +
    321  QCOMPARE(image->polygonData[0], polygon[0]);
    +
    322  QCOMPARE(image->polygonData[1], polygon[1]);
    +
    323  QCOMPARE(image->polygonData[2], polygon[2]);
    +
    324  QCOMPARE(image->polygonData[3], polygon[3]);
    +
    325 
    +
    326  area->deleteLayer(1);
    +
    327  area->deleteLayer(0);
    +
    328 }
    +
    329 
    +
    330 void UnitTest::test_setLayerUp(){
    +
    331  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    332  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    333 
    +
    334  area->selectLayerUp();
    +
    335  QCOMPARE(area->activeLayer, 1);
    +
    336 
    +
    337  area->setLayerActive(0);
    +
    338  QCOMPARE(area->activeLayer, 0);
    +
    339 
    +
    340  area->selectLayerUp();
    +
    341  QCOMPARE(area->activeLayer, 1);
    +
    342 
    +
    343  area->deleteLayer(1);
    +
    344  area->deleteLayer(0);
    +
    345 }
    +
    346 
    +
    347 void UnitTest::test_setLayerDown(){
    +
    348  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    349  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    350 
    +
    351  area->selectLayerDown();
    +
    352  QCOMPARE(area->activeLayer, 0);
    +
    353 
    +
    354  area->selectLayerDown();
    +
    355  QCOMPARE(area->activeLayer, 0);
    +
    356 
    +
    357  area->deleteLayer(1);
    +
    358  area->deleteLayer(0);
    +
    359 
    +
    360 }
    +
    361 
    +
    362 void UnitTest::test_createTools(){
    +
    363  QVERIFY(area->Tool == nullptr);
    +
    364 
    +
    365  area->createPenTool();
    +
    366  QVERIFY(dynamic_cast<IntelliToolPen*>(area->Tool) != nullptr);
    +
    367 
    +
    368  area->createLineTool();
    +
    369  QVERIFY(dynamic_cast<IntelliToolLine*>(area->Tool) != nullptr);
    +
    370 
    +
    371  area->createPlainTool();
    +
    372  QVERIFY(dynamic_cast<IntelliToolPlainTool*>(area->Tool) != nullptr);
    +
    373 
    +
    374  area->createCircleTool();
    +
    375  QVERIFY(dynamic_cast<IntelliToolCircle*>(area->Tool) != nullptr);
    +
    376 
    +
    377  area->createPolygonTool();
    +
    378  QVERIFY(dynamic_cast<IntelliToolPolygon*>(area->Tool) != nullptr);
    +
    379 
    +
    380  area->createFloodFillTool();
    +
    381  QVERIFY(dynamic_cast<IntelliToolFloodFill*>(area->Tool) != nullptr);
    +
    382 
    +
    383  area->createRectangleTool();
    +
    384  QVERIFY(dynamic_cast<IntelliToolRectangle*>(area->Tool) != nullptr);
    +
    385 }
    +
    386 
    +
    387 //test Raster-Image operations
    +
    388 void UnitTest::test_RasterImage_drawPixel(){
    +
    389  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    390 
    +
    391  QPoint point(0,0);
    +
    392 
    +
    393  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    394  area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255));
    +
    395 
    +
    396  QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255));
    +
    397 
    +
    398  area->deleteLayer(0);
    +
    399 }
    +
    400 
    +
    401 void UnitTest::test_RasterImage_drawLine(){
    +
    402  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    403 
    +
    404  QPoint point1(0,0);
    +
    405  QPoint point2(10,10);
    +
    406  QPoint point3(5,5);
    +
    407  QPoint point4(6,5);
    +
    408 
    +
    409  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    410  area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1);
    +
    411  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255));
    +
    412  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255));
    +
    413  QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255));
    +
    414  QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255));
    +
    415 
    +
    416  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    417  area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3);
    +
    418  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255));
    +
    419  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255));
    +
    420  QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255));
    +
    421  QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255));
    +
    422 
    +
    423  area->deleteLayer(0);
    +
    424 }
    +
    425 
    +
    426 void UnitTest::test_RasterImage_drawPoint(){
    +
    427  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    428 
    +
    429  QPoint point1(5,5);
    +
    430  QPoint point2(5,6);
    +
    431 
    +
    432  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    433  area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1);
    +
    434  QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255));
    +
    435  QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255));
    +
    436 
    +
    437 
    +
    438  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    439  area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5);
    +
    440  QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255));
    +
    441  QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255));
    +
    442 
    +
    443  area->deleteLayer(0);
    +
    444 }
    +
    445 
    +
    446 void UnitTest::test_RasterImage_getDisplayable(){
    +
    447  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    448 
    +
    449  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    450  QImage img = area->layerBundle[0].image->getDisplayable(QSize(200,200),255);
    +
    451  QPoint point;
    +
    452  for(size_t i=0; i<200; i++) {
    +
    453  point.setX(static_cast<int>(i));
    +
    454  for(size_t j=0; j<200; j++) {
    +
    455  point.setY(static_cast<int>(j));
    +
    456  QVERIFY(img.pixelColor(point) == QColor(255,255,255,255));
    +
    457  }
    +
    458  }
    +
    459 
    +
    460  area->deleteLayer(0);
    +
    461 }
    +
    462 
    +
    463 void UnitTest::test_RasterImage_getPixelColor(){
    +
    464  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    465 
    +
    466  QPoint point(0,0);
    +
    467  area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 255));
    +
    468  QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255));
    +
    469 
    +
    470  area->deleteLayer(0);
    +
    471 }
    +
    472 
    +
    473 void UnitTest::test_RasterImage_getImageData(){
    + +
    475 
    +
    476  QImage img(2,2, QImage::Format_ARGB32);
    +
    477  img.setPixelColor(0,0, Qt::red);
    +
    478  img.setPixelColor(0,1, Qt::yellow);
    +
    479  img.setPixelColor(1,0, Qt::blue);
    +
    480  img.setPixelColor(1,1, Qt::green);
    +
    481 
    +
    482  area->layerBundle[0].image->setImageData(img);
    +
    483  img = img.convertToFormat(QImage::Format_Indexed8);
    +
    484  QImage cpy = area->layerBundle[0].image->getImageData();
    +
    485 
    +
    486  QPoint point1(0,0);
    +
    487  QPoint point2(0,1);
    +
    488  QPoint point3(1,0);
    +
    489  QPoint point4(1,1);
    +
    490  QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1));
    +
    491  QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2));
    +
    492  QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3));
    +
    493  QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4));
    +
    494 
    +
    495  area->deleteLayer(0);
    +
    496 }
    +
    497 
    +
    498 void UnitTest::test_RasterImage_setImageData(){
    + +
    500 
    +
    501  QImage img(2,2, QImage::Format_ARGB32);
    +
    502  img.setPixelColor(0,0, Qt::red);
    +
    503  img.setPixelColor(0,1, Qt::yellow);
    +
    504  img.setPixelColor(1,0, Qt::blue);
    +
    505  img.setPixelColor(1,1, Qt::green);
    +
    506 
    +
    507  area->layerBundle[0].image->setImageData(img);
    +
    508  img = img.convertToFormat(QImage::Format_Indexed8);
    +
    509 
    +
    510  QPoint point1(0,0);
    +
    511  QPoint point2(0,1);
    +
    512  QPoint point3(1,0);
    +
    513  QPoint point4(1,1);
    +
    514  QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1));
    +
    515  QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2));
    +
    516  QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3));
    +
    517  QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4));
    +
    518 
    +
    519  area->deleteLayer(0);
    +
    520 }
    +
    521 
    +
    522 //test Shaped-Image operations
    +
    523 void UnitTest::test_ShapedImage_drawPixel(){
    +
    524  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    525 
    +
    526  QPoint point(0,0);
    +
    527 
    +
    528  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    529  area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255));
    +
    530 
    +
    531  QVERIFY(area->layerBundle[0].image->getPixelColor(point) == QColor(0,0,0,255));
    +
    532 
    +
    533  area->deleteLayer(0);
    +
    534 }
    +
    535 
    +
    536 void UnitTest::test_ShapedImage_drawLine(){
    +
    537  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    538 
    +
    539  QPoint point1(0,0);
    +
    540  QPoint point2(10,10);
    +
    541  QPoint point3(5,5);
    +
    542  QPoint point4(6,5);
    +
    543 
    +
    544  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    545  area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),1);
    +
    546  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255));
    +
    547  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255));
    +
    548  QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255));
    +
    549  QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(255,255,255,255));
    +
    550 
    +
    551  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    552  area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255),3);
    +
    553  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(0,0,0,255));
    +
    554  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(0,0,0,255));
    +
    555  QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(0,0,0,255));
    +
    556  QVERIFY(area->layerBundle[0].image->getPixelColor(point4)==QColor(0,0,0,255));
    +
    557 
    +
    558  area->deleteLayer(0);
    +
    559 }
    +
    560 
    +
    561 void UnitTest::test_ShapedImage_drawPoint(){
    +
    562  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    563 
    +
    564  QPoint point1(5,5);
    +
    565  QPoint point2(5,6);
    +
    566 
    +
    567  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    568  area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),1);
    +
    569  QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255));
    +
    570  QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(255,255,255,255));
    +
    571 
    +
    572 
    +
    573  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    574  area->layerBundle[0].image->drawPoint(point1, QColor(0,0,0,255),5);
    +
    575  QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == QColor(0,0,0,255));
    +
    576  QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == QColor(0,0,0,255));
    +
    577 
    +
    578  area->deleteLayer(0);
    +
    579 }
    +
    580 
    +
    581 void UnitTest::test_ShapedImage_getDisplayable(){
    + +
    583  std::vector<QPoint> points{
    +
    584  QPoint(10,00),
    +
    585  QPoint(00,10),
    +
    586  QPoint(10,20),
    +
    587  QPoint(20,10)
    +
    588  };
    +
    589 
    +
    590  std::vector<QPoint> test{
    +
    591  QPoint(00,00),
    +
    592  QPoint(00,20),
    +
    593  QPoint(20,00),
    +
    594  QPoint(20,20),
    +
    595  QPoint(10,10)
    +
    596  };
    +
    597  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    598  area->layerBundle[0].image->setPolygon(points);
    +
    599  QSize size(21,21);
    +
    600  QImage img = area->layerBundle[0].image->getDisplayable(size,255);
    +
    601 
    +
    602  QCOMPARE(img.pixelColor(points[0]).alpha(), 255);
    +
    603  QCOMPARE(img.pixelColor(points[1]).alpha(), 255);
    +
    604  QCOMPARE(img.pixelColor(points[2]).alpha(), 255);
    +
    605  QCOMPARE(img.pixelColor(points[3]).alpha(), 255);
    +
    606 
    +
    607  QCOMPARE(img.pixelColor(test[4]).alpha(), 255);
    +
    608  QCOMPARE(img.pixelColor(test[0]).alpha(), 0);
    +
    609  QCOMPARE(img.pixelColor(test[1]).alpha(), 0);
    +
    610  QCOMPARE(img.pixelColor(test[2]).alpha(), 0);
    +
    611  QCOMPARE(img.pixelColor(test[3]).alpha(), 0);
    +
    612 
    +
    613  area->deleteLayer(0);
    +
    614 }
    +
    615 
    +
    616 void UnitTest::test_ShapedImage_getPixelColor(){
    +
    617  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    618 
    +
    619  QPoint point(0,0);
    +
    620  area->layerBundle[0].image->drawPlain(QColor(0, 0, 0, 255));
    +
    621  QVERIFY(area->layerBundle[0].image->getPixelColor(point)==QColor(0,0,0,255));
    +
    622 
    +
    623  area->deleteLayer(0);
    +
    624 }
    +
    625 
    +
    626 void UnitTest::test_ShapedImage_getImageData(){
    + +
    628 
    +
    629  QImage img(2,2, QImage::Format_ARGB32);
    +
    630  img.setPixelColor(0,0, Qt::red);
    +
    631  img.setPixelColor(0,1, Qt::yellow);
    +
    632  img.setPixelColor(1,0, Qt::blue);
    +
    633  img.setPixelColor(1,1, Qt::green);
    +
    634 
    +
    635  area->layerBundle[0].image->setImageData(img);
    +
    636  img = img.convertToFormat(QImage::Format_Indexed8);
    +
    637  QImage cpy = area->layerBundle[0].image->getImageData();
    +
    638 
    +
    639  QPoint point1(0,0);
    +
    640  QPoint point2(0,1);
    +
    641  QPoint point3(1,0);
    +
    642  QPoint point4(1,1);
    +
    643  QVERIFY(cpy.pixelColor(point1) == img.pixelColor(point1));
    +
    644  QVERIFY(cpy.pixelColor(point2) == img.pixelColor(point2));
    +
    645  QVERIFY(cpy.pixelColor(point3) == img.pixelColor(point3));
    +
    646  QVERIFY(cpy.pixelColor(point4) == img.pixelColor(point4));
    +
    647 
    +
    648  area->deleteLayer(0);
    +
    649 }
    +
    650 
    +
    651 void UnitTest::test_ShapedImage_setImageData(){
    + +
    653 
    +
    654  QImage img(2,2, QImage::Format_ARGB32);
    +
    655  img.setPixelColor(0,0, Qt::red);
    +
    656  img.setPixelColor(0,1, Qt::yellow);
    +
    657  img.setPixelColor(1,0, Qt::blue);
    +
    658  img.setPixelColor(1,1, Qt::green);
    +
    659 
    +
    660  area->layerBundle[0].image->setImageData(img);
    +
    661  img = img.convertToFormat(QImage::Format_Indexed8);
    +
    662 
    +
    663  QPoint point1(0,0);
    +
    664  QPoint point2(0,1);
    +
    665  QPoint point3(1,0);
    +
    666  QPoint point4(1,1);
    +
    667  QVERIFY(area->layerBundle[0].image->getPixelColor(point1) == img.pixelColor(point1));
    +
    668  QVERIFY(area->layerBundle[0].image->getPixelColor(point2) == img.pixelColor(point2));
    +
    669  QVERIFY(area->layerBundle[0].image->getPixelColor(point3) == img.pixelColor(point3));
    +
    670  QVERIFY(area->layerBundle[0].image->getPixelColor(point4) == img.pixelColor(point4));
    +
    671 
    +
    672  area->deleteLayer(0);
    +
    673 }
    +
    674 
    +
    675 //test tools
    +
    676 void UnitTest::test_Circle_fullDraw(){
    +
    677  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    678  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    679  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    680  area->createCircleTool();
    +
    681  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    682 
    +
    683  QPoint point1(100,100);
    +
    684  QPoint point2(150,100);
    +
    685  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    686  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    687  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    688 
    +
    689 
    +
    690  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getSecondColor());
    +
    691  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor());
    +
    692 
    +
    693  area->deleteLayer(0);
    +
    694 }
    +
    695 
    +
    696 void UnitTest::test_Circle_interruptedDraw(){
    +
    697  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    698  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    699  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    700  area->createCircleTool();
    +
    701  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    702 
    +
    703  QPoint point1(100,100);
    +
    704  QPoint point2(150,100);
    +
    705  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    706  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    707  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    708  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    709  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    710 
    +
    711 
    +
    712  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255));
    +
    713  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255));
    +
    714 
    +
    715  area->deleteLayer(0);
    +
    716 
    +
    717 }
    +
    718 
    +
    719 
    +
    720 void UnitTest::test_FloodFill_fullDraw(){
    +
    721  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    722  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    723  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    724  area->createFloodFillTool();
    +
    725  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    726 
    +
    727  QPoint point1(100,100);
    +
    728  QPoint point2(150,100);
    +
    729  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    730  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    731  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    732 
    +
    733 
    +
    734  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor());
    +
    735  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor());
    +
    736 
    +
    737  area->deleteLayer(0);
    +
    738 }
    +
    739 
    +
    740 void UnitTest::test_FloodFill_interruptedDraw(){
    +
    741  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    742  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    743  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    744  area->createFloodFillTool();
    +
    745  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    746 
    +
    747  QPoint point1(100,100);
    +
    748  QPoint point2(150,100);
    +
    749  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    750  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    751  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    752  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    753  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    754 
    +
    755 
    +
    756  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255));
    +
    757  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255));
    +
    758 
    +
    759  area->deleteLayer(0);
    +
    760 }
    +
    761 
    +
    762 
    +
    763 void UnitTest::test_Line_fullDraw(){
    +
    764  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    765  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    766  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    767  area->createLineTool();
    +
    768  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    769 
    +
    770  QPoint point1(100,100);
    +
    771  QPoint point2(150,100);
    +
    772  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    773  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    774  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    775 
    +
    776 
    +
    777  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor());
    +
    778  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor());
    +
    779 
    +
    780  area->deleteLayer(0);
    +
    781 }
    +
    782 
    +
    783 void UnitTest::test_Line_interruptedDraw(){
    +
    784  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    785  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    786  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    787  area->createLineTool();
    +
    788  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    789 
    +
    790  QPoint point1(100,100);
    +
    791  QPoint point2(150,100);
    +
    792  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    793  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    794  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    795  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    796  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    797 
    +
    798 
    +
    799  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255));
    +
    800  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255));
    +
    801 
    +
    802  area->deleteLayer(0);
    +
    803 }
    +
    804 
    +
    805 void UnitTest::test_Pen_fullDraw(){
    +
    806  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    807  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    808  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    809  area->createPenTool();
    +
    810  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    811 
    +
    812  QPoint point1(100,100);
    +
    813  QPoint point2(150,100);
    +
    814  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    815  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    816  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    817 
    +
    818 
    +
    819  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor());
    +
    820  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor());
    +
    821 
    +
    822  area->deleteLayer(0);
    +
    823 }
    +
    824 
    +
    825 void UnitTest::test_Pen_interruptedDraw(){
    +
    826  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    827  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    828  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    829  area->createPenTool();
    +
    830  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    831 
    +
    832  QPoint point1(100,100);
    +
    833  QPoint point2(150,100);
    +
    834  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    835  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    836  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    837  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    838  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    839 
    +
    840 
    +
    841  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255));
    +
    842  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255));
    +
    843 
    +
    844  area->deleteLayer(0);
    +
    845 }
    +
    846 
    +
    847 void UnitTest::test_Plain_fullDraw(){
    +
    848  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    849  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    850  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    851  area->createPlainTool();
    +
    852  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    853 
    +
    854  QPoint point1(100,100);
    +
    855  QPoint point2(150,100);
    +
    856  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    857  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    858  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    859 
    +
    860 
    +
    861  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor());
    +
    862  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor());
    +
    863 
    +
    864  area->deleteLayer(0);
    +
    865 }
    +
    866 
    +
    867 void UnitTest::test_Plain_interruptedDraw(){
    +
    868  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    869  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    870  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    871  area->createPlainTool();
    +
    872  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    873 
    +
    874  QPoint point1(100,100);
    +
    875  QPoint point2(150,100);
    +
    876  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    877  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    878  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    879  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    880  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    881 
    +
    882 
    +
    883  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255));
    +
    884  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255));
    +
    885 
    +
    886  area->deleteLayer(0);
    +
    887 }
    +
    888 
    +
    889 void UnitTest::test_Polygon_fullDraw(){
    + +
    891  std::vector<QPoint> points{
    +
    892  QPoint(10,00),
    +
    893  QPoint(00,10),
    +
    894  QPoint(10,20),
    +
    895  QPoint(20,10)
    +
    896  };
    +
    897 
    +
    898  std::vector<QPoint> test{
    +
    899  QPoint(00,00),
    +
    900  QPoint(00,20),
    +
    901  QPoint(20,00),
    +
    902  QPoint(20,20),
    +
    903  QPoint(10,10)
    +
    904  };
    +
    905 
    +
    906  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    907  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    908  area->createPolygonTool();
    +
    909  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    910 
    +
    911  area->Tool->onMouseLeftPressed(points[0].x(), points[0].y());
    +
    912  area->Tool->onMouseLeftReleased(points[0].x(), points[0].y());
    +
    913  area->Tool->onMouseMoved(points[1].x(), points[1].y());
    +
    914 
    +
    915  area->Tool->onMouseLeftPressed(points[1].x(), points[1].y());
    +
    916  area->Tool->onMouseLeftReleased(points[1].x(), points[1].y());
    +
    917  area->Tool->onMouseMoved(points[2].x(), points[2].y());
    +
    918 
    +
    919  area->Tool->onMouseLeftPressed(points[2].x(), points[2].y());
    +
    920  area->Tool->onMouseLeftReleased(points[2].x(), points[2].y());
    +
    921  area->Tool->onMouseMoved(points[3].x(), points[3].y());
    +
    922 
    +
    923  area->Tool->onMouseLeftPressed(points[3].x(), points[3].y());
    +
    924  area->Tool->onMouseLeftReleased(points[3].x(), points[3].y());
    +
    925  area->Tool->onMouseMoved(points[0].x(), points[0].y());
    +
    926 
    +
    927  area->Tool->onMouseLeftPressed(points[0].x(), points[0].y());
    +
    928  area->Tool->onMouseLeftReleased(points[0].x(), points[0].y());
    +
    929 
    +
    930  QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==area->colorPicker.getFirstColor());
    +
    931  QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==area->colorPicker.getFirstColor());
    +
    932  QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==area->colorPicker.getFirstColor());
    +
    933  QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==area->colorPicker.getFirstColor());
    +
    934 
    +
    935 
    +
    936  QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==area->colorPicker.getSecondColor());
    +
    937  QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255));
    +
    938  QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255));
    +
    939  QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255));
    +
    940  QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255));
    +
    941 
    +
    942  area->deleteLayer(0);
    +
    943 }
    +
    944 
    +
    945 
    +
    946 void UnitTest::test_Polygon_interruptedDraw(){
    +
    947  area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    948  std::vector<QPoint> points{
    +
    949  QPoint(100,000),
    +
    950  QPoint(000,100),
    +
    951  QPoint(100,200),
    +
    952  QPoint(200,100)
    +
    953  };
    +
    954 
    +
    955  std::vector<QPoint> test{
    +
    956  QPoint(000,000),
    +
    957  QPoint(000,200),
    +
    958  QPoint(200,000),
    +
    959  QPoint(200,200),
    +
    960  QPoint(100,100)
    +
    961  };
    +
    962 
    +
    963  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    964  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    965  area->createPolygonTool();
    +
    966  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    967 
    +
    968  area->Tool->onMouseLeftPressed(points[0].x(), points[0].y());
    +
    969  area->Tool->onMouseLeftReleased(points[0].x(), points[0].y());
    +
    970  area->Tool->onMouseMoved(points[1].x(), points[1].y());
    +
    971 
    +
    972  area->Tool->onMouseLeftPressed(points[1].x(), points[1].y());
    +
    973  area->Tool->onMouseLeftReleased(points[1].x(), points[1].y());
    +
    974  area->Tool->onMouseMoved(points[2].x(), points[2].y());
    +
    975 
    +
    976  area->Tool->onMouseLeftPressed(points[2].x(), points[2].y());
    +
    977  area->Tool->onMouseLeftReleased(points[2].x(), points[2].y());
    +
    978  area->Tool->onMouseMoved(points[3].x(), points[3].y());
    +
    979 
    +
    980  area->Tool->onMouseLeftPressed(points[3].x(), points[3].y());
    +
    981  area->Tool->onMouseLeftReleased(points[3].x(), points[3].y());
    +
    982 
    +
    983  area->Tool->onMouseRightPressed(points[0].x(), points[0].y());
    +
    984  area->Tool->onMouseRightReleased(points[0].x(), points[0].y());
    +
    985 
    +
    986 
    +
    987  QVERIFY(area->layerBundle[0].image->getPixelColor(points[0])==QColor(255,0,0,255));
    +
    988  QVERIFY(area->layerBundle[0].image->getPixelColor(points[1])==QColor(255,0,0,255));
    +
    989  QVERIFY(area->layerBundle[0].image->getPixelColor(points[2])==QColor(255,0,0,255));
    +
    990  QVERIFY(area->layerBundle[0].image->getPixelColor(points[3])==QColor(255,0,0,255));
    +
    991 
    +
    992  QVERIFY(area->layerBundle[0].image->getPixelColor(test[4])==QColor(255,0,0,255));
    +
    993  QVERIFY(area->layerBundle[0].image->getPixelColor(test[0])==QColor(255,0,0,255));
    +
    994  QVERIFY(area->layerBundle[0].image->getPixelColor(test[1])==QColor(255,0,0,255));
    +
    995  QVERIFY(area->layerBundle[0].image->getPixelColor(test[2])==QColor(255,0,0,255));
    +
    996  QVERIFY(area->layerBundle[0].image->getPixelColor(test[3])==QColor(255,0,0,255));
    +
    997 
    +
    998  area->deleteLayer(0);
    +
    999 }
    +
    1000 
    +
    1001 
    +
    1002 void UnitTest::test_Rectangle_fullDraw(){
    +
    1003  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1004  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1005  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1006  area->createRectangleTool();
    +
    1007  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1008 
    +
    1009  QPoint point1(100,100);
    +
    1010  QPoint point2(150,150);
    +
    1011  QPoint point3(125,125);
    +
    1012  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1013  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1014  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1015 
    +
    1016 
    +
    1017  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==area->colorPicker.getFirstColor());
    +
    1018  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==area->colorPicker.getFirstColor());
    +
    1019  QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==area->colorPicker.getSecondColor());
    +
    1020 
    +
    1021  area->deleteLayer(0);
    +
    1022 }
    +
    1023 
    +
    1024 void UnitTest::test_Rectangle_interruptedDraw(){
    +
    1025  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1026  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1027  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1028  area->createRectangleTool();
    +
    1029  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1030 
    +
    1031  QPoint point1(100,100);
    +
    1032  QPoint point2(150,150);
    +
    1033  QPoint point3(125,125);
    +
    1034  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1035  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1036  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1037  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1038  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1039 
    +
    1040  QVERIFY(area->layerBundle[0].image->getPixelColor(point1)==QColor(255,0,0,255));
    +
    1041  QVERIFY(area->layerBundle[0].image->getPixelColor(point2)==QColor(255,0,0,255));
    +
    1042  QVERIFY(area->layerBundle[0].image->getPixelColor(point3)==QColor(255,0,0,255));
    +
    1043 
    +
    1044  area->deleteLayer(0);
    +
    1045 }
    +
    1046 
    +
    1047 
    +
    1048 //test Triangulation
    +
    1049 void UnitTest::test_Triangulation_Coverage(){
    +
    1050  std::vector<QPoint> points{
    +
    1051  QPoint(10,00),
    +
    1052  QPoint(00,10),
    +
    1053  QPoint(10,20),
    +
    1054  QPoint(20,10)
    +
    1055  };
    +
    1056  std::vector<QPoint> test{
    +
    1057  QPoint(00,00),
    +
    1058  QPoint(00,20),
    +
    1059  QPoint(20,00),
    +
    1060  QPoint(20,20),
    +
    1061  QPoint(10,10)
    +
    1062  };
    +
    1063  std::vector<Triangle> tria = IntelliTriangulation::calculateTriangles(points);
    +
    1064  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[0]), true);
    +
    1065  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[1]), true);
    +
    1066  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[2]), true);
    +
    1067  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[3]), true);
    +
    1068 
    +
    1069  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[4]), true);
    +
    1070  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[0]), false);
    +
    1071  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[1]), false);
    +
    1072  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[2]), false);
    +
    1073  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false);
    +
    1074 }
    +
    1075 
    +
    1076 
    +
    1078 
    +
    1079 void UnitTest::bench_addLayer(){
    +
    1080  QBENCHMARK{
    + +
    1082  }
    +
    1083  area->deleteLayer(0);
    +
    1084 }
    +
    1085 
    +
    1086 void UnitTest::bench_deleteLayer(){
    + +
    1088  QBENCHMARK{
    +
    1089  area->deleteLayer(0);
    +
    1090  }
    +
    1091 }
    +
    1092 
    +
    1093 void UnitTest::bench_setActive(){
    + + +
    1096 
    +
    1097  QBENCHMARK{
    +
    1098  area->setLayerActive(0);
    +
    1099  }
    +
    1100 
    +
    1101  area->deleteLayer(1);
    +
    1102  area->deleteLayer(0);
    +
    1103 }
    +
    1104 
    +
    1105 void UnitTest::bench_setAlpha(){
    + +
    1107 
    +
    1108  QBENCHMARK{
    +
    1109  area->setLayerAlpha(0,0);
    +
    1110  }
    +
    1111 
    +
    1112  area->deleteLayer(0);
    +
    1113 }
    +
    1114 
    +
    1115 void UnitTest::bench_floodFill(){
    + +
    1117 
    +
    1118  QBENCHMARK{
    +
    1119  area->layerBundle[0].image->drawPlain(QColor(255, 255, 255, 255));
    +
    1120  }
    +
    1121 
    +
    1122  area->deleteLayer(0);
    +
    1123 }
    +
    1124 
    +
    1125 void UnitTest::bench_moveActive(){
    + + +
    1128 
    +
    1129  area->setLayerActive(0);
    +
    1130  QBENCHMARK{
    +
    1131  area->moveActiveLayer(1);
    +
    1132  }
    +
    1133 
    +
    1134  area->deleteLayer(1);
    +
    1135  area->deleteLayer(0);
    +
    1136 }
    +
    1137 
    +
    1138 void UnitTest::bench_setPolygon(){
    +
    1139  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1140 
    +
    1141  std::vector<QPoint> polygon{
    +
    1142  QPoint(10,00),
    +
    1143  QPoint(00,10),
    +
    1144  QPoint(10,10),
    +
    1145  QPoint(00,10)
    +
    1146  };
    +
    1147 
    +
    1148  QBENCHMARK{
    +
    1149  area->layerBundle[0].image->setPolygon(polygon);
    +
    1150  }
    +
    1151 
    +
    1152  area->deleteLayer(0);
    +
    1153 }
    +
    1154 
    +
    1155 void UnitTest::bench_setLayerUp(){
    +
    1156  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1157  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1158 
    +
    1159  area->setLayerActive(0);
    +
    1160  QBENCHMARK{
    +
    1161  area->selectLayerUp();
    +
    1162  }
    +
    1163 
    +
    1164  area->deleteLayer(1);
    +
    1165  area->deleteLayer(0);
    +
    1166 }
    +
    1167 
    +
    1168 void UnitTest::bench_setLayerDown(){
    +
    1169  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1170  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1171 
    +
    1172  QBENCHMARK{
    +
    1173  area->selectLayerDown();
    +
    1174  }
    +
    1175 
    +
    1176  area->deleteLayer(1);
    +
    1177  area->deleteLayer(0);
    +
    1178 }
    +
    1179 
    +
    1180 void UnitTest::bench_createTools(){
    +
    1181  QBENCHMARK{
    +
    1182  area->createPenTool();
    +
    1183  }
    +
    1184 
    +
    1185  QBENCHMARK{
    +
    1186  area->createLineTool();
    +
    1187  }
    +
    1188 
    +
    1189  QBENCHMARK{
    +
    1190  area->createPlainTool();
    +
    1191  }
    +
    1192 
    +
    1193  QBENCHMARK{
    +
    1194  area->createCircleTool();
    +
    1195  }
    +
    1196 
    +
    1197  QBENCHMARK{
    +
    1198  area->createPolygonTool();
    +
    1199  }
    +
    1200 
    +
    1201  QBENCHMARK{
    +
    1202  area->createFloodFillTool();
    +
    1203  }
    +
    1204 
    +
    1205  QBENCHMARK{
    +
    1206  area->createRectangleTool();
    +
    1207  }
    +
    1208 }
    +
    1209 
    +
    1210 void UnitTest::bench_RasterImage_drawPixel(){
    +
    1211  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1212 
    +
    1213  QPoint point(0,0);
    +
    1214 
    +
    1215  QBENCHMARK{
    +
    1216  area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255));
    +
    1217  }
    +
    1218 
    +
    1219  area->deleteLayer(0);
    +
    1220 }
    +
    1221 
    +
    1222 void UnitTest::bench_RasterImage_drawLine(){
    +
    1223  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1224 
    +
    1225  QPoint point1(000,000);
    +
    1226  QPoint point2(200,200);
    +
    1227 
    +
    1228  QBENCHMARK{
    +
    1229  area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1);
    +
    1230  }
    +
    1231 
    +
    1232  area->deleteLayer(0);
    +
    1233 }
    +
    1234 
    +
    1235 void UnitTest::bench_RasterImage_drawPoint(){
    +
    1236  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1237 
    +
    1238  QPoint point(000,000);
    +
    1239 
    +
    1240  QBENCHMARK{
    +
    1241  area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1);
    +
    1242  }
    +
    1243 
    +
    1244  area->deleteLayer(0);
    +
    1245 }
    +
    1246 
    +
    1247 void UnitTest::bench_RasterImage_getDisplayable(){
    +
    1248  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1249 
    +
    1250  QBENCHMARK{
    +
    1251  area->layerBundle[0].image->getDisplayable(QSize(200,200),255);
    +
    1252  }
    +
    1253 
    +
    1254  area->deleteLayer(0);
    +
    1255 }
    +
    1256 
    +
    1257 void UnitTest::bench_RasterImage_getPixelColor(){
    +
    1258  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1259 
    +
    1260  QPoint point(000,000);
    +
    1261 
    +
    1262  QBENCHMARK{
    +
    1263  area->layerBundle[0].image->getPixelColor(point);
    +
    1264  }
    +
    1265 
    +
    1266  area->deleteLayer(0);
    +
    1267 }
    +
    1268 
    +
    1269 void UnitTest::bench_RasterImage_getImageData(){
    +
    1270  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1271 
    +
    1272  QBENCHMARK{
    +
    1273  area->layerBundle[0].image->getImageData();
    +
    1274  }
    +
    1275 
    +
    1276  area->deleteLayer(0);
    +
    1277 }
    +
    1278 
    +
    1279 void UnitTest::bench_RasterImage_setImageData(){
    +
    1280  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1281 
    +
    1282  QImage img = area->layerBundle[0].image->getImageData();
    +
    1283  QBENCHMARK{
    +
    1284  area->layerBundle[0].image->setImageData(img);
    +
    1285  }
    +
    1286 
    +
    1287  area->deleteLayer(0);
    +
    1288 }
    +
    1289 
    +
    1290 void UnitTest::bench_ShapedImage_drawPixel(){
    +
    1291  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1292 
    +
    1293  QPoint point(0,0);
    +
    1294 
    +
    1295  QBENCHMARK{
    +
    1296  area->layerBundle[0].image->drawPixel(point, QColor(0,0,0,255));
    +
    1297  }
    +
    1298 
    +
    1299  area->deleteLayer(0);
    +
    1300 }
    +
    1301 
    +
    1302 void UnitTest::bench_ShapedImage_drawLine(){
    +
    1303  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1304 
    +
    1305  QPoint point1(000,000);
    +
    1306  QPoint point2(200,200);
    +
    1307 
    +
    1308  QBENCHMARK{
    +
    1309  area->layerBundle[0].image->drawLine(point1, point2, QColor(0,0,0,255), 1);
    +
    1310  }
    +
    1311 
    +
    1312  area->deleteLayer(0);
    +
    1313 }
    +
    1314 
    +
    1315 void UnitTest::bench_ShapedImage_drawPoint(){
    +
    1316  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1317 
    +
    1318  QPoint point(000,000);
    +
    1319 
    +
    1320  QBENCHMARK{
    +
    1321  area->layerBundle[0].image->drawPoint(point, QColor(0,0,0,255), 1);
    +
    1322  }
    +
    1323 
    +
    1324  area->deleteLayer(0);
    +
    1325 }
    +
    1326 
    +
    1327 void UnitTest::bench_ShapedImage_getDisplayable(){
    +
    1328  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1329 
    +
    1330  QBENCHMARK{
    +
    1331  area->layerBundle[0].image->getDisplayable(QSize(200,200),255);
    +
    1332  }
    +
    1333 
    +
    1334  area->deleteLayer(0);
    +
    1335 }
    +
    1336 
    +
    1337 void UnitTest::bench_ShapedImage_getPixelColor(){
    +
    1338  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1339 
    +
    1340  QPoint point(000,000);
    +
    1341 
    +
    1342  QBENCHMARK{
    +
    1343  area->layerBundle[0].image->getPixelColor(point);
    +
    1344  }
    +
    1345 
    +
    1346  area->deleteLayer(0);
    +
    1347 }
    +
    1348 
    +
    1349 void UnitTest::bench_ShapedImage_getImageData(){
    +
    1350  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1351 
    +
    1352  QBENCHMARK{
    +
    1353  area->layerBundle[0].image->getImageData();
    +
    1354  }
    +
    1355 
    +
    1356  area->deleteLayer(0);
    +
    1357 }
    +
    1358 
    +
    1359 void UnitTest::bench_ShapedImage_setImageData(){
    +
    1360  area->addLayer(200,200,10,20,IntelliImage::ImageType::SHAPEDIMAGE);
    +
    1361 
    +
    1362  QImage img = area->layerBundle[0].image->getImageData();
    +
    1363  QBENCHMARK{
    +
    1364  area->layerBundle[0].image->setImageData(img);
    +
    1365  }
    +
    1366 
    +
    1367  area->deleteLayer(0);
    +
    1368 }
    +
    1369 
    +
    1370 void UnitTest::bench_Circle_fullDraw(){
    +
    1371  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1372  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1373  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1374  area->createCircleTool();
    +
    1375  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1376 
    +
    1377  QPoint point1(100,100);
    +
    1378  QPoint point2(150,100);
    +
    1379  QBENCHMARK{
    +
    1380  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1381  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1382  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1383  }
    +
    1384 
    +
    1385  area->deleteLayer(0);
    +
    1386 }
    +
    1387 
    +
    1388 void UnitTest::bench_Circle_interruptedDraw(){
    +
    1389  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1390  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1391  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1392  area->createCircleTool();
    +
    1393  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1394 
    +
    1395  QPoint point1(100,100);
    +
    1396  QPoint point2(150,100);
    +
    1397  QBENCHMARK{
    +
    1398  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1399  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1400  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1401  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1402  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1403  }
    +
    1404 
    +
    1405  area->deleteLayer(0);
    +
    1406 }
    +
    1407 
    +
    1408 
    +
    1409 void UnitTest::bench_FloodFill_fullDraw(){
    +
    1410  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1411  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1412  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1413  area->createFloodFillTool();
    +
    1414  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1415 
    +
    1416  QPoint point1(100,100);
    +
    1417  QPoint point2(150,100);
    +
    1418  QBENCHMARK{
    +
    1419  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1420  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1421  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1422  }
    +
    1423 
    +
    1424  area->deleteLayer(0);
    +
    1425 }
    +
    1426 
    +
    1427 void UnitTest::bench_FloodFill_interruptedDraw(){
    +
    1428  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1429  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1430  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1431  area->createFloodFillTool();
    +
    1432  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1433 
    +
    1434  QPoint point1(100,100);
    +
    1435  QPoint point2(150,100);
    +
    1436  QBENCHMARK{
    +
    1437  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1438  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1439  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1440  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1441  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1442  }
    +
    1443 
    +
    1444  area->deleteLayer(0);
    +
    1445 }
    +
    1446 
    +
    1447 
    +
    1448 void UnitTest::bench_Line_fullDraw(){
    +
    1449  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1450  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1451  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1452  area->createLineTool();
    +
    1453  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1454 
    +
    1455  QPoint point1(100,100);
    +
    1456  QPoint point2(150,100);
    +
    1457  QBENCHMARK{
    +
    1458  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1459  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1460  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1461  }
    +
    1462 
    +
    1463  area->deleteLayer(0);
    +
    1464 }
    +
    1465 
    +
    1466 void UnitTest::bench_Line_interruptedDraw(){
    +
    1467  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1468  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1469  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1470  area->createLineTool();
    +
    1471  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1472 
    +
    1473  QPoint point1(100,100);
    +
    1474  QPoint point2(150,100);
    +
    1475 
    +
    1476  QBENCHMARK{
    +
    1477  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1478  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1479  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1480  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1481  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1482  }
    +
    1483 
    +
    1484  area->deleteLayer(0);
    +
    1485 }
    +
    1486 
    +
    1487 void UnitTest::bench_Pen_fullDraw(){
    +
    1488  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1489  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1490  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1491  area->createPenTool();
    +
    1492  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1493 
    +
    1494  QPoint point1(100,100);
    +
    1495  QPoint point2(150,100);
    +
    1496  QBENCHMARK{
    +
    1497  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1498  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1499  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1500  }
    +
    1501 
    +
    1502  area->deleteLayer(0);
    +
    1503 }
    +
    1504 
    +
    1505 void UnitTest::bench_Pen_interruptedDraw(){
    +
    1506  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1507  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1508  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1509  area->createPenTool();
    +
    1510  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1511 
    +
    1512  QPoint point1(100,100);
    +
    1513  QPoint point2(150,100);
    +
    1514  QBENCHMARK{
    +
    1515  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1516  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1517  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1518  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1519  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1520  }
    +
    1521 
    +
    1522  area->deleteLayer(0);
    +
    1523 }
    +
    1524 
    +
    1525 void UnitTest::bench_Plain_fullDraw(){
    +
    1526  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1527  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1528  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1529  area->createPlainTool();
    +
    1530  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1531 
    +
    1532  QPoint point1(100,100);
    +
    1533  QPoint point2(150,100);
    +
    1534  QBENCHMARK{
    +
    1535  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1536  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1537  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1538  }
    +
    1539 
    +
    1540  area->deleteLayer(0);
    +
    1541 }
    +
    1542 
    +
    1543 void UnitTest::bench_Plain_interruptedDraw(){
    +
    1544  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1545  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1546  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1547  area->createPlainTool();
    +
    1548  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1549 
    +
    1550  QPoint point1(100,100);
    +
    1551  QPoint point2(150,100);
    +
    1552  QBENCHMARK{
    +
    1553  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1554  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1555  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1556  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1557  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1558  }
    +
    1559 
    +
    1560  area->deleteLayer(0);
    +
    1561 }
    +
    1562 
    +
    1563 void UnitTest::bench_Polygon_fullDraw(){
    + +
    1565  std::vector<QPoint> points{
    +
    1566  QPoint(10,00),
    +
    1567  QPoint(00,10),
    +
    1568  QPoint(10,20),
    +
    1569  QPoint(20,10)
    +
    1570  };
    +
    1571 
    +
    1572  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1573  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1574  area->createPolygonTool();
    +
    1575  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1576 
    +
    1577  QBENCHMARK{
    +
    1578  area->Tool->onMouseLeftPressed(points[0].x(), points[0].y());
    +
    1579  area->Tool->onMouseLeftReleased(points[0].x(), points[0].y());
    +
    1580  area->Tool->onMouseMoved(points[1].x(), points[1].y());
    +
    1581 
    +
    1582  area->Tool->onMouseLeftPressed(points[1].x(), points[1].y());
    +
    1583  area->Tool->onMouseLeftReleased(points[1].x(), points[1].y());
    +
    1584  area->Tool->onMouseMoved(points[2].x(), points[2].y());
    +
    1585 
    +
    1586  area->Tool->onMouseLeftPressed(points[2].x(), points[2].y());
    +
    1587  area->Tool->onMouseLeftReleased(points[2].x(), points[2].y());
    +
    1588  area->Tool->onMouseMoved(points[3].x(), points[3].y());
    +
    1589 
    +
    1590  area->Tool->onMouseLeftPressed(points[3].x(), points[3].y());
    +
    1591  area->Tool->onMouseLeftReleased(points[3].x(), points[3].y());
    +
    1592  area->Tool->onMouseMoved(points[0].x(), points[0].y());
    +
    1593 
    +
    1594  area->Tool->onMouseLeftPressed(points[0].x(), points[0].y());
    +
    1595  area->Tool->onMouseLeftReleased(points[0].x(), points[0].y());
    +
    1596  }
    +
    1597 
    +
    1598  area->deleteLayer(0);
    +
    1599 }
    +
    1600 
    +
    1601 
    +
    1602 void UnitTest::bench_Polygon_interruptedDraw(){
    +
    1603  area->addLayer(201,201,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1604  std::vector<QPoint> points{
    +
    1605  QPoint(100,000)
    +
    1606  };
    +
    1607 
    +
    1608 
    +
    1609  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1610  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1611  area->createPolygonTool();
    +
    1612  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1613 
    +
    1614  QBENCHMARK{
    +
    1615  area->Tool->onMouseLeftPressed(points[0].x(), points[0].y());
    +
    1616  area->Tool->onMouseLeftReleased(points[0].x(), points[0].y());
    +
    1617 
    +
    1618  area->Tool->onMouseRightPressed(points[0].x(), points[0].y());
    +
    1619  area->Tool->onMouseRightReleased(points[0].x(), points[0].y());
    +
    1620  }
    +
    1621 
    +
    1622  area->deleteLayer(0);
    +
    1623 }
    +
    1624 
    +
    1625 
    +
    1626 void UnitTest::bench_Rectangle_fullDraw(){
    +
    1627  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1628  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1629  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1630  area->createRectangleTool();
    +
    1631  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1632 
    +
    1633  QPoint point1(100,100);
    +
    1634  QPoint point2(150,150);
    +
    1635 
    +
    1636  QBENCHMARK{
    +
    1637  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1638  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1639  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1640  }
    +
    1641 
    +
    1642  area->deleteLayer(0);
    +
    1643 }
    +
    1644 
    +
    1645 void UnitTest::bench_Rectangle_interruptedDraw(){
    +
    1646  area->addLayer(200,200,10,20,IntelliImage::ImageType::RASTERIMAGE);
    +
    1647  area->colorPicker.setFirstColor(QColor(255,255,255,255));
    +
    1648  area->colorPicker.setSecondColor(QColor(0,0,0,255));
    +
    1649  area->createRectangleTool();
    +
    1650  area->layerBundle[0].image->drawPlain(QColor(255, 0, 0, 255));
    +
    1651 
    +
    1652  QPoint point1(100,100);
    +
    1653  QPoint point2(150,150);
    +
    1654  QBENCHMARK{
    +
    1655  area->Tool->onMouseLeftPressed(point1.x(), point1.y());
    +
    1656  area->Tool->onMouseMoved(point2.x(), point2.y());
    +
    1657  area->Tool->onMouseRightPressed(point2.x(), point2.y());
    +
    1658  area->Tool->onMouseRightReleased(point2.x(),point2.y());
    +
    1659  area->Tool->onMouseLeftReleased(point2.x(), point2.y());
    +
    1660  }
    +
    1661 
    +
    1662  area->deleteLayer(0);
    +
    1663 }
    +
    1664 
    +
    1665 
    +
    1666 void UnitTest::bench_Triangulation_Coverage(){
    +
    1667  std::vector<QPoint> points{
    +
    1668  QPoint(10,00),
    +
    1669  QPoint(00,10),
    +
    1670  QPoint(10,20),
    +
    1671  QPoint(20,10)
    +
    1672  };
    +
    1673  std::vector<QPoint> test{
    +
    1674  QPoint(00,00),
    +
    1675  QPoint(00,20),
    +
    1676  QPoint(20,00),
    +
    1677  QPoint(20,20),
    +
    1678  QPoint(10,10)
    +
    1679  };
    +
    1680 
    +
    1681  QBENCHMARK{
    +
    1682  std::vector<Triangle> tria = IntelliTriangulation::calculateTriangles(points);
    +
    1683  QPoint point;
    +
    1684  for(int i=0; i<200; i++) {
    +
    1685  point.setX(i);
    +
    1686  for(int j=0; j<200; j++) {
    +
    1687  point.setY(j);
    +
    1688  IntelliTriangulation::isInPolygon(tria, point);
    +
    1689  }
    +
    1690  }
    +
    1691  }
    +
    1692 }
    +
    1693 
    +
    1694 
    +
    1695 QTEST_MAIN(UnitTest)
    +
    1696 
    +
    1697 #include "tst_unittest.moc"
    +
    +
    +
    void createCircleTool()
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    +
    void createRectangleTool()
    + + +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    + + + +
    void setLayerAlpha(int idx, int alpha)
    The setAlphaOfLayer method sets the alpha value of a specific layer.
    + +
    void setLayerActive(int idx)
    The setLayerToActive method marks a specific layer as active.
    +
    std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
    A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
    +
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    + +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    +
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    +
    The IntelliShapedImage manages a Shapedimage.
    +
    QColor getSecondColor()
    A function to read the secondary selected color.
    + + +
    void createPlainTool()
    +
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    +
    void createPenTool()
    + + +
    The IntelliToolRectangle class represents a tool to draw a rectangle.
    +
    void createLineTool()
    + +
    The IntelliToolPen class represents a tool to draw a line.
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    + + + +
    void setFirstColor(QColor Color)
    A function to set the primary color.
    + +
    void createPolygonTool()
    +
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    +
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    +
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:202
    + +
    QColor getFirstColor()
    A function to read the primary selected color.
    +
    void createFloodFillTool()
    + + +
    The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
    + +
    The IntelliToolCircle class represents a tool to draw a circle.
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    The IntelliToolPolygon managed the Drawing of Polygonforms.
    +
    std::vector< QPoint > polygonData
    The Vertices of The Polygon. Needs to be a planar Polygon.
    + + +
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    +
    The IntelliToolFloodFill class represents a tool to draw a line.
    + + + + From 8fcc5f04e831643a034866ac6eace12414128b40 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 12:31:33 +0100 Subject: [PATCH 77/97] Some cleanup of Includes --- src/GUI/IntelliInputDialog.cpp | 2 -- src/GUI/IntelliInputDialog.h | 9 +++++++-- src/GUI/IntelliPhotoGui.h | 8 ++++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/GUI/IntelliInputDialog.cpp b/src/GUI/IntelliInputDialog.cpp index 2b2ac32..c477112 100644 --- a/src/GUI/IntelliInputDialog.cpp +++ b/src/GUI/IntelliInputDialog.cpp @@ -1,6 +1,4 @@ #include "IntelliInputDialog.h" -#include - IntelliInputDialog::IntelliInputDialog(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok) { diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index a8b25da..7775c0d 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -1,7 +1,13 @@ #ifndef INTELLIINPUTDIALOG_H #define INTELLIINPUTDIALOG_H -#include +#include +#include +#include +#include +#include +#include +#include class IntelliInputDialog : public QDialog { @@ -25,7 +31,6 @@ int valueInt; QGridLayout* Layout; QDialogButtonBox* ButtonBox; -QEventLoop loop; bool* notClosed; const QSize Linesize = QSize(150,20); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 464adec..7b93939 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -1,8 +1,12 @@ #ifndef IntelliPhotoGui_H #define IntelliPhotoGui_H -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include From d60796ccae7d54ece381005ae8c53916660306d3 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 12:38:47 +0100 Subject: [PATCH 78/97] Automated Release Preparation --- docs/html/_intelli_input_dialog_8cpp.html | 1 - .../_intelli_input_dialog_8cpp_source.html | 178 +++++---- docs/html/_intelli_input_dialog_8h.html | 8 +- .../html/_intelli_input_dialog_8h_source.html | 83 ++-- docs/html/_intelli_photo_gui_8cpp_source.html | 2 +- docs/html/_intelli_photo_gui_8h.html | 8 +- docs/html/_intelli_photo_gui_8h_source.html | 360 +++++++++--------- docs/html/_painting_area_8h_source.html | 2 +- docs/html/class_intelli_input_dialog.html | 10 +- docs/html/class_intelli_photo_gui.html | 2 +- docs/html/main_8cpp_source.html | 2 +- docs/html/main_unit_test_8cpp_source.html | 2 +- docs/html/tst__unittest_8cpp_source.html | 2 +- 13 files changed, 338 insertions(+), 322 deletions(-) diff --git a/docs/html/_intelli_input_dialog_8cpp.html b/docs/html/_intelli_input_dialog_8cpp.html index b686439..65f283c 100644 --- a/docs/html/_intelli_input_dialog_8cpp.html +++ b/docs/html/_intelli_input_dialog_8cpp.html @@ -87,7 +87,6 @@ $(document).ready(function(){initNavTree('_intelli_input_dialog_8cpp.html',''); diff --git a/docs/html/_intelli_input_dialog_8cpp_source.html b/docs/html/_intelli_input_dialog_8cpp_source.html index 3c4b0db..d9ad586 100644 --- a/docs/html/_intelli_input_dialog_8cpp_source.html +++ b/docs/html/_intelli_input_dialog_8cpp_source.html @@ -87,99 +87,97 @@ $(document).ready(function(){initNavTree('_intelli_input_dialog_8cpp_source.html
    Go to the documentation of this file.
    1 #include "IntelliInputDialog.h"
    -
    2 #include <QFile>
    -
    3 
    -
    4 
    -
    5 IntelliInputDialog::IntelliInputDialog(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok)
    -
    6 {
    -
    7  this->valueInt = value;
    -
    8  this->notClosed = ok;
    -
    9  if(notClosed != nullptr) {
    -
    10  *notClosed = false;
    -
    11  }
    -
    12  createInputBox(Title, Label, value, minValue, maxValue, step);
    -
    13  createConnections();
    -
    14  setInputBoxStyle();
    -
    15  this->exec();
    -
    16 }
    -
    17 
    -
    18 int IntelliInputDialog::getInt(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok){
    -
    19  IntelliInputDialog dialog(Title, Label, value, minValue, maxValue, step, ok);
    -
    20  return dialog.valueInt;
    -
    21 }
    -
    22 
    -
    23 void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){
    -
    24  this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
    -
    25  if(Title == nullptr) {
    -
    26  this->setWindowTitle("Input Box");
    -
    27  }
    -
    28  else{
    -
    29  this->setWindowTitle(Title);
    -
    30  }
    -
    31  this->Layout = new QGridLayout();
    -
    32  this->ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    -
    33 
    -
    34  this->InputLabel = new QLabel();
    -
    35  if(Label == nullptr) {
    -
    36  this->InputLabel->setText("Width:");
    -
    37  }
    -
    38  else{
    -
    39  this->InputLabel->setText(Label);
    -
    40  }
    -
    41  this->InputLabel->setFixedSize(Linesize);
    -
    42 
    -
    43  this->Input = new QSpinBox();
    -
    44  this->Input->setFixedSize(Linesize);
    -
    45  this->Input->setRange(minValue,maxValue);
    -
    46  this->Input->setSingleStep(step);
    -
    47  this->Input->setValue(value);
    -
    48 
    -
    49  this->okButton = ButtonBox->button(QDialogButtonBox::Ok);
    -
    50  this->okButton->setFixedSize(Buttonsize);
    -
    51  this->okButton->setAutoDefault(false);
    -
    52  this->okButton->setDefault(false);
    -
    53 
    -
    54  this->cancelButton = ButtonBox->button(QDialogButtonBox::Cancel);
    -
    55  this->cancelButton->setFixedSize(Buttonsize);
    -
    56  this->cancelButton->setAutoDefault(false);
    -
    57  this->cancelButton->setDefault(false);
    -
    58 
    -
    59  Layout->addWidget(InputLabel,1,1,1,1);
    -
    60  Layout->addWidget(Input,2,1,1,1);
    -
    61  Layout->addWidget(ButtonBox,3,1,1,1);
    -
    62  this->setLayout(Layout);
    -
    63  this->resize(172,94);
    -
    64  this->show();
    -
    65 }
    -
    66 
    -
    67 void IntelliInputDialog::createConnections(){
    -
    68  connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe()));
    -
    69  connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent()));
    -
    70 }
    -
    71 
    -
    72 void IntelliInputDialog::setInputBoxStyle(){
    -
    73  this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);");
    -
    74 }
    -
    75 
    - -
    77  this->close();
    -
    78 }
    -
    79 
    - -
    81  valueInt = QString("%1").arg(Input->value()).toInt();
    -
    82  if(notClosed != nullptr) {
    -
    83  *notClosed = true;
    -
    84  }
    -
    85  this->close();
    -
    86 }
    +
    2 
    +
    3 IntelliInputDialog::IntelliInputDialog(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok)
    +
    4 {
    +
    5  this->valueInt = value;
    +
    6  this->notClosed = ok;
    +
    7  if(notClosed != nullptr) {
    +
    8  *notClosed = false;
    +
    9  }
    +
    10  createInputBox(Title, Label, value, minValue, maxValue, step);
    +
    11  createConnections();
    +
    12  setInputBoxStyle();
    +
    13  this->exec();
    +
    14 }
    +
    15 
    +
    16 int IntelliInputDialog::getInt(QString Title, QString Label, int value, int minValue, int maxValue, int step, bool* ok){
    +
    17  IntelliInputDialog dialog(Title, Label, value, minValue, maxValue, step, ok);
    +
    18  return dialog.valueInt;
    +
    19 }
    +
    20 
    +
    21 void IntelliInputDialog::createInputBox(QString Title, QString Label, int value, int minValue, int maxValue, int step){
    +
    22  this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
    +
    23  if(Title == nullptr) {
    +
    24  this->setWindowTitle("Input Box");
    +
    25  }
    +
    26  else{
    +
    27  this->setWindowTitle(Title);
    +
    28  }
    +
    29  this->Layout = new QGridLayout();
    +
    30  this->ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    +
    31 
    +
    32  this->InputLabel = new QLabel();
    +
    33  if(Label == nullptr) {
    +
    34  this->InputLabel->setText("Width:");
    +
    35  }
    +
    36  else{
    +
    37  this->InputLabel->setText(Label);
    +
    38  }
    +
    39  this->InputLabel->setFixedSize(Linesize);
    +
    40 
    +
    41  this->Input = new QSpinBox();
    +
    42  this->Input->setFixedSize(Linesize);
    +
    43  this->Input->setRange(minValue,maxValue);
    +
    44  this->Input->setSingleStep(step);
    +
    45  this->Input->setValue(value);
    +
    46 
    +
    47  this->okButton = ButtonBox->button(QDialogButtonBox::Ok);
    +
    48  this->okButton->setFixedSize(Buttonsize);
    +
    49  this->okButton->setAutoDefault(false);
    +
    50  this->okButton->setDefault(false);
    +
    51 
    +
    52  this->cancelButton = ButtonBox->button(QDialogButtonBox::Cancel);
    +
    53  this->cancelButton->setFixedSize(Buttonsize);
    +
    54  this->cancelButton->setAutoDefault(false);
    +
    55  this->cancelButton->setDefault(false);
    +
    56 
    +
    57  Layout->addWidget(InputLabel,1,1,1,1);
    +
    58  Layout->addWidget(Input,2,1,1,1);
    +
    59  Layout->addWidget(ButtonBox,3,1,1,1);
    +
    60  this->setLayout(Layout);
    +
    61  this->resize(172,94);
    +
    62  this->show();
    +
    63 }
    +
    64 
    +
    65 void IntelliInputDialog::createConnections(){
    +
    66  connect(okButton, SIGNAL(clicked()), this, SLOT(slotEingabe()));
    +
    67  connect(cancelButton, SIGNAL(clicked()), this, SLOT(slotCloseEvent()));
    +
    68 }
    +
    69 
    +
    70 void IntelliInputDialog::setInputBoxStyle(){
    +
    71  this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);");
    +
    72 }
    +
    73 
    + +
    75  this->close();
    +
    76 }
    +
    77 
    + +
    79  valueInt = QString("%1").arg(Input->value()).toInt();
    +
    80  if(notClosed != nullptr) {
    +
    81  *notClosed = true;
    +
    82  }
    +
    83  this->close();
    +
    84 }
    - + - -
    IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    -
    static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    - + +
    IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    +
    static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    +
    -
    #include <QtWidgets>
    +
    #include <QSize>
    +#include <QDialog>
    +#include <QLabel>
    +#include <QGridLayout>
    +#include <QDialogButtonBox>
    +#include <QPushButton>
    +#include <QSpinBox>

    Go to the source code of this file.

    diff --git a/docs/html/_intelli_input_dialog_8h_source.html b/docs/html/_intelli_input_dialog_8h_source.html index b2db70e..1e3e363 100644 --- a/docs/html/_intelli_input_dialog_8h_source.html +++ b/docs/html/_intelli_input_dialog_8h_source.html @@ -89,49 +89,54 @@ $(document).ready(function(){initNavTree('_intelli_input_dialog_8h_source.html', Go to the documentation of this file.
    1 #ifndef INTELLIINPUTDIALOG_H
    2 #define INTELLIINPUTDIALOG_H
    3 
    -
    4 #include <QtWidgets>
    -
    5 
    -
    6 class IntelliInputDialog : public QDialog
    -
    7 {
    -
    8 Q_OBJECT
    -
    9 public:
    -
    10 IntelliInputDialog(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
    +
    4 #include <QSize>
    +
    5 #include <QDialog>
    +
    6 #include <QLabel>
    +
    7 #include <QGridLayout>
    +
    8 #include <QDialogButtonBox>
    +
    9 #include <QPushButton>
    +
    10 #include <QSpinBox>
    11 
    -
    12 
    -
    13 static int getInt(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
    -
    14 
    -
    15 public slots:
    -
    16 void slotCloseEvent();
    -
    17 void slotEingabe();
    +
    12 class IntelliInputDialog : public QDialog
    +
    13 {
    +
    14 Q_OBJECT
    +
    15 public:
    +
    16 IntelliInputDialog(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
    +
    17 
    18 
    -
    19 private:
    -
    20 void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1);
    -
    21 void createConnections();
    -
    22 void setInputBoxStyle();
    -
    23 
    -
    24 int valueInt;
    -
    25 
    -
    26 QGridLayout* Layout;
    -
    27 QDialogButtonBox* ButtonBox;
    -
    28 QEventLoop loop;
    -
    29 bool* notClosed;
    -
    30 
    -
    31 const QSize Linesize = QSize(150,20);
    -
    32 const QSize Buttonsize = QSize(72,20);
    -
    33 QLabel* InputLabel;
    -
    34 QSpinBox* Input;
    -
    35 QPushButton* okButton;
    -
    36 QPushButton* cancelButton;
    -
    37 };
    -
    38 
    -
    39 #endif // INTELLIINPUTDIALOG_H
    +
    19 static int getInt(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
    +
    20 
    +
    21 public slots:
    +
    22 void slotCloseEvent();
    +
    23 void slotEingabe();
    +
    24 
    +
    25 private:
    +
    26 void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1);
    +
    27 void createConnections();
    +
    28 void setInputBoxStyle();
    +
    29 
    +
    30 int valueInt;
    +
    31 
    +
    32 QGridLayout* Layout;
    +
    33 QDialogButtonBox* ButtonBox;
    +
    34 bool* notClosed;
    +
    35 
    +
    36 const QSize Linesize = QSize(150,20);
    +
    37 const QSize Buttonsize = QSize(72,20);
    +
    38 QLabel* InputLabel;
    +
    39 QSpinBox* Input;
    +
    40 QPushButton* okButton;
    +
    41 QPushButton* cancelButton;
    +
    42 };
    +
    43 
    +
    44 #endif // INTELLIINPUTDIALOG_H
    - - -
    IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    -
    static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    - + + +
    IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    +
    static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    +
    -
    #include <QtWidgets>
    -#include <QPixmap>
    +
    #include <QAction>
    +#include <QFileDialog>
    +#include <QMessageBox>
    +#include <QImageWriter>
    +#include <QMenu>
    +#include <QMenuBar>
    #include <QList>
    #include <QMainWindow>
    #include <QGridLayout>
    diff --git a/docs/html/_intelli_photo_gui_8h_source.html b/docs/html/_intelli_photo_gui_8h_source.html index 5a69f55..918ad77 100644 --- a/docs/html/_intelli_photo_gui_8h_source.html +++ b/docs/html/_intelli_photo_gui_8h_source.html @@ -89,195 +89,199 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8h_source.html','') Go to the documentation of this file.
    1 #ifndef IntelliPhotoGui_H
    2 #define IntelliPhotoGui_H
    3 
    -
    4 #include <QtWidgets>
    -
    5 #include <QPixmap>
    -
    6 #include <QList>
    -
    7 #include <QMainWindow>
    -
    8 #include <QGridLayout>
    -
    9 #include <QPushButton>
    -
    10 #include <QTextEdit>
    -
    11 #include <QLabel>
    -
    12 #include <QLineEdit>
    -
    13 #include "IntelliInputDialog.h"
    -
    14 
    -
    15 //for unit testing
    -
    16 class UnitTest;
    -
    17 
    -
    18 // PaintingArea used to paint the image
    -
    19 class PaintingArea;
    -
    20 
    -
    21 class IntelliTool;
    -
    22 
    -
    23 class IntelliColorPicker;
    +
    4 #include <QAction>
    +
    5 #include <QFileDialog>
    +
    6 #include <QMessageBox>
    +
    7 #include <QImageWriter>
    +
    8 #include <QMenu>
    +
    9 #include <QMenuBar>
    +
    10 #include <QList>
    +
    11 #include <QMainWindow>
    +
    12 #include <QGridLayout>
    +
    13 #include <QPushButton>
    +
    14 #include <QTextEdit>
    +
    15 #include <QLabel>
    +
    16 #include <QLineEdit>
    +
    17 #include "IntelliInputDialog.h"
    +
    18 
    +
    19 //for unit testing
    +
    20 class UnitTest;
    +
    21 
    +
    22 // PaintingArea used to paint the image
    +
    23 class PaintingArea;
    24 
    -
    28 class IntelliPhotoGui : public QMainWindow {
    -
    29 friend UnitTest;
    -
    30 // Declares our class as a QObject which is the base class
    -
    31 // for all Qt objects
    -
    32 // QObjects handle events
    -
    33 Q_OBJECT
    -
    34 public:
    - -
    39 
    -
    40 void UpdateGui();
    -
    41 
    -
    42 void setToolWidth(int value);
    +
    25 class IntelliTool;
    +
    26 
    +
    27 class IntelliColorPicker;
    +
    28 
    +
    32 class IntelliPhotoGui : public QMainWindow {
    +
    33 friend UnitTest;
    +
    34 // Declares our class as a QObject which is the base class
    +
    35 // for all Qt objects
    +
    36 // QObjects handle events
    +
    37 Q_OBJECT
    +
    38 public:
    +
    43 
    -
    44 protected:
    -
    48 void closeEvent(QCloseEvent*event) override;
    -
    49 
    -
    50 private slots:
    -
    51 void slotOpen();
    -
    52 void slotSave();
    +
    44 void UpdateGui();
    +
    45 
    +
    46 void setToolWidth(int value);
    +
    47 
    +
    48 protected:
    +
    52 void closeEvent(QCloseEvent*event) override;
    53 
    -
    54 // layer slots here
    -
    55 void slotCreateNewRasterLayer();
    -
    56 void slotCreateNewShapedLayer();
    -
    57 void slotDeleteLayer();
    -
    58 void slotSetActiveLayer();
    -
    59 void slotSetActiveAlpha();
    -
    60 void slotSetPolygon();
    -
    61 void slotPositionMoveUp();
    -
    62 void slotPositionMoveDown();
    -
    63 void slotPositionMoveLeft();
    -
    64 void slotPositionMoveRight();
    -
    65 void slotMoveLayerUp();
    -
    66 void slotMoveLayerDown();
    -
    67 
    -
    68 void slotUpdateRenderSettingsOn();
    -
    69 void slotUpdateRenderSettingsOff();
    -
    70 
    -
    71 void slotSetFirstColor();
    -
    72 void slotSetSecondColor();
    -
    73 void slotSwapColor();
    +
    54 private slots:
    +
    55 void slotOpen();
    +
    56 void slotSave();
    +
    57 
    +
    58 // layer slots here
    +
    59 void slotCreateNewRasterLayer();
    +
    60 void slotCreateNewShapedLayer();
    +
    61 void slotDeleteLayer();
    +
    62 void slotSetActiveLayer();
    +
    63 void slotSetActiveAlpha();
    +
    64 void slotSetPolygon();
    +
    65 void slotPositionMoveUp();
    +
    66 void slotPositionMoveDown();
    +
    67 void slotPositionMoveLeft();
    +
    68 void slotPositionMoveRight();
    +
    69 void slotMoveLayerUp();
    +
    70 void slotMoveLayerDown();
    +
    71 
    +
    72 void slotUpdateRenderSettingsOn();
    +
    73 void slotUpdateRenderSettingsOff();
    74 
    -
    75 void slotCreatePenTool();
    -
    76 void slotCreatePlainTool();
    -
    77 void slotCreateLineTool();
    -
    78 void slotCreateRectangleTool();
    -
    79 void slotCreateCircleTool();
    -
    80 void slotCreatePolygonTool();
    -
    81 void slotCreateFloodFillTool();
    -
    82 
    -
    83 void slotAboutDialog();
    -
    84 
    -
    85 void slotEnterPressed();
    +
    75 void slotSetFirstColor();
    +
    76 void slotSetSecondColor();
    +
    77 void slotSwapColor();
    +
    78 
    +
    79 void slotCreatePenTool();
    +
    80 void slotCreatePlainTool();
    +
    81 void slotCreateLineTool();
    +
    82 void slotCreateRectangleTool();
    +
    83 void slotCreateCircleTool();
    +
    84 void slotCreatePolygonTool();
    +
    85 void slotCreateFloodFillTool();
    86 
    -
    87 void slotSetWidth();
    -
    88 void slotSetInnerAlpha();
    -
    89 
    -
    90 void slotResetTools();
    -
    91 
    -
    92 private:
    -
    93 void createActions();
    -
    94 void createMenus();
    -
    95 void createGui();
    -
    96 // Set the style of the GUI
    -
    97 void setIntelliStyle();
    -
    98 
    -
    99 // Will check if changes have occurred since last save
    -
    100 bool maybeSave();
    -
    101 // Opens the Save dialog and saves
    -
    102 bool saveFile(const QByteArray &fileFormat);
    -
    103 
    -
    104 void setDefaultToolValue();
    -
    105 
    -
    106 // What we'll draw on
    -
    107 PaintingArea* paintingArea;
    -
    108 
    -
    109 const QSize Buttonsize = QSize(35,35);
    -
    110 QPixmap preview;
    -
    111 QPushButton* CircleButton;
    -
    112 QPushButton* FloodFillButton;
    -
    113 QPushButton* LineButton;
    -
    114 QPushButton* PenButton;
    -
    115 QPushButton* PlainButton;
    -
    116 QPushButton* PolygonButton;
    -
    117 QPushButton* RectangleButton;
    -
    118 QLabel* WidthLine;
    -
    119 QLabel* innerAlphaLine;
    -
    120 QLineEdit* EditLineWidth;
    -
    121 QLineEdit* EditLineInnerAlpha;
    -
    122 QIntValidator* ValidatorLineWidth;
    -
    123 QIntValidator* ValidatorInnerAlpha;
    -
    124 
    -
    125 QPushButton* FirstColorButton;
    -
    126 QPushButton* SecondColorButton;
    -
    127 QPushButton* SwitchColorButton;
    +
    87 void slotAboutDialog();
    +
    88 
    +
    89 void slotEnterPressed();
    +
    90 
    +
    91 void slotSetWidth();
    +
    92 void slotSetInnerAlpha();
    +
    93 
    +
    94 void slotResetTools();
    +
    95 
    +
    96 private:
    +
    97 void createActions();
    +
    98 void createMenus();
    +
    99 void createGui();
    +
    100 // Set the style of the GUI
    +
    101 void setIntelliStyle();
    +
    102 
    +
    103 // Will check if changes have occurred since last save
    +
    104 bool maybeSave();
    +
    105 // Opens the Save dialog and saves
    +
    106 bool saveFile(const QByteArray &fileFormat);
    +
    107 
    +
    108 void setDefaultToolValue();
    +
    109 
    +
    110 // What we'll draw on
    +
    111 PaintingArea* paintingArea;
    +
    112 
    +
    113 const QSize Buttonsize = QSize(35,35);
    +
    114 QPixmap preview;
    +
    115 QPushButton* CircleButton;
    +
    116 QPushButton* FloodFillButton;
    +
    117 QPushButton* LineButton;
    +
    118 QPushButton* PenButton;
    +
    119 QPushButton* PlainButton;
    +
    120 QPushButton* PolygonButton;
    +
    121 QPushButton* RectangleButton;
    +
    122 QLabel* WidthLine;
    +
    123 QLabel* innerAlphaLine;
    +
    124 QLineEdit* EditLineWidth;
    +
    125 QLineEdit* EditLineInnerAlpha;
    +
    126 QIntValidator* ValidatorLineWidth;
    +
    127 QIntValidator* ValidatorInnerAlpha;
    128 
    -
    129 QLabel* ActiveLayerLine;
    -
    130 QLabel* ActiveLayerImageLabel;
    -
    131 
    -
    132 // The menu widgets
    -
    133 QMenu*saveAsMenu;
    -
    134 QMenu*fileMenu;
    -
    135 QMenu*renderMenu;
    -
    136 QMenu*optionMenu;
    -
    137 QMenu*layerCreationMenu;
    -
    138 QMenu*layerMenu;
    -
    139 QMenu*colorMenu;
    -
    140 QMenu*toolCreationMenu;
    -
    141 QMenu*toolSettingsMenu;
    -
    142 QMenu*toolMenu;
    -
    143 QMenu*helpMenu;
    -
    144 
    -
    145 // All the actions that can occur
    -
    146 // meta image actions (need further modularisation)
    -
    147 QAction* actionOpen;
    -
    148 QAction* actionExit;
    -
    149 
    -
    150 //Rendersetting actions
    -
    151 QAction*actionUpdateRenderSettingsOn;
    -
    152 QAction*actionUpdateRenderSettingsOff;
    +
    129 QPushButton* FirstColorButton;
    +
    130 QPushButton* SecondColorButton;
    +
    131 QPushButton* SwitchColorButton;
    +
    132 
    +
    133 QLabel* ActiveLayerLine;
    +
    134 QLabel* ActiveLayerImageLabel;
    +
    135 
    +
    136 // The menu widgets
    +
    137 QMenu*saveAsMenu;
    +
    138 QMenu*fileMenu;
    +
    139 QMenu*renderMenu;
    +
    140 QMenu*optionMenu;
    +
    141 QMenu*layerCreationMenu;
    +
    142 QMenu*layerMenu;
    +
    143 QMenu*colorMenu;
    +
    144 QMenu*toolCreationMenu;
    +
    145 QMenu*toolSettingsMenu;
    +
    146 QMenu*toolMenu;
    +
    147 QMenu*helpMenu;
    +
    148 
    +
    149 // All the actions that can occur
    +
    150 // meta image actions (need further modularisation)
    +
    151 QAction* actionOpen;
    +
    152 QAction* actionExit;
    153 
    -
    154 // color Picker actions
    -
    155 QAction* actionColorPickerFirstColor;
    -
    156 QAction* actionColorPickerSecondColor;
    -
    157 QAction* actionColorSwap;
    -
    158 
    -
    159 // tool actions
    -
    160 QAction* actionCreatePenTool;
    -
    161 QAction* actionCreatePlainTool;
    -
    162 QAction* actionCreateLineTool;
    -
    163 QAction* actionCreateRectangleTool;
    -
    164 QAction* actionCreateCircleTool;
    -
    165 QAction* actionCreatePolygonTool;
    -
    166 QAction* actionCreateFloodFillTool;
    -
    167 
    -
    168 // dialog actions
    -
    169 QAction* actionAboutDialog;
    -
    170 QAction* actionAboutQtDialog;
    +
    154 //Rendersetting actions
    +
    155 QAction*actionUpdateRenderSettingsOn;
    +
    156 QAction*actionUpdateRenderSettingsOff;
    +
    157 
    +
    158 // color Picker actions
    +
    159 QAction* actionColorPickerFirstColor;
    +
    160 QAction* actionColorPickerSecondColor;
    +
    161 QAction* actionColorSwap;
    +
    162 
    +
    163 // tool actions
    +
    164 QAction* actionCreatePenTool;
    +
    165 QAction* actionCreatePlainTool;
    +
    166 QAction* actionCreateLineTool;
    +
    167 QAction* actionCreateRectangleTool;
    +
    168 QAction* actionCreateCircleTool;
    +
    169 QAction* actionCreatePolygonTool;
    +
    170 QAction* actionCreateFloodFillTool;
    171 
    -
    172 // layer change actions
    -
    173 QAction* actionCreateNewRasterLayer;
    -
    174 QAction* actionCreateNewShapedLayer;
    -
    175 QAction* actionDeleteLayer;
    -
    176 QAction* actionSetActiveLayer;
    -
    177 QAction* actionSetActiveAlpha;
    -
    178 QAction* actionSetPolygon;
    -
    179 QAction* actionMovePositionUp;
    -
    180 QAction* actionMovePositionDown;
    -
    181 QAction* actionMovePositionLeft;
    -
    182 QAction* actionMovePositionRight;
    -
    183 QAction* actionMoveLayerUp;
    -
    184 QAction* actionMoveLayerDown;
    -
    185 
    -
    186 // Actions tied to specific file formats
    -
    187 QList<QAction*> actionSaveAs;
    -
    188 
    -
    189 QAction* actionSetWidth;
    -
    190 QAction* actionSetInnerAlpha;
    -
    191 
    -
    192 // main GUI elements
    -
    193 QWidget* centralGuiWidget;
    -
    194 QGridLayout* mainLayout;
    -
    195 };
    -
    196 
    -
    197 #endif
    +
    172 // dialog actions
    +
    173 QAction* actionAboutDialog;
    +
    174 QAction* actionAboutQtDialog;
    +
    175 
    +
    176 // layer change actions
    +
    177 QAction* actionCreateNewRasterLayer;
    +
    178 QAction* actionCreateNewShapedLayer;
    +
    179 QAction* actionDeleteLayer;
    +
    180 QAction* actionSetActiveLayer;
    +
    181 QAction* actionSetActiveAlpha;
    +
    182 QAction* actionSetPolygon;
    +
    183 QAction* actionMovePositionUp;
    +
    184 QAction* actionMovePositionDown;
    +
    185 QAction* actionMovePositionLeft;
    +
    186 QAction* actionMovePositionRight;
    +
    187 QAction* actionMoveLayerUp;
    +
    188 QAction* actionMoveLayerDown;
    +
    189 
    +
    190 // Actions tied to specific file formats
    +
    191 QList<QAction*> actionSaveAs;
    +
    192 
    +
    193 QAction* actionSetWidth;
    +
    194 QAction* actionSetInnerAlpha;
    +
    195 
    +
    196 // main GUI elements
    +
    197 QWidget* centralGuiWidget;
    +
    198 QGridLayout* mainLayout;
    +
    199 };
    +
    200 
    +
    201 #endif
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    IntelliPhotoGui()
    The IntelliPhotoGui method is the constructor and is used to create a new instance of the main progra...
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    diff --git a/docs/html/_painting_area_8h_source.html b/docs/html/_painting_area_8h_source.html index c245faa..89a704d 100644 --- a/docs/html/_painting_area_8h_source.html +++ b/docs/html/_painting_area_8h_source.html @@ -237,7 +237,7 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html',''); in
    int widthOffset
    widthOffset - Stores the number of pixles from the left side of the painting area.
    Definition: PaintingArea.h:39
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    int heightOffset
    heightOffset - Stores the number of pixles from the top of the painting area.
    Definition: PaintingArea.h:43
    int getHeightOfActive()
    The getHeightOfActive gets the vertical dimensions of the active layer.
    void createPlainTool()
    diff --git a/docs/html/class_intelli_input_dialog.html b/docs/html/class_intelli_input_dialog.html index cce6da7..3ee511a 100644 --- a/docs/html/class_intelli_input_dialog.html +++ b/docs/html/class_intelli_input_dialog.html @@ -119,7 +119,7 @@ Static Public Member Functions

    Detailed Description

    -

    Definition at line 6 of file IntelliInputDialog.h.

    +

    Definition at line 12 of file IntelliInputDialog.h.

    Constructor & Destructor Documentation

    ◆ IntelliInputDialog()

    @@ -177,7 +177,7 @@ Static Public Member Functions
    -

    Definition at line 5 of file IntelliInputDialog.cpp.

    +

    Definition at line 3 of file IntelliInputDialog.cpp.

    @@ -246,7 +246,7 @@ Static Public Member Functions
    -

    Definition at line 18 of file IntelliInputDialog.cpp.

    +

    Definition at line 16 of file IntelliInputDialog.cpp.

    @@ -273,7 +273,7 @@ Static Public Member Functions
    -

    Definition at line 76 of file IntelliInputDialog.cpp.

    +

    Definition at line 74 of file IntelliInputDialog.cpp.

    @@ -300,7 +300,7 @@ Static Public Member Functions
    -

    Definition at line 80 of file IntelliInputDialog.cpp.

    +

    Definition at line 78 of file IntelliInputDialog.cpp.

    diff --git a/docs/html/class_intelli_photo_gui.html b/docs/html/class_intelli_photo_gui.html index d0f4eab..3a16fe9 100644 --- a/docs/html/class_intelli_photo_gui.html +++ b/docs/html/class_intelli_photo_gui.html @@ -121,7 +121,7 @@ Protected Member Functions

    Detailed Description

    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program.

    -

    Definition at line 28 of file IntelliPhotoGui.h.

    +

    Definition at line 32 of file IntelliPhotoGui.h.

    Constructor & Destructor Documentation

    ◆ IntelliPhotoGui()

    diff --git a/docs/html/main_8cpp_source.html b/docs/html/main_8cpp_source.html index 49516cf..10670e9 100644 --- a/docs/html/main_8cpp_source.html +++ b/docs/html/main_8cpp_source.html @@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('main_8cpp_source.html',''); initResiza
    15 }
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    int main(int argc, char *argv[])
    Definition: main.cpp:6
    diff --git a/docs/html/main_unit_test_8cpp_source.html b/docs/html/main_unit_test_8cpp_source.html index 6ab93b1..c21eb0f 100644 --- a/docs/html/main_unit_test_8cpp_source.html +++ b/docs/html/main_unit_test_8cpp_source.html @@ -291,7 +291,7 @@ $(document).ready(function(){initNavTree('main_unit_test_8cpp_source.html',''); -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    diff --git a/docs/html/tst__unittest_8cpp_source.html b/docs/html/tst__unittest_8cpp_source.html index b533ae0..0ae84df 100644 --- a/docs/html/tst__unittest_8cpp_source.html +++ b/docs/html/tst__unittest_8cpp_source.html @@ -1798,7 +1798,7 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
    std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
    A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    +
    The IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto p...
    void setSecondColor(QColor Color)
    A function to set the secondary color.
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    The IntelliShapedImage manages a Shapedimage.
    From b055c0b9220a3f71c5400c31908c9d997f154636 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 12:52:25 +0100 Subject: [PATCH 79/97] Automated Release Preparation --- .../_intelli_color_picker_8cpp_source.html | 4 +- docs/html/_intelli_photo_gui_8cpp_source.html | 4 +- .../_intelli_shaped_image_8cpp_source.html | 6 +- docs/html/_intelli_tool_8cpp_source.html | 222 ++++++++------- docs/html/_intelli_tool_8h_source.html | 126 +++++---- .../_intelli_tool_circle_8cpp_source.html | 22 +- docs/html/_intelli_tool_circle_8h_source.html | 6 +- .../_intelli_tool_flood_fill_8cpp_source.html | 20 +- .../_intelli_tool_flood_fill_8h_source.html | 6 +- docs/html/_intelli_tool_line_8cpp_source.html | 22 +- docs/html/_intelli_tool_line_8h_source.html | 6 +- docs/html/_intelli_tool_pen_8cpp_source.html | 22 +- docs/html/_intelli_tool_pen_8h_source.html | 6 +- .../html/_intelli_tool_plain_8cpp_source.html | 18 +- docs/html/_intelli_tool_plain_8h_source.html | 6 +- .../_intelli_tool_polygon_8cpp_source.html | 34 +-- .../html/_intelli_tool_polygon_8h_source.html | 6 +- .../_intelli_tool_rectangle_8cpp_source.html | 22 +- .../_intelli_tool_rectangle_8h_source.html | 6 +- .../_intelli_triangulation_8cpp_source.html | 4 +- docs/html/_intelli_triangulation_8h.html | 6 +- docs/html/_intelli_triangulation_8h.js | 2 +- .../_intelli_triangulation_8h_source.html | 4 +- docs/html/_painting_area_8cpp_source.html | 266 +++++++++--------- docs/html/_painting_area_8h_source.html | 59 ++-- docs/html/class_intelli_tool.html | 36 +-- docs/html/class_intelli_tool.js | 3 +- docs/html/class_intelli_tool_circle.html | 3 +- docs/html/class_intelli_tool_flood_fill.html | 3 +- docs/html/class_intelli_tool_line.html | 3 +- docs/html/class_intelli_tool_pen.html | 3 +- docs/html/class_intelli_tool_plain_tool.html | 3 +- docs/html/class_intelli_tool_polygon.html | 3 +- docs/html/class_intelli_tool_rectangle.html | 3 +- docs/html/class_painting_area-members.html | 21 +- docs/html/class_painting_area.html | 36 +-- docs/html/class_painting_area.js | 1 - docs/html/functions.html | 3 - docs/html/functions_func.html | 3 - .../html/namespace_intelli_triangulation.html | 12 +- docs/html/namespacemembers.html | 2 +- docs/html/namespacemembers_func.html | 2 +- docs/html/navtreedata.js | 2 +- docs/html/navtreeindex0.js | 10 +- docs/html/navtreeindex1.js | 22 +- docs/html/search/all_10.js | 6 +- docs/html/search/all_11.js | 18 +- docs/html/search/all_12.html | 30 ++ docs/html/search/all_12.js | 18 ++ docs/html/search/all_7.js | 2 +- docs/html/search/all_a.js | 8 +- docs/html/search/all_b.js | 16 +- docs/html/search/all_c.js | 13 +- docs/html/search/all_d.js | 22 +- docs/html/search/all_e.js | 24 +- docs/html/search/all_f.js | 8 +- docs/html/search/enums_0.js | 2 +- docs/html/search/enums_1.js | 2 +- docs/html/search/enumvalues_0.js | 2 +- docs/html/search/enumvalues_1.js | 2 +- docs/html/search/enumvalues_2.js | 2 +- docs/html/search/enumvalues_3.js | 4 +- docs/html/search/enumvalues_4.js | 5 +- docs/html/search/enumvalues_5.js | 3 +- docs/html/search/enumvalues_6.html | 2 +- docs/html/search/enumvalues_6.js | 3 +- docs/html/search/functions_4.js | 2 +- docs/html/search/functions_9.js | 3 +- docs/html/search/functions_a.js | 36 +-- docs/html/search/functions_b.js | 6 +- docs/html/search/functions_c.js | 2 +- docs/html/search/functions_d.js | 30 +- docs/html/search/searchdata.js | 4 +- docs/html/search/variables_0.js | 10 +- docs/html/search/variables_1.js | 2 +- docs/html/search/variables_2.js | 6 +- docs/html/search/variables_3.js | 2 +- docs/html/search/variables_4.js | 4 +- docs/html/search/variables_5.js | 6 +- docs/html/search/variables_6.js | 2 +- docs/html/search/variables_7.js | 4 +- docs/html/search/variables_8.js | 4 +- docs/html/tst__unittest_8cpp_source.html | 32 +-- src/IntelliHelper/IntelliColorPicker.cpp | 4 +- src/IntelliHelper/IntelliTriangulation.cpp | 2 +- src/IntelliHelper/IntelliTriangulation.h | 2 +- src/Layer/PaintingArea.cpp | 17 +- src/Layer/PaintingArea.h | 4 - src/Tool/IntelliTool.cpp | 5 +- src/Tool/IntelliTool.h | 3 +- 90 files changed, 722 insertions(+), 741 deletions(-) create mode 100644 docs/html/search/all_12.html create mode 100644 docs/html/search/all_12.js diff --git a/docs/html/_intelli_color_picker_8cpp_source.html b/docs/html/_intelli_color_picker_8cpp_source.html index d997afc..7d1ff02 100644 --- a/docs/html/_intelli_color_picker_8cpp_source.html +++ b/docs/html/_intelli_color_picker_8cpp_source.html @@ -89,8 +89,8 @@ $(document).ready(function(){initNavTree('_intelli_color_picker_8cpp_source.html Go to the documentation of this file.
    1 #include "IntelliColorPicker.h"
    2 
    -
    4  firstColor = {255,0,0,255};
    -
    5  secondColor = {0,255,255,255};
    +
    4  firstColor = QColor(255,0,0,255);
    +
    5  secondColor = QColor(0,255,255,255);
    6 }
    7 
    diff --git a/docs/html/_intelli_photo_gui_8cpp_source.html b/docs/html/_intelli_photo_gui_8cpp_source.html index fc12fdb..b281cb4 100644 --- a/docs/html/_intelli_photo_gui_8cpp_source.html +++ b/docs/html/_intelli_photo_gui_8cpp_source.html @@ -907,7 +907,7 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8cpp_source.html','
    void createCircleTool()
    void setRenderSettings(bool isFastRenderingOn)
    setRenderSettings updates all Images to the new Rendersetting.
    -
    IntelliImage * getImageOfActiveLayer()
    +
    IntelliImage * getImageOfActiveLayer()
    void createRectangleTool()
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    @@ -925,7 +925,7 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8cpp_source.html','
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
    -
    int getNumberOfActiveLayer()
    +
    int getNumberOfActiveLayer()
    void closeEvent(QCloseEvent *event) override
    The closeEvent function handles closing events.
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    diff --git a/docs/html/_intelli_shaped_image_8cpp_source.html b/docs/html/_intelli_shaped_image_8cpp_source.html index 91ee681..3b9c25a 100644 --- a/docs/html/_intelli_shaped_image_8cpp_source.html +++ b/docs/html/_intelli_shaped_image_8cpp_source.html @@ -141,8 +141,8 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
    53  for(int x = 0; x<imageData.width(); x++) {
    54  QPoint ptr(x,y);
    55  clr = imageData.pixelColor(x,y);
    -
    56  bool isInPolygon = IntelliTriangulation::isInPolygon(triangles, ptr);
    -
    57  if(isInPolygon) {
    +
    56  bool isInPolygon = IntelliTriangulation::isInPolygon(triangles, ptr);
    +
    57  if(isInPolygon) {
    58  clr.setAlpha(std::min(255, clr.alpha()));
    59  }else{
    60  clr.setAlpha(0);
    @@ -208,12 +208,12 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
    virtual IntelliImage * getDeepCopy() override
    A function that copys all that returns a [allocated] Image.
    bool fastRenderering
    fastRendering is the flag that represents the usage of 8bit pictures.
    Definition: IntelliImage.h:51
    -
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    ImageType TypeOfImage
    The Type, an Image is.
    Definition: IntelliImage.h:46
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:41
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    std::vector< QPoint > polygonData
    The Vertices of The Polygon. Needs to be a planar Polygon.
    IntelliShapedImage(int width, int height, bool fastRendererOn)
    The Construcor of the IntelliShapedImage. Given the Image dimensions.
    +
    bool isInPolygon(const std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    virtual ~IntelliShapedImage() override
    An Destructor.
    The IntelliRasterImage manages a RASTERIMAGE.
    diff --git a/docs/html/_intelli_tool_8cpp_source.html b/docs/html/_intelli_tool_8cpp_source.html index a1d20f2..1ef3e51 100644 --- a/docs/html/_intelli_tool_8cpp_source.html +++ b/docs/html/_intelli_tool_8cpp_source.html @@ -94,137 +94,141 @@ $(document).ready(function(){initNavTree('_intelli_tool_8cpp_source.html',''); i
    6  this->colorPicker = colorPicker;
    7  this->Toolsettings = Toolsettings;
    8  this->isDrawing = false;
    -
    9 }
    -
    10 
    - -
    12 
    -
    13 }
    -
    14 
    - -
    16  if(isDrawing) {
    -
    17  isDrawing = false;
    -
    18  this->deleteToolLayer();
    -
    19  }
    -
    20 }
    -
    21 
    - -
    23  //optional for tool
    -
    24 }
    -
    25 
    - -
    27  this->isDrawing = this->createToolLayer();
    -
    28  if(isDrawing) {
    - -
    30  }
    -
    31 }
    -
    32 
    - -
    34  if(isDrawing) {
    -
    35  isDrawing = false;
    -
    36  this->mergeToolLayer();
    -
    37  this->deleteToolLayer();
    - -
    39 
    -
    40  }
    -
    41 }
    + +
    10  this->activeLayer = nullptr;
    +
    11  this->Canvas = nullptr;
    +
    12 }
    +
    13 
    + +
    15 
    +
    16 }
    +
    17 
    + +
    19  if(isDrawing) {
    +
    20  isDrawing = false;
    +
    21  this->deleteToolLayer();
    +
    22  }
    +
    23 }
    +
    24 
    + +
    26  //optional for tool
    +
    27 }
    +
    28 
    + +
    30  this->isDrawing = this->createToolLayer();
    +
    31  if(isDrawing) {
    + +
    33  }
    +
    34 }
    +
    35 
    + +
    37  if(isDrawing) {
    +
    38  isDrawing = false;
    +
    39  this->mergeToolLayer();
    +
    40  this->deleteToolLayer();
    +
    42 
    -
    43 void IntelliTool::onMouseMoved(int x, int y){
    -
    44  if(isDrawing)
    - -
    46 }
    -
    47 
    - -
    49  //if needed for future general tasks implement in here
    -
    50  Area->DummyGui->setToolWidth(value + Toolsettings->getLineWidth());
    -
    51 }
    -
    52 
    -
    53 bool IntelliTool::createToolLayer(){
    -
    54  if(Area->createTempTopLayer(Area->activeLayer)) {
    -
    55  this->activeLayer = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
    -
    56  this->Canvas = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer + 1)];
    -
    57  return true;
    -
    58  }
    -
    59  return false;
    -
    60 }
    -
    61 
    -
    62 void IntelliTool::mergeToolLayer(){
    -
    63  QColor clr_0;
    -
    64  QColor clr_1;
    -
    65  QImage updatedImage = activeLayer->image->getImageData();
    -
    66 
    -
    67  for(int y = 0; y<activeLayer->height; y++) {
    -
    68  for(int x = 0; x<activeLayer->width; x++) {
    -
    69  clr_0 = updatedImage.pixelColor(x,y);
    -
    70  clr_1 = Canvas->image->imageData.pixelColor(x,y);
    -
    71  float t = static_cast<float>(clr_1.alpha()) / 255.f;
    -
    72  int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
    -
    73  int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
    -
    74  int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
    -
    75  int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
    -
    76  clr_0.setRed(r);
    -
    77  clr_0.setGreen(g);
    -
    78  clr_0.setBlue(b);
    -
    79  clr_0.setAlpha(a);
    -
    80 
    -
    81  updatedImage.setPixelColor(x, y, clr_0);
    -
    82  }
    -
    83  }
    -
    84  activeLayer->image->setImageData(updatedImage);
    -
    85  if(Canvas->image->getPolygonData().size() > 0) {
    - -
    87  }
    -
    88  Area->DummyGui->UpdateGui();
    -
    89 }
    -
    90 
    -
    91 void IntelliTool::deleteToolLayer(){
    -
    92  Area->deleteLayer(Area->activeLayer + 1, true);
    -
    93  this->Canvas = nullptr;
    -
    94 }
    -
    95 
    - -
    97  return ActiveType;
    -
    98 }
    -
    99 
    - -
    101  return isDrawing;
    -
    102 }
    +
    43  }
    +
    44 }
    +
    45 
    +
    46 void IntelliTool::onMouseMoved(int x, int y){
    +
    47  if(isDrawing)
    + +
    49 }
    +
    50 
    + +
    52  //if needed for future general tasks implement in here
    +
    53  Area->DummyGui->setToolWidth(value + Toolsettings->getLineWidth());
    +
    54 }
    +
    55 
    +
    56 bool IntelliTool::createToolLayer(){
    +
    57  if(Area->createTempTopLayer(Area->activeLayer)) {
    +
    58  this->activeLayer = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
    +
    59  this->Canvas = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer + 1)];
    +
    60  return true;
    +
    61  }
    +
    62  return false;
    +
    63 }
    +
    64 
    +
    65 void IntelliTool::mergeToolLayer(){
    +
    66  QColor clr_0;
    +
    67  QColor clr_1;
    +
    68  QImage updatedImage = activeLayer->image->getImageData();
    +
    69 
    +
    70  for(int y = 0; y<activeLayer->height; y++) {
    +
    71  for(int x = 0; x<activeLayer->width; x++) {
    +
    72  clr_0 = updatedImage.pixelColor(x,y);
    +
    73  clr_1 = Canvas->image->imageData.pixelColor(x,y);
    +
    74  float t = static_cast<float>(clr_1.alpha()) / 255.f;
    +
    75  int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
    +
    76  int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
    +
    77  int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
    +
    78  int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
    +
    79  clr_0.setRed(r);
    +
    80  clr_0.setGreen(g);
    +
    81  clr_0.setBlue(b);
    +
    82  clr_0.setAlpha(a);
    +
    83 
    +
    84  updatedImage.setPixelColor(x, y, clr_0);
    +
    85  }
    +
    86  }
    +
    87  activeLayer->image->setImageData(updatedImage);
    +
    88  if(Canvas->image->getPolygonData().size() > 0) {
    + +
    90  }
    +
    91  Area->DummyGui->UpdateGui();
    +
    92 }
    +
    93 
    +
    94 void IntelliTool::deleteToolLayer(){
    +
    95  Area->deleteLayer(Area->activeLayer + 1, true);
    +
    96  this->Canvas = nullptr;
    +
    97 }
    +
    98 
    + +
    100  return ActiveType;
    +
    101 }
    +
    102 
    + +
    104  return isDrawing;
    +
    105 }
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    +
    void deleteLayer(int idx, bool isTool=false)
    The deleteLayer method removes a layer at a given idx.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    virtual std::vector< QPoint > getPolygonData()
    A function that returns the Polygondata if existent.
    Definition: IntelliImage.h:134
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    -
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:96
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:64
    +
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:99
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    virtual QImage getImageData()
    getImageData returns the data of the current image (Note: It will allways return a ARGB32bit QImage!...
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    void setToolWidth(int value)
    -
    bool getIsDrawing()
    +
    bool getIsDrawing()
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general Painting Area and colorPicker.
    Definition: IntelliTool.cpp:4
    QImage imageData
    The underlying image data.
    Definition: IntelliImage.h:41
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    -
    virtual ~IntelliTool()=0
    An abstract Destructor.
    Definition: IntelliTool.cpp:11
    +
    virtual ~IntelliTool()=0
    An abstract Destructor.
    Definition: IntelliTool.cpp:14
    virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
    An abstract function that sets the data of the visible Polygon, if needed.
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    + +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    The LayerObject struct holds all the information needed to construct a layer.
    Definition: PaintingArea.h:23
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:64
    -
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:96
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:99
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    -
    bool getIsDrawing()
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    bool getIsDrawing()
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general Painting Area and colorPicker.
    Definition: IntelliTool.cpp:4
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    -
    virtual ~IntelliTool()=0
    An abstract Destructor.
    Definition: IntelliTool.cpp:11
    +
    virtual ~IntelliTool()=0
    An abstract Destructor.
    Definition: IntelliTool.cpp:14
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas layer.
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the edge Width relative to value.
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    QColor getSecondColor()
    A function to read the secondary selected color.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    IntelliToolCircle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and ed...
    virtual ~IntelliToolCircle() override
    A Destructor.
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Draws a circle with radius of eulerian norm of mouse posit...
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    void setLineWidth(int LineWidth)
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    diff --git a/docs/html/_intelli_tool_circle_8h_source.html b/docs/html/_intelli_tool_circle_8h_source.html index 3c79cb3..2102f4e 100644 --- a/docs/html/_intelli_tool_circle_8h_source.html +++ b/docs/html/_intelli_tool_circle_8h_source.html @@ -125,11 +125,11 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8h_source.html','
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas layer.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the edge Width relative to value.
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    IntelliToolCircle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and ed...
    virtual ~IntelliToolCircle() override
    A Destructor.
    diff --git a/docs/html/_intelli_tool_flood_fill_8cpp_source.html b/docs/html/_intelli_tool_flood_fill_8cpp_source.html index 80a78a4..7b84984 100644 --- a/docs/html/_intelli_tool_flood_fill_8cpp_source.html +++ b/docs/html/_intelli_tool_flood_fill_8cpp_source.html @@ -171,11 +171,11 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp_source.h
    83 }
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    virtual void drawPixel(const QPoint &p1, const QColor &color)
    A funtcion used to draw a pixel on the Image with the given Color.
    IntelliToolFloodFill(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    @@ -185,9 +185,9 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp_source.h
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the point to flood fill around and does t...
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual ~IntelliToolFloodFill() override
    A Destructor.
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:64
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    @@ -195,13 +195,13 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8cpp_source.h
    QColor getFirstColor()
    A function to read the primary selected color.
    virtual QColor getPixelColor(QPoint &point)
    A function that returns the pixelcolor at a certain point.
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas.
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    IntelliToolFloodFill(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the point to flood fill around and does t...
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual ~IntelliToolFloodFill() override
    A Destructor.
    diff --git a/docs/html/_intelli_tool_line_8cpp_source.html b/docs/html/_intelli_tool_line_8cpp_source.html index 4635ffa..3f9ffdf 100644 --- a/docs/html/_intelli_tool_line_8cpp_source.html +++ b/docs/html/_intelli_tool_line_8cpp_source.html @@ -134,38 +134,38 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8cpp_source.html','
    46 }
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Drawing a Line from the startpoint to the current mouse po...
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the lineWidth relative to value.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    virtual ~IntelliToolLine() override
    An abstract Destructor.
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Clearing the canvas.
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Sets the starting point of the line.
    void setLineWidth(int LineWidth)
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    diff --git a/docs/html/_intelli_tool_line_8h_source.html b/docs/html/_intelli_tool_line_8h_source.html index 1d52f93..8ba791a 100644 --- a/docs/html/_intelli_tool_line_8h_source.html +++ b/docs/html/_intelli_tool_line_8h_source.html @@ -121,14 +121,14 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8h_source.html','')
    76 #endif
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    IntelliToolLine(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. Drawing a Line from the startpoint to the current mouse po...
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing the lineWidth relative to value.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    virtual ~IntelliToolLine() override
    An abstract Destructor.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse.
    diff --git a/docs/html/_intelli_tool_pen_8cpp_source.html b/docs/html/_intelli_tool_pen_8cpp_source.html index 654b941..e13c012 100644 --- a/docs/html/_intelli_tool_pen_8cpp_source.html +++ b/docs/html/_intelli_tool_pen_8cpp_source.html @@ -136,37 +136,37 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8cpp_source.html','' -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    virtual ~IntelliToolPen() override
    A Destructor.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. To draw the line.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current draw.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. Changing penWidth relativ to value.
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the drawing to the active layer.
    QColor getFirstColor()
    A function to read the primary selected color.
    IntelliToolPen(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. Reading the penWidth.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    void setLineWidth(int LineWidth)
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Starting the drawing procedure.
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    virtual ~IntelliToolPen() override
    A Destructor.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event. To draw the line.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current draw.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    diff --git a/docs/html/_intelli_tool_plain_8cpp_source.html b/docs/html/_intelli_tool_plain_8cpp_source.html index 3c78546..cd751eb 100644 --- a/docs/html/_intelli_tool_plain_8cpp_source.html +++ b/docs/html/_intelli_tool_plain_8cpp_source.html @@ -126,32 +126,32 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8cpp_source.html',
    38 }
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Filling the whole canvas.
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    IntelliToolPlainTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual ~IntelliToolPlainTool() override
    A Destructor.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    diff --git a/docs/html/_intelli_tool_plain_8h_source.html b/docs/html/_intelli_tool_plain_8h_source.html index 4072cd9..757984f 100644 --- a/docs/html/_intelli_tool_plain_8h_source.html +++ b/docs/html/_intelli_tool_plain_8h_source.html @@ -118,11 +118,11 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8h_source.html',''
    70 #endif
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    The IntelliToolPlainTool class represents a tool to fill the whole canvas with one color.
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    diff --git a/docs/html/_intelli_tool_polygon_8cpp_source.html b/docs/html/_intelli_tool_polygon_8cpp_source.html index 1bf79d6..5b880b5 100644 --- a/docs/html/_intelli_tool_polygon_8cpp_source.html +++ b/docs/html/_intelli_tool_polygon_8cpp_source.html @@ -115,7 +115,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8cpp_source.html
    27  if(Area->getPolygonDataOfRealLayer().size()>2) {
    28  std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer());
    29  QPoint Point(x,y);
    -
    30  isInside = IntelliTriangulation::isInPolygon(Triangles,Point);
    +
    30  isInside = IntelliTriangulation::isInPolygon(Triangles,Point);
    31  }
    32  else{
    33  isInside = true;
    @@ -188,7 +188,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8cpp_source.html
    100  for(int i = 0; i < activeLayer->width; i++) {
    101  for(int j = 0; j < activeLayer->height; j++) {
    102  Point = QPoint(i,j);
    -
    103  if(IntelliTriangulation::isInPolygon(Triangles,Point)) {
    +
    103  if(IntelliTriangulation::isInPolygon(Triangles,Point)) {
    104  this->Canvas->image->drawPixel(Point, colorTwo);
    105  }
    106  }
    @@ -238,39 +238,38 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8cpp_source.html
    150 }
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    virtual void drawPixel(const QPoint &p1, const QColor &color)
    A funtcion used to draw a pixel on the Image with the given Color.
    std::vector< Triangle > calculateTriangles(std::vector< QPoint > polyPoints)
    A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by ...
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    QColor getSecondColor()
    A function to read the secondary selected color.
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    virtual void drawPoint(const QPoint &p1, const QColor &color, const int &penWidth)
    A function that draws a point between on a given point in a given color.
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:63
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * activeLayer
    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
    Definition: IntelliTool.h:64
    IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
    A constructor setting the general paintingArea and colorPicker.
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    IntelliImage::ImageType getTypeOfImageRealLayer()
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    virtual void setImageData(const QImage &newData)
    setImageData overwrites the old imageData the new imageData.
    -
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse. Resetting the current fill.
    QColor getFirstColor()
    A function to read the primary selected color.
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    -
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    The IntelliColorPicker manages the selected colors for one whole project.
    ~IntelliToolPolygon() override
    A Destructor.
    @@ -278,12 +277,13 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8cpp_source.html
    std::vector< QPoint > getPolygonDataOfRealLayer()
    void setLineWidth(int LineWidth)
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Setting polygon points.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the fill to the active layer.
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    bool isInPolygon(const std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event. CHanging the lineWidth relative to value.
    virtual void setPolygon(const std::vector< QPoint > &polygonData)=0
    An abstract function that sets the data of the visible Polygon, if needed.
    diff --git a/docs/html/_intelli_tool_polygon_8h_source.html b/docs/html/_intelli_tool_polygon_8h_source.html index 47c74d6..560626e 100644 --- a/docs/html/_intelli_tool_polygon_8h_source.html +++ b/docs/html/_intelli_tool_polygon_8h_source.html @@ -132,10 +132,10 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8h_source.html',
    107 #endif
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
    A constructor setting the general paintingArea and colorPicker.
    diff --git a/docs/html/_intelli_tool_rectangle_8cpp_source.html b/docs/html/_intelli_tool_rectangle_8cpp_source.html index c152a86..c43529a 100644 --- a/docs/html/_intelli_tool_rectangle_8cpp_source.html +++ b/docs/html/_intelli_tool_rectangle_8cpp_source.html @@ -152,37 +152,37 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8cpp_source.ht
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.Changing edgeWidth relativ to value.
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    virtual void drawLine(const QPoint &p1, const QPoint &p2, const QColor &color, const int &penWidth)
    A function that draws a line between two given points in a given color.
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    virtual ~IntelliToolRectangle() override
    A Destructor.
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Setting the originCorner and draws a rectangle...
    QColor getSecondColor()
    A function to read the secondary selected color.
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse.Resetting the current draw.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    -
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:73
    +
    bool isDrawing
    A flag checking if the user is currently drawing or not.
    Definition: IntelliTool.h:74
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    -
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:68
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    +
    LayerObject * Canvas
    A pointer to the drawing canvas of the tool, work on this.
    Definition: IntelliTool.h:69
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    QColor getFirstColor()
    A function to read the primary selected color.
    -
    Tooltype ActiveType
    Definition: IntelliTool.h:51
    +
    Tooltype ActiveType
    Definition: IntelliTool.h:52
    virtual void onMouseMoved(int x, int y) override
    A function managing the mouse moved event.Drawing a rectangle to currrent mouse position.
    The IntelliColorPicker manages the selected colors for one whole project.
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    void setLineWidth(int LineWidth)
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    virtual void onMouseLeftReleased(int x, int y) override
    A function managing the left click released of a mouse. Merging the draw to the active layer.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    virtual void drawPlain(const QColor &color)
    A function that clears the whole image in a given Color.
    IntelliToolRectangle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
    A constructor setting the general paintingArea and colorPicker. And reading in the alphaInner and edg...
    diff --git a/docs/html/_intelli_tool_rectangle_8h_source.html b/docs/html/_intelli_tool_rectangle_8h_source.html index a0cd611..74655e4 100644 --- a/docs/html/_intelli_tool_rectangle_8h_source.html +++ b/docs/html/_intelli_tool_rectangle_8h_source.html @@ -124,12 +124,12 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8h_source.html
    virtual void onWheelScrolled(int value) override
    A function managing the scroll event.Changing edgeWidth relativ to value.
    virtual void onMouseRightReleased(int x, int y) override
    A function managing the right click released of a mouse.
    -
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:56
    +
    IntelliColorPicker * colorPicker
    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
    Definition: IntelliTool.h:57
    -
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:58
    +
    IntelliToolsettings * Toolsettings
    Definition: IntelliTool.h:59
    virtual ~IntelliToolRectangle() override
    A Destructor.
    virtual void onMouseLeftPressed(int x, int y) override
    A function managing the left click pressed of a mouse. Setting the originCorner and draws a rectangle...
    -
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:49
    +
    PaintingArea * Area
    A pointer to the general PaintingArea to interact with.
    Definition: IntelliTool.h:50
    virtual void onMouseRightPressed(int x, int y) override
    A function managing the right click pressed of a mouse.Resetting the current draw.
    The PaintingArea class manages the methods and stores information about the current painting area,...
    Definition: PaintingArea.h:53
    The IntelliToolRectangle class represents a tool to draw a rectangle.
    diff --git a/docs/html/_intelli_triangulation_8cpp_source.html b/docs/html/_intelli_triangulation_8cpp_source.html index cd169d1..01d0e53 100644 --- a/docs/html/_intelli_triangulation_8cpp_source.html +++ b/docs/html/_intelli_triangulation_8cpp_source.html @@ -201,7 +201,7 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8cpp_source.htm
    113  return Triangles;
    114 }
    115 
    -
    116 bool IntelliTriangulation::isInPolygon(std::vector<Triangle> &triangles, QPoint &point){
    +
    116 bool IntelliTriangulation::isInPolygon(const std::vector<Triangle> &triangles, QPoint &point){
    117  for(auto triangle : triangles) {
    118  if(IntelliTriangulation::isInTriangle(triangle, point)) {
    119  return true;
    @@ -217,8 +217,8 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8cpp_source.htm
    #define pi
    The Triangle struct holds the 3 vertices of a triangle.
    -
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    +
    bool isInPolygon(const std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    diff --git a/docs/html/_intelli_triangulation_8h.js b/docs/html/_intelli_triangulation_8h.js index 0384860..1dfa6d3 100644 --- a/docs/html/_intelli_triangulation_8h.js +++ b/docs/html/_intelli_triangulation_8h.js @@ -2,7 +2,7 @@ var _intelli_triangulation_8h = [ [ "Triangle", "struct_triangle.html", "struct_triangle" ], [ "calculateTriangles", "_intelli_triangulation_8h.html#acdaf1ed598e868b25e9e06d580da32e5", null ], - [ "isInPolygon", "_intelli_triangulation_8h.html#a00621e2d8708fe2e8966d7d79b64e186", null ], + [ "isInPolygon", "_intelli_triangulation_8h.html#ac276696f29d141ed34614c1c3b1c040f", null ], [ "isInTriangle", "_intelli_triangulation_8h.html#ac150fee67fd41a451bd2592f10e00197", null ], [ "sign", "_intelli_triangulation_8h.html#af9af549a7faff35a74c1265b290ea0ca", null ] ]; \ No newline at end of file diff --git a/docs/html/_intelli_triangulation_8h_source.html b/docs/html/_intelli_triangulation_8h_source.html index f1c9ada..3a7b7a2 100644 --- a/docs/html/_intelli_triangulation_8h_source.html +++ b/docs/html/_intelli_triangulation_8h_source.html @@ -121,7 +121,7 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8h_source.html'
    49 
    55 std::vector<Triangle> calculateTriangles(std::vector<QPoint> polyPoints);
    56 
    -
    63 bool isInPolygon(std::vector<Triangle> &triangles, QPoint &point);
    +
    63 bool isInPolygon(const std::vector<Triangle> &triangles, QPoint &point);
    64 }
    65 
    66 #endif
    @@ -133,10 +133,10 @@ $(document).ready(function(){initNavTree('_intelli_triangulation_8h_source.html'
    The Triangle struct holds the 3 vertices of a triangle.
    -
    bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    +
    bool isInPolygon(const std::vector< Triangle > &triangles, QPoint &point)
    A function to check if a point lies in a polygon by checking its spanning triangles.
    int getWidthOfActive()
    The getWidthOfActive gets the horizontal dimensions of the active layer.
    void createCircleTool()
    -
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:15
    -
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:33
    +
    virtual void onMouseRightPressed(int x, int y)
    A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
    Definition: IntelliTool.cpp:18
    +
    virtual void onMouseLeftReleased(int x, int y)
    A function managing the left click Released of a Mouse. Call this in child classes!
    Definition: IntelliTool.cpp:36
    void setRenderSettings(bool isFastRenderingOn)
    setRenderSettings updates all Images to the new Rendersetting.
    -
    IntelliImage * getImageOfActiveLayer()
    +
    IntelliImage * getImageOfActiveLayer()
    void mouseReleaseEvent(QMouseEvent *event) override
    void createRectangleTool()
    -
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:26
    +
    virtual void onMouseLeftPressed(int x, int y)
    A function managing the left click Pressed of a Mouse. Resetting the current draw....
    Definition: IntelliTool.cpp:29
    bool save(const QString &filePath, const char *fileFormat)
    The save method is used for exporting the current project as one picture.
    @@ -591,18 +580,18 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
    The IntelliToolPen class represents a tool to draw a line.
    void colorPickerSetSecondColor()
    The colorPickerSetSecondColor calls the QTColorPicker to determine the secondary drawing color.
    -
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:22
    +
    virtual void onMouseRightReleased(int x, int y)
    A function managing the right click Released of a Mouse. Merging the Canvas to Active....
    Definition: IntelliTool.cpp:25
    void colorPickerSetFirstColor()
    The colorPickerSetFirstColor calls the QTColorPicker to determine the primary drawing color.
    -
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:96
    +
    Tooltype getTooltype()
    Definition: IntelliTool.cpp:99
    IntelliImage::ImageType getTypeOfImageRealLayer()
    int width
    width - Stores the width of a layer in pixels.
    Definition: PaintingArea.h:31
    bool isFastRenderering()
    The getfastRenderer gets the value of the flag for the fastRenderer setting.
    ~PaintingArea() override
    This deconstructor is used to clear up the memory and remove the currently active window.
    void mouseMoveEvent(QMouseEvent *event) override
    -
    int getNumberOfActiveLayer()
    +
    int getNumberOfActiveLayer()
    void setFirstColor(QColor Color)
    A function to set the primary color.
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    @@ -613,11 +602,11 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
    void moveActiveLayer(int idx)
    The moveActiveLayer moves the active layer to a specific position in the layer stack.
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:202
    PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
    PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
    -
    bool getIsDrawing()
    +
    bool getIsDrawing()
    QColor getFirstColor()
    A function to read the primary selected color.
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    -
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    +
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    void createFloodFillTool()
    void slotActivateLayer(int a)
    The slotActivateLayer method handles the event of selecting one layer as active.
    void paintEvent(QPaintEvent *event) override
    @@ -629,7 +618,6 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
    virtual bool loadImage(const QString &filePath)
    A function that loads and sclaes an image to the fitting dimensions.
    std::vector< QPoint > getPolygonDataOfRealLayer()
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:201
    -
    void resizeEvent(QResizeEvent *event) override
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    void swapColors()
    A function switching primary and secondary color.
    @@ -639,10 +627,10 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
    The IntelliToolCircle class represents a tool to draw a circle.
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    An abstract class which manages the basic IntelliImage operations.
    Definition: IntelliImage.h:22
    -
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:43
    +
    virtual void onMouseMoved(int x, int y)
    A function managing the mouse moved event. Call this in child classes!
    Definition: IntelliTool.cpp:46
    The IntelliToolPolygon managed the Drawing of Polygonforms.
    virtual void calculateVisiblity()=0
    An abstract function that calculates the visiblity of the Image data if needed.
    -
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:48
    +
    virtual void onWheelScrolled(int value)
    A function managing the scroll event. A positive value means scrolling outwards. Call this in child c...
    Definition: IntelliTool.cpp:51
    The IntelliRasterImage manages a RASTERIMAGE.
    int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
    The addLayer adds a layer to the current project/ painting area.
    diff --git a/docs/html/_painting_area_8h_source.html b/docs/html/_painting_area_8h_source.html index 89a704d..0f9ed23 100644 --- a/docs/html/_painting_area_8h_source.html +++ b/docs/html/_painting_area_8h_source.html @@ -187,43 +187,39 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html',''); in
    221 
    222 void paintEvent(QPaintEvent*event) override;
    223 
    -
    224 void resizeEvent(QResizeEvent*event) override;
    -
    225 
    -
    226 private:
    -
    227 void setLayerDimensions(int maxWidth, int maxHeight);
    -
    228 void selectLayerUp();
    -
    229 void selectLayerDown();
    -
    230 IntelliTool* copyActiveTool();
    -
    231 
    -
    232 QImage* Canvas;
    -
    233 int maxWidth;
    -
    234 int maxHeight;
    +
    224 private:
    +
    225 void setLayerDimensions(int maxWidth, int maxHeight);
    +
    226 void selectLayerUp();
    +
    227 void selectLayerDown();
    +
    228 IntelliTool* copyActiveTool();
    +
    229 
    +
    230 QImage* Canvas;
    +
    231 int maxWidth;
    +
    232 int maxHeight;
    +
    233 
    +
    234 bool isSettingPolygon = false;
    235 
    -
    236 bool isSettingPolygon = false;
    -
    237 
    -
    238 IntelliRenderSettings renderSettings;
    -
    239 IntelliTool* Tool;
    -
    240 IntelliPhotoGui* DummyGui;
    -
    241 
    -
    242 std::vector<LayerObject> layerBundle;
    -
    243 int activeLayer = -1;
    +
    236 IntelliRenderSettings renderSettings;
    +
    237 IntelliTool* Tool;
    +
    238 IntelliPhotoGui* DummyGui;
    +
    239 
    +
    240 std::vector<LayerObject> layerBundle;
    +
    241 int activeLayer = -1;
    +
    242 
    +
    243 void drawLayers(bool forSaving = false);
    244 
    -
    245 void drawLayers(bool forSaving = false);
    +
    245 bool createTempTopLayer(int idx);
    246 
    -
    247 void resizeLayer(QImage*image_res, const QSize &newSize);
    -
    248 
    -
    249 bool createTempTopLayer(int idx);
    -
    250 
    -
    251 void updateTools();
    -
    252 };
    -
    253 
    -
    254 #endif
    +
    247 void updateTools();
    +
    248 };
    +
    249 
    +
    250 #endif
    int getWidthOfActive()
    The getWidthOfActive gets the horizontal dimensions of the active layer.
    void createCircleTool()
    void setRenderSettings(bool isFastRenderingOn)
    setRenderSettings updates all Images to the new Rendersetting.
    -
    IntelliImage * getImageOfActiveLayer()
    +
    IntelliImage * getImageOfActiveLayer()
    void mouseReleaseEvent(QMouseEvent *event) override
    void createRectangleTool()
    @@ -258,7 +254,7 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html',''); in
    ~PaintingArea() override
    This deconstructor is used to clear up the memory and remove the currently active window.
    void mouseMoveEvent(QMouseEvent *event) override
    -
    int getNumberOfActiveLayer()
    +
    int getNumberOfActiveLayer()
    An abstract class that manages the basic events, like mouse clicks or scrolls events.
    Definition: IntelliTool.h:17
    void slotDeleteActiveLayer()
    The slotDeleteActiveLayer method handles the deletion of the active layer.
    bool open(const QString &filePath)
    The open method is used for loading a picture into the current layer.
    @@ -267,7 +263,7 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html',''); in
    IntelliColorPicker colorPicker
    Definition: PaintingArea.h:202
    PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
    PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
    int height
    height - Stores the height of a layer in pixels.
    Definition: PaintingArea.h:35
    -
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    +
    QImage getImageDataOfActiveLayer()
    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
    void createFloodFillTool()
    void slotActivateLayer(int a)
    The slotActivateLayer method handles the event of selecting one layer as active.
    The IntelliColorPicker manages the selected colors for one whole project.
    @@ -277,7 +273,6 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html',''); in
    IntelliImage * image
    image - Stores the imageData of the current LayerObject.
    Definition: PaintingArea.h:27
    std::vector< QPoint > getPolygonDataOfRealLayer()
    IntelliToolsettings Toolsettings
    Definition: PaintingArea.h:201
    -
    void resizeEvent(QResizeEvent *event) override
    void setPolygon(int idx)
    setPolygon is used for setting polygondata, it only works on RASTER images
    void colorPickerSwapColors()
    The colorPickerSwitchColor swaps the primary color with the secondary drawing color.
    void movePositionActive(int x, int y)
    The movePositionActive method moves the active layer to certain position.
    diff --git a/docs/html/class_intelli_tool.html b/docs/html/class_intelli_tool.html index f53b14d..3620d05 100644 --- a/docs/html/class_intelli_tool.html +++ b/docs/html/class_intelli_tool.html @@ -122,7 +122,8 @@ Public Types
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   @@ -212,6 +213,7 @@ Protected Attributes PLAIN  POLYGON  RECTANGLE  +NONE 

    Definition at line 20 of file IntelliTool.h.

    @@ -289,7 +291,7 @@ Protected Attributes

    An abstract Destructor.

    -

    Definition at line 11 of file IntelliTool.cpp.

    +

    Definition at line 14 of file IntelliTool.cpp.

    @@ -309,7 +311,7 @@ Protected Attributes
    -

    Definition at line 100 of file IntelliTool.cpp.

    +

    Definition at line 103 of file IntelliTool.cpp.

    @@ -328,7 +330,7 @@ Protected Attributes
    -

    Definition at line 96 of file IntelliTool.cpp.

    +

    Definition at line 99 of file IntelliTool.cpp.

    @@ -377,7 +379,7 @@ Protected Attributes

    Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

    -

    Definition at line 26 of file IntelliTool.cpp.

    +

    Definition at line 29 of file IntelliTool.cpp.

    @@ -426,7 +428,7 @@ Protected Attributes

    Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

    -

    Definition at line 33 of file IntelliTool.cpp.

    +

    Definition at line 36 of file IntelliTool.cpp.

    @@ -475,7 +477,7 @@ Protected Attributes

    Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

    -

    Definition at line 43 of file IntelliTool.cpp.

    +

    Definition at line 46 of file IntelliTool.cpp.

    @@ -524,7 +526,7 @@ Protected Attributes

    Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

    -

    Definition at line 15 of file IntelliTool.cpp.

    +

    Definition at line 18 of file IntelliTool.cpp.

    @@ -573,7 +575,7 @@ Protected Attributes

    Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

    -

    Definition at line 22 of file IntelliTool.cpp.

    +

    Definition at line 25 of file IntelliTool.cpp.

    @@ -611,7 +613,7 @@ Protected Attributes

    Reimplemented in IntelliToolPolygon, IntelliToolCircle, IntelliToolRectangle, IntelliToolLine, IntelliToolPen, IntelliToolFloodFill, and IntelliToolPlainTool.

    -

    Definition at line 48 of file IntelliTool.cpp.

    +

    Definition at line 51 of file IntelliTool.cpp.

    @@ -638,7 +640,7 @@ Protected Attributes

    A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews.

    -

    Definition at line 63 of file IntelliTool.h.

    +

    Definition at line 64 of file IntelliTool.h.

    @@ -662,7 +664,7 @@ Protected Attributes
    -

    Definition at line 51 of file IntelliTool.h.

    +

    Definition at line 52 of file IntelliTool.h.

    @@ -688,7 +690,7 @@ Protected Attributes

    A pointer to the general PaintingArea to interact with.

    -

    Definition at line 49 of file IntelliTool.h.

    +

    Definition at line 50 of file IntelliTool.h.

    @@ -714,7 +716,7 @@ Protected Attributes

    A pointer to the drawing canvas of the tool, work on this.

    -

    Definition at line 68 of file IntelliTool.h.

    +

    Definition at line 69 of file IntelliTool.h.

    @@ -740,7 +742,7 @@ Protected Attributes

    A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.

    -

    Definition at line 56 of file IntelliTool.h.

    +

    Definition at line 57 of file IntelliTool.h.

    @@ -766,7 +768,7 @@ Protected Attributes

    A flag checking if the user is currently drawing or not.

    -

    Definition at line 73 of file IntelliTool.h.

    +

    Definition at line 74 of file IntelliTool.h.

    @@ -790,7 +792,7 @@ Protected Attributes
    -

    Definition at line 58 of file IntelliTool.h.

    +

    Definition at line 59 of file IntelliTool.h.

    diff --git a/docs/html/class_intelli_tool.js b/docs/html/class_intelli_tool.js index bbfbb28..34404b0 100644 --- a/docs/html/class_intelli_tool.js +++ b/docs/html/class_intelli_tool.js @@ -7,7 +7,8 @@ var class_intelli_tool = [ "PEN", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678", null ], [ "PLAIN", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5", null ], [ "POLYGON", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc", null ], - [ "RECTANGLE", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a", null ] + [ "RECTANGLE", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a", null ], + [ "NONE", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693", null ] ] ], [ "IntelliTool", "class_intelli_tool.html#a08ef094271ce6248b42f888472463526", null ], [ "~IntelliTool", "class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2", null ], diff --git a/docs/html/class_intelli_tool_circle.html b/docs/html/class_intelli_tool_circle.html index 252908e..85c59e4 100644 --- a/docs/html/class_intelli_tool_circle.html +++ b/docs/html/class_intelli_tool_circle.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_intelli_tool_flood_fill.html b/docs/html/class_intelli_tool_flood_fill.html index c376724..813458f 100644 --- a/docs/html/class_intelli_tool_flood_fill.html +++ b/docs/html/class_intelli_tool_flood_fill.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_intelli_tool_line.html b/docs/html/class_intelli_tool_line.html index fbe600e..c782844 100644 --- a/docs/html/class_intelli_tool_line.html +++ b/docs/html/class_intelli_tool_line.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_intelli_tool_pen.html b/docs/html/class_intelli_tool_pen.html index 8e58a78..5340bba 100644 --- a/docs/html/class_intelli_tool_pen.html +++ b/docs/html/class_intelli_tool_pen.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_intelli_tool_plain_tool.html b/docs/html/class_intelli_tool_plain_tool.html index 1e74cd8..264868f 100644 --- a/docs/html/class_intelli_tool_plain_tool.html +++ b/docs/html/class_intelli_tool_plain_tool.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_intelli_tool_polygon.html b/docs/html/class_intelli_tool_polygon.html index ac3ad17..db07444 100644 --- a/docs/html/class_intelli_tool_polygon.html +++ b/docs/html/class_intelli_tool_polygon.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_intelli_tool_rectangle.html b/docs/html/class_intelli_tool_rectangle.html index ef936c6..6053b31 100644 --- a/docs/html/class_intelli_tool_rectangle.html +++ b/docs/html/class_intelli_tool_rectangle.html @@ -153,7 +153,8 @@ Additional Inherited Members
      Tooltype::PLAIN, Tooltype::POLYGON, -Tooltype::RECTANGLE +Tooltype::RECTANGLE, +Tooltype::NONE
    }   diff --git a/docs/html/class_painting_area-members.html b/docs/html/class_painting_area-members.html index 6357387..5e7e1ce 100644 --- a/docs/html/class_painting_area-members.html +++ b/docs/html/class_painting_area-members.html @@ -120,17 +120,16 @@ $(document).ready(function(){initNavTree('class_painting_area.html',''); initRes open(const QString &filePath)PaintingArea paintEvent(QPaintEvent *event) overridePaintingAreaprotected PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)PaintingArea - resizeEvent(QResizeEvent *event) overridePaintingAreaprotected - save(const QString &filePath, const char *fileFormat)PaintingArea - setLayerActive(int idx)PaintingArea - setLayerAlpha(int idx, int alpha)PaintingArea - setPolygon(int idx)PaintingArea - setRenderSettings(bool isFastRenderingOn)PaintingArea - slotActivateLayer(int a)PaintingAreaslot - slotDeleteActiveLayer()PaintingAreaslot - ToolsettingsPaintingArea - wheelEvent(QWheelEvent *event) overridePaintingAreaprotected - ~PaintingArea() overridePaintingArea + save(const QString &filePath, const char *fileFormat)PaintingArea + setLayerActive(int idx)PaintingArea + setLayerAlpha(int idx, int alpha)PaintingArea + setPolygon(int idx)PaintingArea + setRenderSettings(bool isFastRenderingOn)PaintingArea + slotActivateLayer(int a)PaintingAreaslot + slotDeleteActiveLayer()PaintingAreaslot + ToolsettingsPaintingArea + wheelEvent(QWheelEvent *event) overridePaintingAreaprotected + ~PaintingArea() overridePaintingArea diff --git a/docs/html/class_painting_area.html b/docs/html/class_painting_area.html index 726411a..edea4b5 100644 --- a/docs/html/class_painting_area.html +++ b/docs/html/class_painting_area.html @@ -218,8 +218,6 @@ Protected Member Functions   void paintEvent (QPaintEvent *event) override   -void resizeEvent (QResizeEvent *event) override - 

    Detailed Description

    The PaintingArea class manages the methods and stores information about the current painting area, which is the currently opened project.

    @@ -704,7 +702,7 @@ Protected Member Functions

    getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer it return a 10*10 white picture)

    Returns
    return the image as an rgba32bit qImage
    -

    Definition at line 434 of file PaintingArea.cpp.

    +

    Definition at line 423 of file PaintingArea.cpp.

    @@ -723,7 +721,7 @@ Protected Member Functions
    -

    Definition at line 427 of file PaintingArea.cpp.

    +

    Definition at line 416 of file PaintingArea.cpp.

    @@ -780,7 +778,7 @@ Protected Member Functions
    -

    Definition at line 423 of file PaintingArea.cpp.

    +

    Definition at line 412 of file PaintingArea.cpp.

    @@ -1050,34 +1048,6 @@ Protected Member Functions

    Definition at line 324 of file PaintingArea.cpp.

    - - - -

    ◆ resizeEvent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void PaintingArea::resizeEvent (QResizeEvent * event)
    -
    -overrideprotected
    -
    - -

    Definition at line 335 of file PaintingArea.cpp.

    -
    diff --git a/docs/html/class_painting_area.js b/docs/html/class_painting_area.js index 2094528..24a7f17 100644 --- a/docs/html/class_painting_area.js +++ b/docs/html/class_painting_area.js @@ -31,7 +31,6 @@ var class_painting_area = [ "movePositionActive", "class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7", null ], [ "open", "class_painting_area.html#a88c7e759aa8375a56129791645f46ea5", null ], [ "paintEvent", "class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7", null ], - [ "resizeEvent", "class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335", null ], [ "save", "class_painting_area.html#aa2463d4f403224086acab02903ae407e", null ], [ "setLayerActive", "class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9", null ], [ "setLayerAlpha", "class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055", null ], diff --git a/docs/html/functions.html b/docs/html/functions.html index 3ddbda5..9b6d083 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -452,9 +452,6 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();

    - r -

      -
    • resizeEvent() -: PaintingArea -
    • resizeImage() : IntelliImage
    • diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index e16fd3a..9ed0c7c 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -388,9 +388,6 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl

      - r -

        -
      • resizeEvent() -: PaintingArea -
      • resizeImage() : IntelliImage
      • diff --git a/docs/html/namespace_intelli_triangulation.html b/docs/html/namespace_intelli_triangulation.html index ea5d042..38b5a0b 100644 --- a/docs/html/namespace_intelli_triangulation.html +++ b/docs/html/namespace_intelli_triangulation.html @@ -100,9 +100,9 @@ Functions std::vector< TrianglecalculateTriangles (std::vector< QPoint > polyPoints)  A function to split a polygon in its spanning traingles by using Meisters Theorem of graph theory by clipping ears of a planar graph. More...
          -bool isInPolygon (std::vector< Triangle > &triangles, QPoint &point) - A function to check if a point lies in a polygon by checking its spanning triangles. More...
        -  +bool isInPolygon (const std::vector< Triangle > &triangles, QPoint &point) + A function to check if a point lies in a polygon by checking its spanning triangles. More...

        Function Documentation

        @@ -134,8 +134,8 @@ Functions - -

        ◆ isInPolygon()

        + +

        ◆ isInPolygon()

        @@ -143,7 +143,7 @@ Functions bool IntelliTriangulation::isInPolygon ( - std::vector< Triangle > &  + const std::vector< Triangle > &  triangles, diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html index 02750d3..7b6da0c 100644 --- a/docs/html/namespacemembers.html +++ b/docs/html/namespacemembers.html @@ -87,7 +87,7 @@ $(document).ready(function(){initNavTree('namespacemembers.html',''); initResiza : IntelliTriangulation
      • isInPolygon() -: IntelliTriangulation +: IntelliTriangulation
      • isInTriangle() : IntelliTriangulation diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html index d5a497c..29b57bf 100644 --- a/docs/html/namespacemembers_func.html +++ b/docs/html/namespacemembers_func.html @@ -87,7 +87,7 @@ $(document).ready(function(){initNavTree('namespacemembers_func.html',''); initR : IntelliTriangulation
      • isInPolygon() -: IntelliTriangulation +: IntelliTriangulation
      • isInTriangle() : IntelliTriangulation diff --git a/docs/html/navtreedata.js b/docs/html/navtreedata.js index d347af5..c317f86 100644 --- a/docs/html/navtreedata.js +++ b/docs/html/navtreedata.js @@ -55,7 +55,7 @@ var NAVTREE = var NAVTREEINDEX = [ "_intelli_color_picker_8cpp.html", -"class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423" +"class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/docs/html/navtreeindex0.js b/docs/html/navtreeindex0.js index 49b8dd2..133c659 100644 --- a/docs/html/navtreeindex0.js +++ b/docs/html/navtreeindex0.js @@ -68,8 +68,8 @@ var NAVTREEINDEX0 = "_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74":[2,0,0,2,6,0], "_intelli_triangulation_8cpp_source.html":[2,0,0,2,6], "_intelli_triangulation_8h.html":[2,0,0,2,7], -"_intelli_triangulation_8h.html#a00621e2d8708fe2e8966d7d79b64e186":[2,0,0,2,7,2], "_intelli_triangulation_8h.html#ac150fee67fd41a451bd2592f10e00197":[2,0,0,2,7,3], +"_intelli_triangulation_8h.html#ac276696f29d141ed34614c1c3b1c040f":[2,0,0,2,7,2], "_intelli_triangulation_8h.html#acdaf1ed598e868b25e9e06d580da32e5":[2,0,0,2,7,1], "_intelli_triangulation_8h.html#af9af549a7faff35a74c1265b290ea0ca":[2,0,0,2,7,4], "_intelli_triangulation_8h_source.html":[2,0,0,2,7], @@ -154,6 +154,7 @@ var NAVTREEINDEX0 = "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7":[1,0,7,0,2], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93":[1,0,7,0,1], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a":[1,0,7,0,6], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693":[1,0,7,0,7], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678":[1,0,7,0,3], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc":[1,0,7,0,5], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5":[1,0,7,0,4], @@ -240,14 +241,13 @@ var NAVTREEINDEX0 = "class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271":[1,0,15,4], "class_painting_area.html":[1,0,17], "class_painting_area.html#a0b22e18069b524f3e75857d203baf256":[1,0,17,8], -"class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed":[1,0,17,40], +"class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed":[1,0,17,39], "class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b":[1,0,17,12], -"class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e":[1,0,17,38], +"class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e":[1,0,17,37], "class_painting_area.html#a240c33a7875addac86080cdfb0db036a":[1,0,17,9], "class_painting_area.html#a24280454ebb80db7feba2fd621513353":[1,0,17,20], "class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466":[1,0,17,7], "class_painting_area.html#a35b5df914acb608cc29717659793359c":[1,0,17,26], "class_painting_area.html#a3de83443d2d5cf460ff48d0602070938":[1,0,17,11], -"class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df":[1,0,17,4], -"class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7":[1,0,17,30] +"class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df":[1,0,17,4] }; diff --git a/docs/html/navtreeindex1.js b/docs/html/navtreeindex1.js index 37e2e48..c433266 100644 --- a/docs/html/navtreeindex1.js +++ b/docs/html/navtreeindex1.js @@ -1,27 +1,27 @@ var NAVTREEINDEX1 = { +"class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7":[1,0,17,30], "class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423":[1,0,17,16], "class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460":[1,0,17,0], "class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd":[1,0,17,13], -"class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4":[1,0,17,39], -"class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd":[1,0,17,36], +"class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4":[1,0,17,38], +"class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd":[1,0,17,35], "class_painting_area.html#a675ee91b26b1c58be6d833f279d81597":[1,0,17,23], -"class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055":[1,0,17,34], +"class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055":[1,0,17,33], "class_painting_area.html#a6e9207612cef104d39013564696fe989":[1,0,17,2], -"class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec":[1,0,17,37], -"class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9":[1,0,17,33], +"class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec":[1,0,17,36], +"class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9":[1,0,17,32], "class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90":[1,0,17,21], "class_painting_area.html#a88c7e759aa8375a56129791645f46ea5":[1,0,17,29], "class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353":[1,0,17,10], "class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630":[1,0,17,14], "class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5":[1,0,17,24], -"class_painting_area.html#aa2463d4f403224086acab02903ae407e":[1,0,17,32], +"class_painting_area.html#aa2463d4f403224086acab02903ae407e":[1,0,17,31], "class_painting_area.html#aa32adc113f77031945f73e33051931e8":[1,0,17,1], -"class_painting_area.html#aa409492ac26483d618bb33616f2e3f81":[1,0,17,35], +"class_painting_area.html#aa409492ac26483d618bb33616f2e3f81":[1,0,17,34], "class_painting_area.html#aa811d142df9239ae248679bd70ad6da7":[1,0,17,18], "class_painting_area.html#ab4a0b3a497ea8821a045ad12c34bd980":[1,0,17,3], -"class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335":[1,0,17,31], -"class_painting_area.html#abc2f798744f1dc805a651731eb1692ea":[1,0,17,41], +"class_painting_area.html#abc2f798744f1dc805a651731eb1692ea":[1,0,17,40], "class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15":[1,0,17,25], "class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4":[1,0,17,15], "class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7":[1,0,17,28], @@ -32,10 +32,10 @@ var NAVTREEINDEX1 = "class_painting_area.html#ae92b27dfd09573c224d2ae1958d3bead":[1,0,17,22], "class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8":[1,0,17,19], "class_unit_test.html":[1,0,19], -"class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,19,0], "class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,19,2], -"class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,19,1], +"class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,19,0], "class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,19,3], +"class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,19,1], "classes.html":[1,1], "dir_13830bfc3dd6736fe878600c9081919f.html":[2,0,0,3], "dir_4e4e2e75df7fa6971448b424c011c8b5.html":[2,0,0,0], diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js index c478149..c04840d 100644 --- a/docs/html/search/all_10.js +++ b/docs/html/search/all_10.js @@ -1,6 +1,6 @@ var searchData= [ - ['wheelevent_172',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], - ['width_173',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_174',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['unittest_169',['UnitTest',['../class_unit_test.html',1,'UnitTest'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], + ['updategui_170',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_171',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js index e5b1ebc..c478149 100644 --- a/docs/html/search/all_11.js +++ b/docs/html/search/all_11.js @@ -1,18 +1,6 @@ var searchData= [ - ['_7eintellicolorpicker_175',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_176',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_177',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_178',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_179',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_180',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_181',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_182',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_183',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_184',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_185',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_186',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_187',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_188',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], - ['_7eunittest_189',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] + ['wheelevent_172',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], + ['width_173',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_174',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/search/all_12.html b/docs/html/search/all_12.html new file mode 100644 index 0000000..dd9ff1d --- /dev/null +++ b/docs/html/search/all_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
        +
        Loading...
        +
        + +
        Searching...
        +
        No Matches
        + +
        + + diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js new file mode 100644 index 0000000..e5b1ebc --- /dev/null +++ b/docs/html/search/all_12.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['_7eintellicolorpicker_175',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_176',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_177',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_178',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_179',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_180',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_181',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolline_182',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_183',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_184',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_185',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_186',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_187',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_188',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], + ['_7eunittest_189',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] +]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index da51913..29d4e96 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -56,6 +56,6 @@ var searchData= ['intellitriangulation_2eh_109',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]], ['isdrawing_110',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]], ['isfastrenderering_111',['isFastRenderering',['../class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd',1,'IntelliRenderSettings']]], - ['isinpolygon_112',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], + ['isinpolygon_112',['isInPolygon',['../namespace_intelli_triangulation.html#ac276696f29d141ed34614c1c3b1c040f',1,'IntelliTriangulation']]], ['isintriangle_113',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js index 2178336..7561d3b 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,10 +1,4 @@ var searchData= [ - ['onmouseleftpressed_125',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], - ['onmouseleftreleased_126',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], - ['onmousemoved_127',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], - ['onmouserightpressed_128',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], - ['onmouserightreleased_129',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], - ['onwheelscrolled_130',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], - ['open_131',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['none_125',['NONE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693',1,'IntelliTool']]] ]; diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index 5271c89..8b6a8a0 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,12 +1,10 @@ var searchData= [ - ['paintevent_132',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_133',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], - ['paintingarea_2ecpp_134',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_135',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], - ['pen_136',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['pi_137',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], - ['plain_138',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_139',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], - ['polygondata_140',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['onmouseleftpressed_126',['onMouseLeftPressed',['../class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c',1,'IntelliTool::onMouseLeftPressed()'],['../class_intelli_tool_circle.html#ae883b8ae833c78a8867e626c600f9639',1,'IntelliToolCircle::onMouseLeftPressed()'],['../class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961',1,'IntelliToolFloodFill::onMouseLeftPressed()'],['../class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846',1,'IntelliToolLine::onMouseLeftPressed()'],['../class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205',1,'IntelliToolPen::onMouseLeftPressed()'],['../class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9',1,'IntelliToolPlainTool::onMouseLeftPressed()'],['../class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d',1,'IntelliToolPolygon::onMouseLeftPressed()'],['../class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d',1,'IntelliToolRectangle::onMouseLeftPressed()']]], + ['onmouseleftreleased_127',['onMouseLeftReleased',['../class_intelli_tool.html#a906a2575c16c8a33cb2a5197f8d8cc5b',1,'IntelliTool::onMouseLeftReleased()'],['../class_intelli_tool_circle.html#ad8e438ec997c57262b5efc2db4cee1a3',1,'IntelliToolCircle::onMouseLeftReleased()'],['../class_intelli_tool_flood_fill.html#a7438ef96c6c36068bce76e2364e8594c',1,'IntelliToolFloodFill::onMouseLeftReleased()'],['../class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482',1,'IntelliToolLine::onMouseLeftReleased()'],['../class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d',1,'IntelliToolPen::onMouseLeftReleased()'],['../class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400',1,'IntelliToolPlainTool::onMouseLeftReleased()'],['../class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21',1,'IntelliToolPolygon::onMouseLeftReleased()'],['../class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43',1,'IntelliToolRectangle::onMouseLeftReleased()']]], + ['onmousemoved_128',['onMouseMoved',['../class_intelli_tool.html#ac10e20414cd8855a2f9b103fb6408639',1,'IntelliTool::onMouseMoved()'],['../class_intelli_tool_circle.html#a90ee58c5390a86afc75c14ca79b91d7b',1,'IntelliToolCircle::onMouseMoved()'],['../class_intelli_tool_flood_fill.html#a3cd42cea99bc7583875abcc0c274c668',1,'IntelliToolFloodFill::onMouseMoved()'],['../class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b',1,'IntelliToolLine::onMouseMoved()'],['../class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2',1,'IntelliToolPen::onMouseMoved()'],['../class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c',1,'IntelliToolPlainTool::onMouseMoved()'],['../class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922',1,'IntelliToolPolygon::onMouseMoved()'],['../class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b',1,'IntelliToolRectangle::onMouseMoved()']]], + ['onmouserightpressed_129',['onMouseRightPressed',['../class_intelli_tool.html#a1e6aa68ac5f3c2ca02319e5ef3f0c966',1,'IntelliTool::onMouseRightPressed()'],['../class_intelli_tool_circle.html#a29d7b9ed4960e6fe1f31ff620363e429',1,'IntelliToolCircle::onMouseRightPressed()'],['../class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4',1,'IntelliToolFloodFill::onMouseRightPressed()'],['../class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3',1,'IntelliToolLine::onMouseRightPressed()'],['../class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce',1,'IntelliToolPen::onMouseRightPressed()'],['../class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1',1,'IntelliToolPlainTool::onMouseRightPressed()'],['../class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427',1,'IntelliToolPolygon::onMouseRightPressed()'],['../class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8',1,'IntelliToolRectangle::onMouseRightPressed()']]], + ['onmouserightreleased_130',['onMouseRightReleased',['../class_intelli_tool.html#a16189b00307c6d7e89f28198f54404b0',1,'IntelliTool::onMouseRightReleased()'],['../class_intelli_tool_circle.html#aca07540f2f7ccb3d2c0b84890c1afc4c',1,'IntelliToolCircle::onMouseRightReleased()'],['../class_intelli_tool_flood_fill.html#a39cf49c0ce46f96be3510f0b70c9d892',1,'IntelliToolFloodFill::onMouseRightReleased()'],['../class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2',1,'IntelliToolLine::onMouseRightReleased()'],['../class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13',1,'IntelliToolPen::onMouseRightReleased()'],['../class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8',1,'IntelliToolPlainTool::onMouseRightReleased()'],['../class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b',1,'IntelliToolPolygon::onMouseRightReleased()'],['../class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f',1,'IntelliToolRectangle::onMouseRightReleased()']]], + ['onwheelscrolled_131',['onWheelScrolled',['../class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574',1,'IntelliTool::onWheelScrolled()'],['../class_intelli_tool_circle.html#ae2d9b0fb6695c184c4cb507a5fb75506',1,'IntelliToolCircle::onWheelScrolled()'],['../class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991',1,'IntelliToolFloodFill::onWheelScrolled()'],['../class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125',1,'IntelliToolLine::onWheelScrolled()'],['../class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a',1,'IntelliToolPen::onWheelScrolled()'],['../class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d',1,'IntelliToolPlainTool::onWheelScrolled()'],['../class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17',1,'IntelliToolPolygon::onWheelScrolled()'],['../class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c',1,'IntelliToolRectangle::onWheelScrolled()']]], + ['open_132',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index dc3c2ae..39fcfaf 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,7 +1,12 @@ var searchData= [ - ['rasterimage_141',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], - ['rectangle_142',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], - ['resizeevent_143',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], - ['resizeimage_144',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['paintevent_133',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_134',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], + ['paintingarea_2ecpp_135',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_136',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], + ['pen_137',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['pi_138',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], + ['plain_139',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_140',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], + ['polygondata_141',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] ]; diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js index fa7e83c..42918c9 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,22 +1,6 @@ var searchData= [ - ['save_145',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['setfastrendering_146',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], - ['setfirstcolor_147',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setimagedata_148',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], - ['setinneralpha_149',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], - ['setlayeractive_150',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_151',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlinewidth_152',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], - ['setpolygon_153',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], - ['setrendersettings_154',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], - ['setsecondcolor_155',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['settoolwidth_156',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], - ['shapedimage_157',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], - ['sign_158',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_159',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotcloseevent_160',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], - ['slotdeleteactivelayer_161',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['sloteingabe_162',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], - ['swapcolors_163',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['rasterimage_142',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], + ['rectangle_143',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], + ['resizeimage_144',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js index 9dc44e7..fa7e83c 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,8 +1,22 @@ var searchData= [ - ['toolsettings_164',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['tooltype_165',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], - ['triangle_166',['Triangle',['../struct_triangle.html',1,'']]], - ['tst_5funittest_2ecpp_167',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]], - ['typeofimage_168',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['save_145',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['setfastrendering_146',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_147',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_148',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_149',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_150',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_151',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_152',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_153',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], + ['setrendersettings_154',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_155',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_156',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['shapedimage_157',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], + ['sign_158',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_159',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_160',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_161',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_162',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_163',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js index c04840d..9dc44e7 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -1,6 +1,8 @@ var searchData= [ - ['unittest_169',['UnitTest',['../class_unit_test.html',1,'UnitTest'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], - ['updategui_170',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_171',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['toolsettings_164',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['tooltype_165',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], + ['triangle_166',['Triangle',['../struct_triangle.html',1,'']]], + ['tst_5funittest_2ecpp_167',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]], + ['typeofimage_168',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js index 5df6bbf..bcf997e 100644 --- a/docs/html/search/enums_0.js +++ b/docs/html/search/enums_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['imagetype_386',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]] + ['imagetype_385',['ImageType',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680e',1,'IntelliImage']]] ]; diff --git a/docs/html/search/enums_1.js b/docs/html/search/enums_1.js index b2eaa58..d007e63 100644 --- a/docs/html/search/enums_1.js +++ b/docs/html/search/enums_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['tooltype_387',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]] + ['tooltype_386',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js index 79025de..978402f 100644 --- a/docs/html/search/enumvalues_0.js +++ b/docs/html/search/enumvalues_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['circle_388',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] + ['circle_387',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_1.js b/docs/html/search/enumvalues_1.js index 61de8b1..ddc4de4 100644 --- a/docs/html/search/enumvalues_1.js +++ b/docs/html/search/enumvalues_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['floodfill_389',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] + ['floodfill_388',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_2.js b/docs/html/search/enumvalues_2.js index 7d5dc9e..e4f8994 100644 --- a/docs/html/search/enumvalues_2.js +++ b/docs/html/search/enumvalues_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['line_390',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] + ['line_389',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_3.js b/docs/html/search/enumvalues_3.js index 92b44e4..f0c43d0 100644 --- a/docs/html/search/enumvalues_3.js +++ b/docs/html/search/enumvalues_3.js @@ -1,6 +1,4 @@ var searchData= [ - ['pen_391',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['plain_392',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_393',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] + ['none_390',['NONE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_4.js b/docs/html/search/enumvalues_4.js index 31b7d8d..92b44e4 100644 --- a/docs/html/search/enumvalues_4.js +++ b/docs/html/search/enumvalues_4.js @@ -1,5 +1,6 @@ var searchData= [ - ['rasterimage_394',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], - ['rectangle_395',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] + ['pen_391',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['plain_392',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_393',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_5.js b/docs/html/search/enumvalues_5.js index b7988e0..31b7d8d 100644 --- a/docs/html/search/enumvalues_5.js +++ b/docs/html/search/enumvalues_5.js @@ -1,4 +1,5 @@ var searchData= [ - ['shapedimage_396',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]] + ['rasterimage_394',['RASTERIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eadd5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage']]], + ['rectangle_395',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_6.html b/docs/html/search/enumvalues_6.html index 9af68e0..2476491 100644 --- a/docs/html/search/enumvalues_6.html +++ b/docs/html/search/enumvalues_6.html @@ -1,7 +1,7 @@ - + diff --git a/docs/html/search/enumvalues_6.js b/docs/html/search/enumvalues_6.js index 7d686be..b7988e0 100644 --- a/docs/html/search/enumvalues_6.js +++ b/docs/html/search/enumvalues_6.js @@ -1,5 +1,4 @@ var searchData= [ - ['shapedimage_368',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]], - ['solid_5fline_369',['SOLID_LINE',['../class_intelli_toolsettings.html#a687dacd0e15b92dda5626b1b44b86089ae45e1e6b2e6dde14829d057a4ef44199',1,'IntelliToolsettings']]] + ['shapedimage_396',['SHAPEDIMAGE',['../class_intelli_image.html#a5274ce9fcdcb2659c148e7ff916b680eac065b60ec4cf443808263527bdc0df37',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js index 959b7f5..ea9b7cc 100644 --- a/docs/html/search/functions_4.js +++ b/docs/html/search/functions_4.js @@ -17,6 +17,6 @@ var searchData= ['intellitoolrectangle_306',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], ['intellitoolsettings_307',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], ['isfastrenderering_308',['isFastRenderering',['../class_intelli_render_settings.html#a5d0eb9a5a3bf788dd87509386dea8dcd',1,'IntelliRenderSettings']]], - ['isinpolygon_309',['isInPolygon',['../namespace_intelli_triangulation.html#a00621e2d8708fe2e8966d7d79b64e186',1,'IntelliTriangulation']]], + ['isinpolygon_309',['isInPolygon',['../namespace_intelli_triangulation.html#ac276696f29d141ed34614c1c3b1c040f',1,'IntelliTriangulation']]], ['isintriangle_310',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js index 1615c64..fc68a1a 100644 --- a/docs/html/search/functions_9.js +++ b/docs/html/search/functions_9.js @@ -1,5 +1,4 @@ var searchData= [ - ['resizeevent_327',['resizeEvent',['../class_painting_area.html#ab57e8ccda60fff7187463a90e65c5335',1,'PaintingArea']]], - ['resizeimage_328',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['resizeimage_327',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js index 513ad94..da081c6 100644 --- a/docs/html/search/functions_a.js +++ b/docs/html/search/functions_a.js @@ -1,21 +1,21 @@ var searchData= [ - ['save_329',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['setfastrendering_330',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], - ['setfirstcolor_331',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setimagedata_332',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], - ['setinneralpha_333',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], - ['setlayeractive_334',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_335',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlinewidth_336',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], - ['setpolygon_337',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], - ['setrendersettings_338',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], - ['setsecondcolor_339',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['settoolwidth_340',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], - ['sign_341',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_342',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotcloseevent_343',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], - ['slotdeleteactivelayer_344',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['sloteingabe_345',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], - ['swapcolors_346',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['save_328',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['setfastrendering_329',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_330',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_331',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_332',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_333',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_334',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_335',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_336',['setPolygon',['../class_intelli_image.html#aa4b3f4631bd972456917275afb9fd309',1,'IntelliImage::setPolygon()'],['../class_intelli_raster_image.html#a6462fa5f94c5e64e9e1f0c4658e0507b',1,'IntelliRasterImage::setPolygon()'],['../class_intelli_shaped_image.html#a4b69d75de7a3b85032482982f249458e',1,'IntelliShapedImage::setPolygon()'],['../class_painting_area.html#aa409492ac26483d618bb33616f2e3f81',1,'PaintingArea::setPolygon()']]], + ['setrendersettings_337',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_338',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_339',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['sign_340',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_341',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_342',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_343',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_344',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_345',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js index 91445d2..5ea2d27 100644 --- a/docs/html/search/functions_b.js +++ b/docs/html/search/functions_b.js @@ -1,6 +1,6 @@ var searchData= [ - ['unittest_347',['UnitTest',['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], - ['updategui_348',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_349',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['unittest_346',['UnitTest',['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], + ['updategui_347',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_348',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js index 686df1e..69c7a05 100644 --- a/docs/html/search/functions_c.js +++ b/docs/html/search/functions_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['wheelevent_350',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] + ['wheelevent_349',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js index 0bc346e..3f94bea 100644 --- a/docs/html/search/functions_d.js +++ b/docs/html/search/functions_d.js @@ -1,18 +1,18 @@ var searchData= [ - ['_7eintellicolorpicker_351',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_352',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_353',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_354',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_355',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_356',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_357',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_358',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_359',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_360',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_361',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_362',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_363',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_364',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], - ['_7eunittest_365',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] + ['_7eintellicolorpicker_350',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_351',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_352',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_353',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_354',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_355',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_356',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolline_357',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_358',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_359',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_360',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_361',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_362',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_363',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], + ['_7eunittest_364',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] ]; diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js index 43635c5..05963ce 100644 --- a/docs/html/search/searchdata.js +++ b/docs/html/search/searchdata.js @@ -1,13 +1,13 @@ var indexSectionsWithContent = { - 0: "abcdfghilmoprstuw~", + 0: "abcdfghilmnoprstuw~", 1: "ilptu", 2: "i", 3: "impt", 4: "acdgilmoprsuw~", 5: "abcfhiptw", 6: "it", - 7: "cflprs", + 7: "cflnprs", 8: "p" }; diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js index 27906d5..a99d4ca 100644 --- a/docs/html/search/variables_0.js +++ b/docs/html/search/variables_0.js @@ -1,8 +1,8 @@ var searchData= [ - ['a_366',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], - ['activelayer_367',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], - ['activetype_368',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], - ['alpha_369',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], - ['area_370',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] + ['a_365',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], + ['activelayer_366',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], + ['activetype_367',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], + ['alpha_368',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], + ['area_369',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] ]; diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js index f1630c4..9285079 100644 --- a/docs/html/search/variables_1.js +++ b/docs/html/search/variables_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['b_371',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] + ['b_370',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] ]; diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js index 0230af2..7a9fe2a 100644 --- a/docs/html/search/variables_2.js +++ b/docs/html/search/variables_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['c_372',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], - ['canvas_373',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], - ['colorpicker_374',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] + ['c_371',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], + ['canvas_372',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], + ['colorpicker_373',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] ]; diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js index 389024f..d205337 100644 --- a/docs/html/search/variables_3.js +++ b/docs/html/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['fastrenderering_375',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]] + ['fastrenderering_374',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]] ]; diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js index 096c756..1593930 100644 --- a/docs/html/search/variables_4.js +++ b/docs/html/search/variables_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['height_376',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], - ['heightoffset_377',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] + ['height_375',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], + ['heightoffset_376',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] ]; diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js index cd257ab..92a3332 100644 --- a/docs/html/search/variables_5.js +++ b/docs/html/search/variables_5.js @@ -1,6 +1,6 @@ var searchData= [ - ['image_378',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], - ['imagedata_379',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], - ['isdrawing_380',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] + ['image_377',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], + ['imagedata_378',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], + ['isdrawing_379',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] ]; diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js index 1cfc5e5..33dcbca 100644 --- a/docs/html/search/variables_6.js +++ b/docs/html/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['polygondata_381',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['polygondata_380',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] ]; diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js index ee88f95..07772eb 100644 --- a/docs/html/search/variables_7.js +++ b/docs/html/search/variables_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['toolsettings_382',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['typeofimage_383',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_381',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['typeofimage_382',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/variables_8.js b/docs/html/search/variables_8.js index d14ebf9..1bbcc80 100644 --- a/docs/html/search/variables_8.js +++ b/docs/html/search/variables_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['width_384',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_385',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['width_383',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_384',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/tst__unittest_8cpp_source.html b/docs/html/tst__unittest_8cpp_source.html index 0ae84df..6e615ba 100644 --- a/docs/html/tst__unittest_8cpp_source.html +++ b/docs/html/tst__unittest_8cpp_source.html @@ -1147,16 +1147,16 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
        1061  QPoint(10,10)
        1062  };
        1063  std::vector<Triangle> tria = IntelliTriangulation::calculateTriangles(points);
        -
        1064  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[0]), true);
        -
        1065  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[1]), true);
        -
        1066  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[2]), true);
        -
        1067  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[3]), true);
        +
        1064  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[0]), true);
        +
        1065  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[1]), true);
        +
        1066  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[2]), true);
        +
        1067  QCOMPARE(IntelliTriangulation::isInPolygon(tria, points[3]), true);
        1068 
        -
        1069  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[4]), true);
        -
        1070  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[0]), false);
        -
        1071  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[1]), false);
        -
        1072  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[2]), false);
        -
        1073  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false);
        +
        1069  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[4]), true);
        +
        1070  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[0]), false);
        +
        1071  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[1]), false);
        +
        1072  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[2]), false);
        +
        1073  QCOMPARE(IntelliTriangulation::isInPolygon(tria, test[3]), false);
        1074 }
        1075 
        1076 
        @@ -1770,7 +1770,7 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
        1685  point.setX(i);
        1686  for(int j=0; j<200; j++) {
        1687  point.setY(j);
        -
        1688  IntelliTriangulation::isInPolygon(tria, point);
        +
        1688  IntelliTriangulation::isInPolygon(tria, point);
        1689  }
        1690  }
        1691  }
        @@ -1783,12 +1783,12 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
      • void createCircleTool()
        -
        virtual void onMouseRightPressed(int x, int y)
        A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
        Definition: IntelliTool.cpp:15
        -
        virtual void onMouseLeftReleased(int x, int y)
        A function managing the left click Released of a Mouse. Call this in child classes!
        Definition: IntelliTool.cpp:33
        +
        virtual void onMouseRightPressed(int x, int y)
        A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on....
        Definition: IntelliTool.cpp:18
        +
        virtual void onMouseLeftReleased(int x, int y)
        A function managing the left click Released of a Mouse. Call this in child classes!
        Definition: IntelliTool.cpp:36
        void createRectangleTool()
        -
        virtual void onMouseLeftPressed(int x, int y)
        A function managing the left click Pressed of a Mouse. Resetting the current draw....
        Definition: IntelliTool.cpp:26
        +
        virtual void onMouseLeftPressed(int x, int y)
        A function managing the left click Pressed of a Mouse. Resetting the current draw....
        Definition: IntelliTool.cpp:29
        @@ -1814,14 +1814,13 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
        void createLineTool()
        The IntelliToolPen class represents a tool to draw a line.
        -
        virtual void onMouseRightReleased(int x, int y)
        A function managing the right click Released of a Mouse. Merging the Canvas to Active....
        Definition: IntelliTool.cpp:22
        +
        virtual void onMouseRightReleased(int x, int y)
        A function managing the right click Released of a Mouse. Merging the Canvas to Active....
        Definition: IntelliTool.cpp:25
        void setFirstColor(QColor Color)
        A function to set the primary color.
        void createPolygonTool()
        -
        bool isInPolygon(std::vector< Triangle > &triangles, QPoint &point)
        A function to check if a point lies in a polygon by checking its spanning triangles.
        void moveActiveLayer(int idx)
        The moveActiveLayer moves the active layer to a specific position in the layer stack.
        IntelliColorPicker colorPicker
        Definition: PaintingArea.h:202
        @@ -1832,9 +1831,10 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
        The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
        The IntelliToolCircle class represents a tool to draw a circle.
        -
        virtual void onMouseMoved(int x, int y)
        A function managing the mouse moved event. Call this in child classes!
        Definition: IntelliTool.cpp:43
        +
        virtual void onMouseMoved(int x, int y)
        A function managing the mouse moved event. Call this in child classes!
        Definition: IntelliTool.cpp:46
        The IntelliToolPolygon managed the Drawing of Polygonforms.
        std::vector< QPoint > polygonData
        The Vertices of The Polygon. Needs to be a planar Polygon.
        +
        bool isInPolygon(const std::vector< Triangle > &triangles, QPoint &point)
        A function to check if a point lies in a polygon by checking its spanning triangles.
        int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, IntelliImage::ImageType type=IntelliImage::ImageType::RASTERIMAGE)
        The addLayer adds a layer to the current project/ painting area.
        diff --git a/src/IntelliHelper/IntelliColorPicker.cpp b/src/IntelliHelper/IntelliColorPicker.cpp index 104039b..8855710 100644 --- a/src/IntelliHelper/IntelliColorPicker.cpp +++ b/src/IntelliHelper/IntelliColorPicker.cpp @@ -1,8 +1,8 @@ #include "IntelliColorPicker.h" IntelliColorPicker::IntelliColorPicker(){ - firstColor = {255,0,0,255}; - secondColor = {0,255,255,255}; + firstColor = QColor(255,0,0,255); + secondColor = QColor(0,255,255,255); } IntelliColorPicker::~IntelliColorPicker(){ diff --git a/src/IntelliHelper/IntelliTriangulation.cpp b/src/IntelliHelper/IntelliTriangulation.cpp index c1222b7..2c0d56c 100644 --- a/src/IntelliHelper/IntelliTriangulation.cpp +++ b/src/IntelliHelper/IntelliTriangulation.cpp @@ -113,7 +113,7 @@ std::vector IntelliTriangulation::calculateTriangles(std::vector &triangles, QPoint &point){ +bool IntelliTriangulation::isInPolygon(const std::vector &triangles, QPoint &point){ for(auto triangle : triangles) { if(IntelliTriangulation::isInTriangle(triangle, point)) { return true; diff --git a/src/IntelliHelper/IntelliTriangulation.h b/src/IntelliHelper/IntelliTriangulation.h index 716915c..39b6b3e 100644 --- a/src/IntelliHelper/IntelliTriangulation.h +++ b/src/IntelliHelper/IntelliTriangulation.h @@ -60,7 +60,7 @@ std::vector calculateTriangles(std::vector polyPoints); * \param point - The point to checl, if it lies in the polygon. * \return Returns true if the point lies in the üpolygon, otherwise false. */ -bool isInPolygon(std::vector &triangles, QPoint &point); +bool isInPolygon(const std::vector &triangles, QPoint &point); } #endif diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index f39aa75..3dfb526 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -330,28 +330,17 @@ void PaintingArea::paintEvent(QPaintEvent*event){ update(); } -//TODOJ Resize the image to slightly larger then the main window -// to cut down on the need to resize the image -void PaintingArea::resizeEvent(QResizeEvent*event){ - //TODO wait till tool works - update(); -} - -void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){ - //TODO implement -} - void PaintingArea::selectLayerUp(){ updateTools(); - if(activeLayer!=-1 && static_cast(activeLayer)(activeLayer)], layerBundle[static_cast(activeLayer + 1)]); + if(activeLayer != -1 && static_cast(activeLayer)(activeLayer)], layerBundle[static_cast(activeLayer + 1)]); activeLayer++; } } void PaintingArea::selectLayerDown(){ updateTools(); - if(activeLayer!=-1 && activeLayer>0) { + if(activeLayer>0) { std::swap(layerBundle[static_cast(activeLayer)], layerBundle[static_cast(activeLayer - 1)]); activeLayer--; } diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 7f3c12c..3b04198 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -221,8 +221,6 @@ void wheelEvent(QWheelEvent*event) override; void paintEvent(QPaintEvent*event) override; -void resizeEvent(QResizeEvent*event) override; - private: void setLayerDimensions(int maxWidth, int maxHeight); void selectLayerUp(); @@ -244,8 +242,6 @@ int activeLayer = -1; void drawLayers(bool forSaving = false); -void resizeLayer(QImage*image_res, const QSize &newSize); - bool createTempTopLayer(int idx); void updateTools(); diff --git a/src/Tool/IntelliTool.cpp b/src/Tool/IntelliTool.cpp index bfb7553..592bb2a 100644 --- a/src/Tool/IntelliTool.cpp +++ b/src/Tool/IntelliTool.cpp @@ -6,6 +6,9 @@ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, In this->colorPicker = colorPicker; this->Toolsettings = Toolsettings; this->isDrawing = false; + this->ActiveType = Tooltype::NONE; + this->activeLayer = nullptr; + this->Canvas = nullptr; } IntelliTool::~IntelliTool(){ @@ -14,7 +17,7 @@ IntelliTool::~IntelliTool(){ void IntelliTool::onMouseRightPressed(int x, int y){ if(isDrawing) { - isDrawing = false; + isDrawing = false; this->deleteToolLayer(); } } diff --git a/src/Tool/IntelliTool.h b/src/Tool/IntelliTool.h index 213ec1f..a3b2959 100644 --- a/src/Tool/IntelliTool.h +++ b/src/Tool/IntelliTool.h @@ -24,7 +24,8 @@ enum class Tooltype { PEN, PLAIN, POLYGON, - RECTANGLE + RECTANGLE, + NONE }; private: /*! From abe63d386202950bb5ced93e94207d20fe19c653 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 16 Jan 2020 14:21:16 +0100 Subject: [PATCH 80/97] fixed every known warning from cppcheck done. --- src/IntelliHelper/IntelliColorPicker.cpp | 8 ++++-- src/IntelliHelper/IntelliColorPicker.h | 5 ++++ src/Tool/IntelliToolCircle.cpp | 34 ++++++++++++------------ 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/IntelliHelper/IntelliColorPicker.cpp b/src/IntelliHelper/IntelliColorPicker.cpp index 8855710..9d79722 100644 --- a/src/IntelliHelper/IntelliColorPicker.cpp +++ b/src/IntelliHelper/IntelliColorPicker.cpp @@ -1,8 +1,7 @@ #include "IntelliColorPicker.h" IntelliColorPicker::IntelliColorPicker(){ - firstColor = QColor(255,0,0,255); - secondColor = QColor(0,255,255,255); + initializeColors(); } IntelliColorPicker::~IntelliColorPicker(){ @@ -28,3 +27,8 @@ void IntelliColorPicker::setFirstColor(QColor Color){ void IntelliColorPicker::setSecondColor(QColor Color){ this->secondColor = Color; } + +void IntelliColorPicker::initializeColors(){ + this->firstColor = QColor(255,0,0,255); + this->secondColor = QColor(0,0,0,255); +} diff --git a/src/IntelliHelper/IntelliColorPicker.h b/src/IntelliHelper/IntelliColorPicker.h index e703eb6..1efc591 100644 --- a/src/IntelliHelper/IntelliColorPicker.h +++ b/src/IntelliHelper/IntelliColorPicker.h @@ -63,6 +63,11 @@ QColor firstColor; * \brief The secondary color. */ QColor secondColor; + +/*! + * \brief initializeColors initializes the first and second color. + */ +void initializeColors(); }; #endif diff --git a/src/Tool/IntelliToolCircle.cpp b/src/Tool/IntelliToolCircle.cpp index 644c6ea..5bf2ef9 100644 --- a/src/Tool/IntelliToolCircle.cpp +++ b/src/Tool/IntelliToolCircle.cpp @@ -15,30 +15,30 @@ IntelliToolCircle::~IntelliToolCircle(){ 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; + int yMinimum, yMaximum, xMinimum, xMaximum; + yMinimum = centerPoint.y() - radius; + yMaximum = centerPoint.y() + radius; // x = x0+-sqrt(r2-(y-y0)2) - for(int i = yMin; i<=yMax; i++) { - xMin = static_cast(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); - xMax = static_cast(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); - this->Canvas->image->drawLine(QPoint(xMin,i), QPoint(xMax,i),inner,1); + for(int i = yMinimum; i<=yMaximum; i++) { + xMinimum = static_cast(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); + xMaximum = static_cast(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); + this->Canvas->image->drawLine(QPoint(xMinimum,i), QPoint(xMaximum,i),inner,1); } //TODO implement circle drawing algorithm bresenham radius = static_cast(radius + (Toolsettings->getLineWidth() / 2.)); - yMin = (centerPoint.y() - radius); - yMax = (centerPoint.y() + radius); - for(int i = yMin; i<=yMax; i++) { - xMin = static_cast(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); - xMax = static_cast(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()); + yMinimum = (centerPoint.y() - radius); + yMaximum = (centerPoint.y() + radius); + for(int i = yMinimum; i<=yMaximum; i++) { + xMinimum = static_cast(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); + xMaximum = static_cast(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2))); + this->Canvas->image->drawPoint(QPoint(xMinimum,i), colorPicker->getFirstColor(),Toolsettings->getLineWidth()); + this->Canvas->image->drawPoint(QPoint(xMaximum,i), colorPicker->getFirstColor(),Toolsettings->getLineWidth()); } - xMin = (centerPoint.x() - radius); - xMax = (centerPoint.x() + radius); - for(int i = xMin; i<=xMax; i++) { + xMinimum = (centerPoint.x() - radius); + xMaximum = (centerPoint.x() + radius); + for(int i = xMinimum; i<=xMaximum; i++) { int yMin = static_cast(centerPoint.y() - sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); int yMax = static_cast(centerPoint.y() + sqrt(pow(radius,2) - pow(i - centerPoint.x(),2))); this->Canvas->image->drawPoint(QPoint(i, yMin), colorPicker->getFirstColor(),Toolsettings->getLineWidth()); From 6006fad5d8f382ad2082bdfe10370fe424532858 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 14:51:23 +0100 Subject: [PATCH 81/97] Updated line tool icon --- docs/Icons/line-tool.svg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Icons/line-tool.svg b/docs/Icons/line-tool.svg index e26bb7b..6ff03e8 100644 --- a/docs/Icons/line-tool.svg +++ b/docs/Icons/line-tool.svg @@ -56,11 +56,11 @@ showgrid="false" units="px" showguides="false" - inkscape:window-width="716" - inkscape:window-height="405" - inkscape:window-x="969" - inkscape:window-y="326" - inkscape:window-maximized="0" /> + inkscape:window-width="1920" + inkscape:window-height="1017" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> From 2f0c00def248c49129c28ed8fbcdfec7d409e9c0 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 14:52:04 +0100 Subject: [PATCH 82/97] Add uses cases to documentation --- docs/Use Case/Use_Case_1.uxf | 405 +++++++++++++++++++++++++++++++++++ docs/Use Case/Use_Case_2.uxf | 192 +++++++++++++++++ 2 files changed, 597 insertions(+) create mode 100644 docs/Use Case/Use_Case_1.uxf create mode 100644 docs/Use Case/Use_Case_2.uxf diff --git a/docs/Use Case/Use_Case_1.uxf b/docs/Use Case/Use_Case_1.uxf new file mode 100644 index 0000000..251c8b9 --- /dev/null +++ b/docs/Use Case/Use_Case_1.uxf @@ -0,0 +1,405 @@ + + + 17 + + UMLActor + + 17 + 459 + 170 + 187 + + 3D-Künstler +bg=green + + + + UMLActor + + 68 + 714 + 136 + 187 + + Einsteiger +bg=red + + + + UMLUseCase + + 646 + 391 + 204 + 119 + + Zusammenfügen +von Bildern +bg=red + + + + UMLUseCase + + 646 + 527 + 204 + 119 + + Ƅndern der +Bilderauflƶsung +bg=red + + + + UMLUseCase + + 646 + 663 + 204 + 119 + + Drehen von +Bildern +bg=red + + + + UMLUseCase + + 646 + 969 + 204 + 119 + + Retuschieren +der Bilder +bg=magenta + + + + UMLActor + + 51 + 1037 + 170 + 187 + + Casual User +bg=red + + + + Relation + + 119 + 442 + 561 + 306 + + + 310.0;10.0;10.0;160.0 + + + Relation + + 119 + 561 + 561 + 187 + + + 310.0;10.0;10.0;90.0 + + + Relation + + 119 + 680 + 561 + 68 + + + 310.0;20.0;10.0;20.0 + + + Relation + + 119 + 442 + 561 + 629 + + + 310.0;10.0;10.0;350.0 + + + Relation + + 119 + 561 + 561 + 510 + + + 310.0;10.0;10.0;280.0 + + + Relation + + 119 + 697 + 561 + 374 + + + 310.0;10.0;10.0;200.0 + + + Relation + + 119 + 986 + 561 + 85 + + + 310.0;20.0;10.0;30.0 + + + Relation + + 136 + 1003 + 544 + 408 + + + 300.0;10.0;10.0;220.0 + + + UMLUseCase + + 646 + 1394 + 204 + 119 + + Korrektur- +werkzeuge +bg=blue + + + + UMLNote + + 629 + 1547 + 238 + 119 + + Helligkeit/Kontrast +Farbton/SƤttigung +Gradationskurven +bg=blue + + + + Relation + + 136 + 1360 + 544 + 119 + + + 300.0;50.0;10.0;10.0 + + + Relation + + 731 + 1496 + 51 + 85 + + + 10.0;10.0;10.0;30.0 + + + UMLUseCase + + 646 + 1122 + 204 + 119 + + Pinsel +bg=blue + + + + UMLUseCase + + 646 + 1258 + 204 + 119 + + Auswahl- +werkzeuge +bg=blue + + + + Relation + + 136 + 1292 + 544 + 119 + + + 300.0;10.0;10.0;50.0 + + + Relation + + 136 + 1156 + 544 + 255 + + + 300.0;10.0;10.0;130.0 + + + UMLActor + + 0 + 1377 + 306 + 187 + + Freiberufliche Fotografen +bg=blue + + + + UMLUseCase + + 646 + 816 + 204 + 119 + + Layerstruktur +bg=dark_gray + + + + Relation + + 85 + 272 + 595 + 221 + + + 330.0;10.0;10.0;110.0 + + + UMLUseCase + + 646 + 238 + 204 + 119 + + Schnittstelle +für 3D-Modelle +bg=green + + + + Relation + + 85 + 136 + 595 + 357 + + + 330.0;10.0;10.0;190.0 + + + UMLUseCase + + 646 + 102 + 204 + 119 + + Erzeugen von +3D-Objekten +bg=green + + + + Relation + + 136 + 867 + 544 + 544 + + + 300.0;10.0;10.0;300.0 + + + Relation + + 119 + 867 + 561 + 204 + + + 310.0;10.0;10.0;100.0 + + + Relation + + 119 + 697 + 561 + 221 + + + 310.0;110.0;10.0;10.0 + + + Relation + + 85 + 442 + 595 + 476 + + + 330.0;260.0;10.0;10.0 + + + UMLClass + + 527 + 0 + 459 + 1836 + + lw=2 +IntelliPhoto Benchmark 1.0 +bg=gray + + + diff --git a/docs/Use Case/Use_Case_2.uxf b/docs/Use Case/Use_Case_2.uxf new file mode 100644 index 0000000..6d075d7 --- /dev/null +++ b/docs/Use Case/Use_Case_2.uxf @@ -0,0 +1,192 @@ + + + 16 + + UMLActor + + 528 + 80 + 160 + 176 + + 3D-Künstler +bg=green + + + + UMLActor + + 544 + 272 + 128 + 176 + + Einsteiger +bg=red + + + + UMLUseCase + + 928 + 320 + 288 + 128 + + Hervorrheben bestimmter +Bildbereiche +bg=red + + + + UMLUseCase + + 880 + 624 + 352 + 96 + + Erstellung komplexer Diagramme +bg=blue + + + + UMLUseCase + + 928 + 480 + 304 + 112 + + Erstellung einfacher Motive +bg=red + + + + UMLActor + + 544 + 448 + 160 + 176 + + Casual User +bg=red + + + + Relation + + 592 + 256 + 368 + 160 + + + 210.0;80.0;10.0;10.0 + + + Relation + + 608 + 432 + 352 + 128 + + + 200.0;60.0;10.0;10.0 + + + Relation + + 608 + 400 + 368 + 288 + + + 210.0;10.0;10.0;160.0 + + + UMLActor + + 480 + 656 + 288 + 176 + + Freiberufliche Fotografen +bg=blue + + + + Relation + + 592 + 64 + 384 + 320 + + + 220.0;180.0;10.0;10.0 + + + Relation + + 592 + 64 + 352 + 176 + + + 200.0;90.0;10.0;10.0 + + + UMLUseCase + + 912 + 160 + 304 + 128 + + Anfertigen von +ortographischen Skizzen +bg=green + + + + UMLClass + + 848 + 80 + 432 + 704 + + lw=2 +CircleTool +bg=gray + + + + Relation + + 608 + 624 + 304 + 80 + + + 170.0;30.0;10.0;20.0 + + + Relation + + 608 + 432 + 320 + 256 + + + 180.0;140.0;10.0;10.0 + + From 1412f44b8e11dae41e828c3346662a41718104c3 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 15:06:40 +0100 Subject: [PATCH 83/97] Add plain tool icon --- docs/Icons/plain-tool.svg | 125 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 docs/Icons/plain-tool.svg diff --git a/docs/Icons/plain-tool.svg b/docs/Icons/plain-tool.svg new file mode 100644 index 0000000..6dee885 --- /dev/null +++ b/docs/Icons/plain-tool.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + From fa53f6f00864686535b8726f387b779ba09eceed Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 15:07:52 +0100 Subject: [PATCH 84/97] Document reference system --- docs/referenzsystem.docx | Bin 0 -> 12192 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/referenzsystem.docx diff --git a/docs/referenzsystem.docx b/docs/referenzsystem.docx new file mode 100644 index 0000000000000000000000000000000000000000..2b9dd9af8b62ea06e30c2a0572ea7f3a26cf8b63 GIT binary patch literal 12192 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 literal 0 HcmV?d00001 From 67d4a50074ecfbe1fb044dc83f8b433a5e3b62b1 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 15:08:55 +0100 Subject: [PATCH 85/97] Update todo files --- docs/ToDo/todo.html | 633 -------------------------------------------- docs/ToDo/todo.org | 84 ++++-- docs/ToDo/todo.pdf | Bin 136207 -> 153725 bytes 3 files changed, 57 insertions(+), 660 deletions(-) delete mode 100644 docs/ToDo/todo.html diff --git a/docs/ToDo/todo.html b/docs/ToDo/todo.html deleted file mode 100644 index 9ff0d54..0000000 --- a/docs/ToDo/todo.html +++ /dev/null @@ -1,633 +0,0 @@ - - - - - - - -Todo-Liste für Intelliphoto - - - - - - - - - - - - -
        -

        Todo-Liste für Intelliphoto

        -
        -

        1 TODO Dokumentation [2/8]

        -
        -
        -
        -

        1.1 TODO CRC-Karten

        -
        -
          -
        • 8/10 CRC-Karten sind fertig.
        • -
        • 2 CRC-Karten werden noch benƶtigt. [ZustƤndig: Paul]
        • -
        -
        -
        -
        -

        1.2 DONE UML-Diagramm

        -
        -
        -
        -
        -

        1.3 TODO User-Manual

        -
        -
          -
        • Usermanual für Version 0.31 liegt vor.
        • -
        • Nach Userinterfaceupdate: Usermanual muss aktualisiert werden.
        • -
        -
        -
        -
        -

        1.4 TODO Use-Case-Diagramme

        -
        -
          -
        • 1/2 Use-Case-Diagramme sind vorhanden.
        • -
        • 1 Use-Case-Diagramm wird noch benƶtigt.
        • -
        • 1 Use-Case-Diagramm muss evtl. aktualisiert werden.
        • -
        -
        -
        -
        -

        1.5 TODO Sequenzdiagramme

        -
        -
          -
        • 1/2 Sequenzdiagramme sind vorhanden.
        • -
        • 1 Sequenzdiagramm wird noch benƶtigt. [ZustƤndig: Seb]
        • -
        • 1 Sequenzdiagramm muss aktualisiert werden. [ZustƤndig: Seb]
        • -
        -
        -
        -
        -

        1.6 TODO Zustandsdiagramme

        -
        -
          -
        • 1/2 Zustandsdiagramme sind vorhanden.
        • -
        • 1 Sequenzdiagramm wird noch benƶtigt. [ZustƤndig: Seb]
        • -
        • 1 Sequenzdiagramm muss aktualisiert werden. [ZustƤndig: Seb]
        • -
        -
        -
        -
        -

        1.7 DONE Selbstgenierende Dokumentation

        -
        -
        -
        -
        -

        1.8 TODO Volere Snow Cards [0/2]

        -
        -
        -
        -

        1.8.1 Nicht-funktionale Anforderungen

        -
        -
          -
        • 1/2 Volere Snow Cards sind vorhanden.
        • -
        • 1 Volere Snow Card wird noch benƶtigt. [ZustƤndig: Paul]
        • -
        • 1 Volere Snow Card muss evtl. aktualisiert werden. [ZustƤndig: Paul]
        • -
        -
        -
        -
        -

        1.8.2 Funktionale Anforderungen

        -
        -
          -
        • 1/2 Volere Snow Cards sind vorhanden.
        • -
        • 1 Volere Snow Card wird noch benƶtigt. [ZustƤndig: Paul]
        • -
        • 1 Volere Snow Card muss evtl. aktualisiert werden. [ZustƤndig: Paul]
        • -
        -
        -
        -
        -
        -

        1.9 TODO Referenzmaschine(n) bestimmen und Specs dokumentieren

        -
        -
        -
        -

        2 TODO Allgemeine Features [0/1]

        -
        -
        -
        -

        2.1 TODO Das Polygon fürs ShapedImage setzbar machen

        -
        -
        -
        -

        3 TODO User Interface [0/4]

        -
        -
        -
        -

        3.1 TODO Icons für alle Tools

        -
        -
        -

        3.2 TODO Interfacegrundstruktur erstellen

        -
        -
        -

        3.3 TODO Verknüpfung der Tools im Code mit den Buttons

        -
        -
        -

        3.4 TODO Eigenschaften der Tools im Fenster statt im Popup einstellbar machen

        -
        -
        -
        -

        4 TODO Refactoring [2/2]

        -
        -
        -
        -

        4.1 DONE Alle ƶffentlichen Klassen durchkommentieren

        -
        -
        -
        -
        -

        4.2 DONE Toolklassenstruktur verbessern

        -
        -
        -
        -
        -
        -

        5 TODO Tools [0/8]

        -
        -
        -
        -

        5.1 TODO PenTool [2/5]

        -
        -
        -
        -

        5.1.1 DONE Icon

        -
        -
        -
        -
        -

        5.1.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.1.3 TODO Implementierung in Interface

        -
        -
        -

        5.1.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.1.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.2 TODO EraserTool [2/5]

        -
        -
        -
        -

        5.2.1 DONE Icon

        -
        -
        -
        -
        -

        5.2.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.2.3 TODO Implementierung in Interface

        -
        -
        -

        5.2.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.2.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.3 TODO FloodFillTool [2/5]

        -
        -
        -
        -

        5.3.1 DONE Icon

        -
        -
        -
        -
        -

        5.3.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.3.3 TODO Implementierung in Interface

        -
        -
        -

        5.3.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.3.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.4 TODO PolygonTool [2/5]

        -
        -
        -
        -

        5.4.1 DONE Icon

        -
        -
        -
        -
        -

        5.4.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.4.3 TODO Implementierung in Interface

        -
        -
        -

        5.4.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.4.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.5 TODO CircleTool [2/5]

        -
        -
        -
        -

        5.5.1 DONE Icon

        -
        -
        -
        -
        -

        5.5.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.5.3 TODO Implementierung in Interface

        -
        -
        -

        5.5.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.5.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.6 TODO RectangleTool [2/5]

        -
        -
        -
        -

        5.6.1 DONE Icon

        -
        -
        -
        -
        -

        5.6.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.6.3 TODO Implementierung in Interface

        -
        -
        -

        5.6.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.6.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.7 TODO PlainTool [2/5]

        -
        -
        -
        -

        5.7.1 DONE Icon

        -
        -
        -
        -
        -

        5.7.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.7.3 TODO Implementierung in Interface

        -
        -
        -

        5.7.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.7.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -

        5.8 TODO LineTool [1/5]

        -
        -
        -
        -

        5.8.1 TODO Icon

        -
        -
        -

        5.8.2 DONE FunktionalitƤt

        -
        -
        -
        -
        -

        5.8.3 TODO Implementierung in Interface

        -
        -
        -

        5.8.4 TODO Zeitbestimmung auf Referenzmaschine

        -
        -
        -

        5.8.5 TODO Unittests

        -
        -
          -
        • [ZustƤndig: Mucke]
        • -
        -
        -
        -
        -
        -
        -

        6 TODO Extras [0/1]

        -
        -
        -
        -

        6.1 TODO 3D-Modelle laden und anzeigen / Tools implementieren

        -
        -
        -
        -
        -

        Author: Paul Norberger

        -

        Created: 2020-01-08 Mi 22:22

        -

        Validate

        -
        - - diff --git a/docs/ToDo/todo.org b/docs/ToDo/todo.org index 28278e7..57fafb7 100644 --- a/docs/ToDo/todo.org +++ b/docs/ToDo/todo.org @@ -1,13 +1,13 @@ #+TITLE: Todo-Liste für Intelliphoto #+AUTHOR: Paul Norberger #+SETUPFILE: https://fniessen.github.io/org-html-themes/setup/theme-readtheorg.setup -#+OPTIONS: toc:nil -* TODO Dokumentation [2/8] +#+COPTIONS: toc:nil +* TODO Dokumentation [4/9] ** TODO CRC-Karten - 8/10 CRC-Karten sind fertig. - 2 CRC-Karten werden noch benötigt. [Zuständig: Paul] -** DONE UML-Diagramm - CLOSED: [2020-01-08 Mi 21:50] +** TODO UML-Diagramm +- 1 UML-Diagramm muss geupdatet werden. ** TODO User-Manual - Usermanual für Version 0.31 liegt vor. - Nach Userinterfaceupdate: Usermanual muss aktualisiert werden. @@ -15,45 +15,73 @@ - 1/2 Use-Case-Diagramme sind vorhanden. - 1 Use-Case-Diagramm wird noch benötigt. - 1 Use-Case-Diagramm muss evtl. aktualisiert werden. -** TODO Sequenzdiagramme -- 1/2 Sequenzdiagramme sind vorhanden. -- 1 Sequenzdiagramm wird noch benötigt. [Zuständig: Seb] -- 1 Sequenzdiagramm muss aktualisiert werden. [Zuständig: Seb] -** TODO Zustandsdiagramme -- 1/2 Zustandsdiagramme sind vorhanden. -- 1 Sequenzdiagramm wird noch benötigt. [Zuständig: Seb] -- 1 Sequenzdiagramm muss aktualisiert werden. [Zuständig: Seb] +** DONE Sequenzdiagramme + CLOSED: [2020-01-13 Mo 19:22] +- 2/2 Sequenzdiagramme sind vorhanden. +** DONE Zustandsdiagramme + CLOSED: [2020-01-13 Mo 19:22] +- 2/2 Zustandsdiagramme sind vorhanden. ** DONE Selbstgenierende Dokumentation CLOSED: [2020-01-08 Mi 21:57] ** TODO Volere Snow Cards [0/2] -*** Nicht-funktionale Anforderungen +*** TODO Nicht-funktionale Anforderungen - 1/2 Volere Snow Cards sind vorhanden. - 1 Volere Snow Card wird noch benötigt. [Zuständig: Paul] - 1 Volere Snow Card muss evtl. aktualisiert werden. [Zuständig: Paul] -*** Funktionale Anforderungen +*** TODO Funktionale Anforderungen - 1/2 Volere Snow Cards sind vorhanden. - 1 Volere Snow Card wird noch benötigt. [Zuständig: Paul] - 1 Volere Snow Card muss evtl. aktualisiert werden. [Zuständig: Paul] ** TODO Referenzmaschine(n) bestimmen und Specs dokumentieren -* TODO Allgemeine Features [0/1] -** TODO Das Polygon fürs ShapedImage setzbar machen -* TODO User Interface [0/4] -** TODO Icons für alle Tools -** TODO Interfacegrundstruktur erstellen -** TODO Verknüpfung der Tools im Code mit den Buttons -** TODO Eigenschaften der Tools im Fenster statt im Popup einstellbar machen +- Specs von Muckes Standrechner +- Müssen noch an Zuständigen geschickt werden. [Zuständig: Mucke, Paul] +* TODO User Interface [4/9] +** DONE Icons für alle Tools + CLOSED: [2020-01-13 Mo 19:28] +** DONE Interfacegrundstruktur erstellen + CLOSED: [2020-01-13 Mo 19:28] +** DONE Verknüpfung der Tools im Code mit den Buttons + CLOSED: [2020-01-13 Mo 19:28] +** DONE Eigenschaften der Tools im Fenster statt im Popup einstellbar machen + CLOSED: [2020-01-13 Mo 19:29] +** TODO Input Dialog +- [Zuständig: Basti] +** TODO Create Canvas +- [Zuständig: Seb] +** TODO Change Canvas Size +- [Zuständig: Seb] +** TODO ShapedImage kreieren +- [Zuständig: Jan] +** TODO Polygon setzen +- [Zuständig: Jan] * TODO Refactoring [2/2] ** DONE Alle öffentlichen Klassen durchkommentieren CLOSED: [2020-01-08 Mi 21:47] ** DONE Toolklassenstruktur verbessern CLOSED: [2020-01-08 Mi 21:58] +** TODO Leere geerbte Funktionen in den Tools entfernen +** TODO Variablen beschreiben +** TODO Dokumentieren Header +- [Zuständig: Conrad] +** TODO Toter Code Bereinigung / LineTool.dotted entfernen +- [Zuständig: Conrad] +** TODO In *.cpp auslagern +- [Zuständig: Jan, Conrad, Mucke, Seb] +** TODO Variablennamen verbessern und ggf. kommentieren +- [Zuständig: Conrad, Seb] +* TODO Testing +** TODO Tests +- [Zuständig: Mucke] +** TODO Benchmarking +- [Zuständig: Mucke] * TODO Tools [0/8] -** TODO PenTool [2/5] +** TODO PenTool [3/5] *** DONE Icon CLOSED: [2020-01-08 Mi 19:54] *** DONE Funktionalität CLOSED: [2020-01-08 Mi 19:54] -*** TODO Implementierung in Interface +*** DONE Implementierung in Interface + CLOSED: [2020-01-13 Mo 19:33] *** TODO Zeitbestimmung auf Referenzmaschine *** TODO Unittests - [Zuständig: Mucke] @@ -85,8 +113,8 @@ *** TODO Unittests - [Zuständig: Mucke] ** TODO CircleTool [2/5] -*** DONE Icon - CLOSED: [2020-01-08 Mi 19:54] +*** TODO Icon +- Icon Update: Nur 1 roter Punkt im Icon, weil nur 1 Punkt per Klick bestimmt wird *** DONE Funktionalität CLOSED: [2020-01-08 Mi 19:54] *** TODO Implementierung in Interface @@ -113,11 +141,13 @@ - [Zuständig: Mucke] ** TODO LineTool [1/5] *** TODO Icon +- Icon Update: Nur 1 roter Punkt im Icon, weil nur 1 Punkt per Klick bestimmt wird *** DONE Funktionalität CLOSED: [2020-01-08 Mi 19:54] *** TODO Implementierung in Interface *** TODO Zeitbestimmung auf Referenzmaschine *** TODO Unittests - [Zuständig: Mucke] -* TODO Extras [0/1] -** TODO 3D-Modelle laden und anzeigen / Tools implementieren +* TODO Abschlusspräsentation +** Eröffnungsvideo erstellen +- [Zuständig: Jan] diff --git a/docs/ToDo/todo.pdf b/docs/ToDo/todo.pdf index cb9001f12c129c560cf5f4fb4d115610a20bd56f..c88c0cb71962669078ec2f63e16bd120afd5fd2f 100644 GIT binary patch delta 129659 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 Y^>hZBBeJq{vhZ*rQc=N(D@q{#Hy<~0D*ylh From 44c06d65fcbfe7759389e58f44eb5d7808f29412 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 15:10:25 +0100 Subject: [PATCH 86/97] Finalize CRC cards --- docs/CRC-Karten/CRC-Karten.docx | Bin 16055 -> 16437 bytes docs/CRC-Karten/CRC-Karten.pdf | Bin 103195 -> 107932 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/CRC-Karten/CRC-Karten.docx b/docs/CRC-Karten/CRC-Karten.docx index ae0db5cba7caa9733a092c70a32c3db6dfd7f16c..534f84806e6c0a8a2cab584089d38711f7b5a628 100644 GIT binary patch delta 6044 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 W00000000X*laD?k1|B^C00008>^vI) delta 5668 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 diff --git a/docs/CRC-Karten/CRC-Karten.pdf b/docs/CRC-Karten/CRC-Karten.pdf index 8cd4e0f7f927111d343acf7e147028a1eb5b875b..1fdc0578b6a137954e927bed6705f2216da026c1 100644 GIT binary patch delta 89465 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 NxI+Iz5QqCo@V|2HF|Yst delta 85164 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%0A~H-X;!4f%q0M&o(_##j!vBcS@qJz7FK6YNO8k+% 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

        E$eBjC-!6rIO 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 From 58f679a0b654244506f60691261a6c1564ca940f Mon Sep 17 00:00:00 2001 From: Mienek Date: Thu, 16 Jan 2020 16:35:30 +0100 Subject: [PATCH 87/97] added Dimension added the change and get dimesions stuff --- src/GUI/IntelliPhotoGui.cpp | 53 ++++++++++++++++++++++++++++++++----- src/GUI/IntelliPhotoGui.h | 7 +++++ 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index bff0255..edb9c42 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -14,7 +14,7 @@ IntelliPhotoGui::IntelliPhotoGui(){ // set style of the gui setIntelliStyle(); // Size the app - resize(600,600); + resize(600,600); //showMaximized(); setDefaultToolValue(); } @@ -103,6 +103,25 @@ void IntelliPhotoGui::slotCreateNewShapedLayer(){ } } +// Opens a dialog that allows the user to change Dimension +void IntelliPhotoGui::slotChangeDim(){ + // Stores button value + bool ok1, ok2; + + // "change Dimension" is the title of the window + // the next tr is the text to display + // Define the standard Value, min, step and ok button + int width = IntelliInputDialog::getInt("New Layer", "Width:", 600, 1, 50000 , 1, &ok1); + + int height = IntelliInputDialog::getInt("New Layer", "Height:", 600, 1, 50000, 1, &ok2); + + // Change dimension + if (ok1&&ok2) { + paintingArea->setLayerDimensions(height,width); + UpdateGui(); + } +} + // Opens a dialog that allows the user to delete a Layer void IntelliPhotoGui::slotDeleteLayer(){ @@ -264,6 +283,15 @@ void IntelliPhotoGui::slotAboutDialog(){ tr("

        IntelliPhoto - A Pretty basic editor.


        Developed by Team 7.")); } +// Open an dialog about the dimensions +void IntelliPhotoGui::slotGetDim(){ + + // Window dimesnion display + QMessageBox::about(this, tr("Dimension"), + tr("Width: %1\nHeight: %2").arg(paintingArea->getMaxWidth()).arg(paintingArea->getMaxHeight())); +} + + void IntelliPhotoGui::slotEnterPressed(){ QString string = EditLineWidth->text(); if(string.toInt() > 50) { @@ -298,7 +326,7 @@ void IntelliPhotoGui::slotSetWidth(){ void IntelliPhotoGui::slotSetInnerAlpha(){ bool ok1; - int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1); + int temp = IntelliInputDialog::getInt("Toolsettings", "Alpha:", 5, 1, 50, 1, &ok1); if(ok1) { paintingArea->Toolsettings.setInnerAlpha(temp); EditLineInnerAlpha->setText(QString("%1").arg(temp)); @@ -359,6 +387,14 @@ void IntelliPhotoGui::createActions(){ actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer())); + actionChangeDim = new QAction(tr("&Change Dimension"), this); + actionChangeDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_X)); + connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim())); + + actionGetDim = new QAction(tr("&Get Dimension"), this); + actionGetDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Y)); + connect(actionGetDim, SIGNAL(triggered()), this, SLOT(slotGetDim())); + actionSetActiveLayer = new QAction(tr("&set Active"), this); actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer())); @@ -515,9 +551,9 @@ void IntelliPhotoGui::createMenus(){ fileMenu->addAction(actionExit); //Attach all actions to Render Settings - renderMenu = new QMenu(tr("&Fast Renderer"), this); - renderMenu->addAction(actionUpdateRenderSettingsOn); - renderMenu->addAction(actionUpdateRenderSettingsOff); + renderMenu = new QMenu(tr("&Fast Renderer"), this); + renderMenu->addAction(actionUpdateRenderSettingsOn); + renderMenu->addAction(actionUpdateRenderSettingsOff); //Attach all Layer Creations to Menu layerCreationMenu = new QMenu(tr("&Create new Layer"), this); @@ -574,6 +610,8 @@ void IntelliPhotoGui::createMenus(){ optionMenu->addMenu(toolMenu); optionMenu->addSeparator(); optionMenu->addMenu(renderMenu); + optionMenu->addAction(actionChangeDim); + optionMenu->addAction(actionGetDim); // Attach all actions to Help helpMenu = new QMenu(tr("&Help"), this); @@ -596,7 +634,10 @@ void IntelliPhotoGui::createGui(){ centralGuiWidget->setLayout(mainLayout); // create Gui elements - paintingArea = new PaintingArea(); + // get and set max width and height + int maxHeight = IntelliInputDialog::getInt("New Layer", "Height:", 600, 1); + int maxWidth = IntelliInputDialog::getInt("New Layer", "Width:", 600, 1); + paintingArea = new PaintingArea(maxWidth, maxHeight); paintingArea->DummyGui = this; preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index f3d2900..26f7c7d 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -77,6 +77,9 @@ void slotCreateFloodFillTool(); void slotAboutDialog(); +void slotChangeDim(); +void slotGetDim(); + void slotEnterPressed(); void slotSetWidth(); @@ -160,6 +163,10 @@ QAction*actionCreateCircleTool; QAction*actionCreatePolygonTool; QAction*actionCreateFloodFillTool; +// dimension actions +QAction*actionChangeDim; +QAction*actionGetDim; + // dialog actions QAction*actionAboutDialog; QAction*actionAboutQtDialog; From c73b481ec77ecbc8dfbddbe0b1fde74703f6d826 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 16 Jan 2020 16:49:55 +0100 Subject: [PATCH 88/97] layer as canvas --- src/GUI/IntelliPhotoGui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index edb9c42..c8718dd 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -73,7 +73,7 @@ void IntelliPhotoGui::slotCreateNewRasterLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); + int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); @@ -111,9 +111,9 @@ void IntelliPhotoGui::slotChangeDim(){ // "change Dimension" is the title of the window // the next tr is the text to display // Define the standard Value, min, step and ok button - int width = IntelliInputDialog::getInt("New Layer", "Width:", 600, 1, 50000 , 1, &ok1); + int width = IntelliInputDialog::getInt("New Canvas Size", "Width:", 600, 1, 50000 , 1, &ok1); - int height = IntelliInputDialog::getInt("New Layer", "Height:", 600, 1, 50000, 1, &ok2); + int height = IntelliInputDialog::getInt("New Canvas Size", "Height:", 600, 1, 50000, 1, &ok2); // Change dimension if (ok1&&ok2) { From cb06e10fcdcbd3314e2886061957b81ef5f4810b Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 16 Jan 2020 16:49:59 +0100 Subject: [PATCH 89/97] Update IntelliPhotoGui.cpp --- src/GUI/IntelliPhotoGui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index c8718dd..1425905 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -75,7 +75,7 @@ void IntelliPhotoGui::slotCreateNewRasterLayer(){ // Define the standard Value, min, max, step and ok button int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); - int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); + int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); // Create New Layer if (ok1&&ok2) { From 332e752371becfe203abdb7a99280f33d817b7d7 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Thu, 16 Jan 2020 17:22:19 +0100 Subject: [PATCH 90/97] GUI Update 1 --- src/GUI/IntelliPhotoGui.cpp | 24 +++++++++++------------- src/GUI/IntelliPhotoGui.h | 3 +++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 1425905..e76a39c 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -283,15 +283,6 @@ void IntelliPhotoGui::slotAboutDialog(){ tr("

        IntelliPhoto - A Pretty basic editor.


        Developed by Team 7.")); } -// Open an dialog about the dimensions -void IntelliPhotoGui::slotGetDim(){ - - // Window dimesnion display - QMessageBox::about(this, tr("Dimension"), - tr("Width: %1\nHeight: %2").arg(paintingArea->getMaxWidth()).arg(paintingArea->getMaxHeight())); -} - - void IntelliPhotoGui::slotEnterPressed(){ QString string = EditLineWidth->text(); if(string.toInt() > 50) { @@ -391,10 +382,6 @@ void IntelliPhotoGui::createActions(){ actionChangeDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_X)); connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim())); - actionGetDim = new QAction(tr("&Get Dimension"), this); - actionGetDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Y)); - connect(actionGetDim, SIGNAL(triggered()), this, SLOT(slotGetDim())); - actionSetActiveLayer = new QAction(tr("&set Active"), this); actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer())); @@ -743,6 +730,15 @@ void IntelliPhotoGui::createGui(){ ActiveLayerImageLabel->setFixedSize(Buttonsize * 2); ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2)); + dimActive = new QPushButton(); + dimActive->setFixedSize(Buttonsize.width()*2,Buttonsize.height()/2); + dimActive->setText("0x0"); + + dimCanvas = new QPushButton(); + dimCanvas->setFixedSize(Buttonsize.width()*2,Buttonsize.height()/2); + QString String = QString("%1x%2").arg(maxWidth).arg(maxHeight); + dimCanvas->setText(String); + // set gui elements mainLayout->addWidget(paintingArea,1,1,20,1); mainLayout->addWidget(CircleButton,1,2,1,1); @@ -761,6 +757,8 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(SwitchColorButton,10,2,1,2); mainLayout->addWidget(ActiveLayerLine,11,2,1,2); mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2); + mainLayout->addWidget(dimActive,13,2,1,2); + mainLayout->addWidget(dimCanvas,14,2,1,2); mainLayout->setHorizontalSpacing(0); } diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index dca2410..81a0b28 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -136,6 +136,9 @@ QPushButton* SwitchColorButton; QLabel* ActiveLayerLine; QLabel* ActiveLayerImageLabel; +QPushButton* dimActive; +QPushButton* dimCanvas; + // The menu widgets QMenu*saveAsMenu; QMenu*fileMenu; From 753a491695a1a01fac32169811f8f83cf911d471 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Thu, 16 Jan 2020 17:36:52 +0100 Subject: [PATCH 91/97] GUI Update 2 --- src/GUI/IntelliPhotoGui.cpp | 13 +++++++++---- src/GUI/IntelliPhotoGui.h | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index e76a39c..1905140 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -112,12 +112,14 @@ void IntelliPhotoGui::slotChangeDim(){ // the next tr is the text to display // Define the standard Value, min, step and ok button int width = IntelliInputDialog::getInt("New Canvas Size", "Width:", 600, 1, 50000 , 1, &ok1); + maxWidth = width; int height = IntelliInputDialog::getInt("New Canvas Size", "Height:", 600, 1, 50000, 1, &ok2); + maxHeight = height; // Change dimension if (ok1&&ok2) { - paintingArea->setLayerDimensions(height,width); + paintingArea->setLayerDimensions(width,height); UpdateGui(); } } @@ -381,6 +383,7 @@ void IntelliPhotoGui::createActions(){ actionChangeDim = new QAction(tr("&Change Dimension"), this); actionChangeDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_X)); connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim())); + connect(dimCanvas, SIGNAL(clicked()), this, SLOT(slotChangeDim())); actionSetActiveLayer = new QAction(tr("&set Active"), this); actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); @@ -598,7 +601,6 @@ void IntelliPhotoGui::createMenus(){ optionMenu->addSeparator(); optionMenu->addMenu(renderMenu); optionMenu->addAction(actionChangeDim); - optionMenu->addAction(actionGetDim); // Attach all actions to Help helpMenu = new QMenu(tr("&Help"), this); @@ -622,8 +624,8 @@ void IntelliPhotoGui::createGui(){ // create Gui elements // get and set max width and height - int maxHeight = IntelliInputDialog::getInt("New Layer", "Height:", 600, 1); - int maxWidth = IntelliInputDialog::getInt("New Layer", "Width:", 600, 1); + maxHeight = IntelliInputDialog::getInt("New Layer", "Height:", 600, 1); + maxWidth = IntelliInputDialog::getInt("New Layer", "Width:", 600, 1); paintingArea = new PaintingArea(maxWidth, maxHeight); paintingArea->DummyGui = this; @@ -853,4 +855,7 @@ void IntelliPhotoGui::UpdateGui(){ FirstColorButton->setStyleSheet(string); string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name()); SecondColorButton->setStyleSheet(string); + + string = QString("%1x%2").arg(maxWidth).arg(maxHeight); + dimCanvas->setText(string); } diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 81a0b28..ad1d731 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -87,7 +87,6 @@ void slotCreateFloodFillTool(); void slotAboutDialog(); void slotChangeDim(); -void slotGetDim(); void slotEnterPressed(); @@ -112,6 +111,8 @@ void setDefaultToolValue(); // What we'll draw on PaintingArea* paintingArea; +int maxHeight; +int maxWidth; const QSize Buttonsize = QSize(35,35); QPixmap preview; @@ -177,7 +178,6 @@ QAction* actionCreateFloodFillTool; // dimension actions QAction*actionChangeDim; -QAction*actionGetDim; // dialog actions QAction* actionAboutDialog; From c77507422ceb2c0273d9f2a6bb8e5a2ae30044c9 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 18:37:33 +0100 Subject: [PATCH 92/97] Volere Snow Cards Update --- docs/Volere Snow Cards/Req_0001.txt | 2 +- docs/Volere Snow Cards/Req_0002.txt | 48 +++++++------------ docs/Volere Snow Cards/Req_0003.txt | 9 ++-- docs/Volere Snow Cards/Req_0004.txt | 37 +++++++------- .../Volere Snow Cards/Req_0004_gestrichen.txt | 35 ++++++++++++++ 5 files changed, 75 insertions(+), 56 deletions(-) create mode 100644 docs/Volere Snow Cards/Req_0004_gestrichen.txt diff --git a/docs/Volere Snow Cards/Req_0001.txt b/docs/Volere Snow Cards/Req_0001.txt index 1281493..9c1dd3d 100644 --- a/docs/Volere Snow Cards/Req_0001.txt +++ b/docs/Volere Snow Cards/Req_0001.txt @@ -27,4 +27,4 @@ Conflicts: History: -Erstellt am 30.10.2019, von Jonas Mucke -Aktualisiert am 17.12.2019, von Paul Norberger - -VollstƤndig umgesetzt, Stand: 17.12.2019 \ No newline at end of file + -VollstƤndig umgesetzt, Stand: 16.01.2019 \ No newline at end of file diff --git a/docs/Volere Snow Cards/Req_0002.txt b/docs/Volere Snow Cards/Req_0002.txt index c106509..3c41b87 100644 --- a/docs/Volere Snow Cards/Req_0002.txt +++ b/docs/Volere Snow Cards/Req_0002.txt @@ -3,25 +3,25 @@ Req-ID: Req-Type: Funktional Events/UCs: - -Bearbeitung des Bildes mit einer Betriebssystem unterstützen Eingabemƶglichkeit, zum Beispiel Maus oder Stift - -Bearbeitung mittels verschiedener Zeichen-Tools - -FreiwƤhlbare Farbe aus dem mƶglichen Farbbereich + - Bearbeitung des Bildes mit einer Betriebssystem unterstützen Eingabemƶglichkeit, zum Beispiel Maus oder Stift + - Bearbeitung mittels verschiedener Zeichen-Tools + - FreiwƤhlbare Farbe aus dem mƶglichen Farbbereich Description: - -Ein Farbwert, auch Transparent, welcher durch die genutzte Codierung (siehe Req_0001) darstellbar sein. Dies soll mittels Tools - gesetzt werden kƶnnen, wobei diese spezifizieren was "gesetzt" bedeutet. - -Tools: + - Ein Farbwert, auch Transparent, welcher durch die genutzte Codierung (siehe Req_0001) darstellbar sein. Dies soll mittels Tools + gesetzt werden kƶnnen, wobei diese spezifizieren was "gesetzt" bedeutet. + - Tools: Pinsel: - -Der Pinsel ist ein Tool, welches um seinen Mittelpunkt alles in einem gewissen Pixelradius einfƤrbt. - Der Pixelradius geht dabei von 1-Pixel bis zu 10-Pixel. + - Der Pinsel ist ein Tool, welches um seinen Mittelpunkt alles in einem gewissen Pixelradius einfƤrbt. + Der Pixelradius geht dabei von 1-Pixel bis zu 10-Pixel. Forms: - -Kreis: + - Kreis: Das Tool Kreis, soll es ermƶglichen einen Kreis in einer gewƤhlten Farbe aufzuspannen. Dabei wird am Mittelpunkt angesetzt und dann zu einem beliebigen Punkt auf dem Kreis gezogen, die restlichen Punkte werden dann mit dem selben Radius gefunden. Das Rechteck besitzt 2 Farbattribute, den Rand und die Füllung. Der Rand kann im Bezug auf Breite und Farbe eingestellt werden. Die Füllung ist innerhalb der FlƤche, welche vom Rand aufgespannt wird, und kann im Bezug auf die Farbe und die Transparenz eingestellt werden. - -Linie: + - Linie: Das Tool Formen (Linie), soll es einem ermƶglichen eine Linie in der gewƤhlten Farbe zwischen 2 Punkten zu ziehen. Dabei wird am ersten Punkt angesetzt und zum Zielpunkt gezogen, dabei verƤndert sich die Linie live. Sobald das EingabegerƤt getogglet wird, so wird die aktuelle Stelle als Endpunkt angenommen. Zwischen @@ -31,7 +31,7 @@ Description: -gestrichelte Linie (auf der Linie werden nur Striche in regelmäßigen AbstƤnden gezeichnet) -gepunktete Linie (auf der Linie wird punktweise zwischen Farbig und Transparent alterniert) Die Linie kann mittels dem Breite-Attribut verƤndert werden (Breite zwischen 1 und 10 Pixel) - -Rechteck: + - Rechteck: Das Tool Formen (Rechteck), soll es einem ermƶglichen ein Rechteck in ein einer gewƤhlten Farbe aufzuspannen. Dabei wird am ersten Punkt angesetzt und zum Zielpunkt gezogen. Dabei verƤndert sich das Rechteck live. Sobald das EingabegerƤt getogglet wird, so wird die aktuelle Stelle als Endpunkt angenommen. Zwischen Start und Endpunkt @@ -40,26 +40,10 @@ Description: im Bezug auf Breite und Farbe eingestellt werden. Die Füllung ist innerhalb der FlƤche, welche vom Rand aufgespannt wird, und kann im Bezug auf die Farbe und die Transparenz eingestellt werden. FloodFill: - -Das Floodfill Tool, bei diesem wird ein Pixel ausgewƤhlt. Alle Pixel die mit diesem Pixel in einer Ƅquivalenzklasse + - Das Floodfill Tool, bei diesem wird ein Pixel ausgewƤhlt. Alle Pixel die mit diesem Pixel in einer Ƅquivalenzklasse im Bezug auf Farbe und Nachbarschafts-Relation stehen, werden in die gewƤhlte Farbe eingefƤrbt. Einfarbig: - -Das Einfarbig Tool fƤrbt das gesamte Bild in die gewƤhlte Farbe ein. - Korrektur: - -Die Korrektur Tool ermƶglicht das Anpassen verschiedener Bildwerte - -Helligkeit: - Das Tool Korrektur (Helligkeit), soll es ermƶglichen die Helligkeit des Bildes anzupassen - -Farbton: - Das Tool Korrektur (Farbton), soll es ermƶglichen den Farbton des Bildes anzupassen - Gradiation: - -Das Gradiations Tool soll es ermƶglichen FarbverlƤufe mit einer Anfangs- und Endfarbe zu erstellen, zwischen welchen linear interpoliert wird. - Selektion: - -Das Selektionstool soll es ermƶglichen ein Rechteck an Pixeln auszuwƤhlen welche für die Bearbeitung durch andere Tools - berücksichtigt werden sollen. - Dabei wird am ersten Punkt angesetzt und zum Zielpunkt gezogen. Dabei verƤndert sich das Rechteck live. - Sobald das EingabegerƤt getogglet wird, so wird die aktuelle Stelle als Endpunkt angenommen. Zwischen Start und Endpunkt - wird das Rechteck aufgespannt. - Cut: - -Das Cut Tool ermƶglicht das Ausschneiden der selektierten Pixel + - Das Einfarbig Tool fƤrbt das gesamte Bild in die gewƤhlte Farbe ein. Originator: Jonas Mucke Fit Criterion: @@ -72,7 +56,9 @@ Priority: Support Material: Ubungsblat_01.pdf Conflicts: - - Keine bekannten Konflikte, Stand: 17.12.2019 + - Keine bekannten Konflikte, Stand: 16.01.2019 History: - Erstellt am 30.10.2019 um 22:10, von Jonas Mucke - - Aktualisiert am 17.12.2019, von Paul Norberger \ No newline at end of file + - Aktualisiert am 17.12.2019, von Paul Norberger + - Aktualisiert am 16.01.2019, von Paul Norberger, Gradiations-Tool, Cuttool, Selektionstool, Korrekturtool + wurde gestrichen \ No newline at end of file diff --git a/docs/Volere Snow Cards/Req_0003.txt b/docs/Volere Snow Cards/Req_0003.txt index e157f07..1b5fcc2 100644 --- a/docs/Volere Snow Cards/Req_0003.txt +++ b/docs/Volere Snow Cards/Req_0003.txt @@ -14,13 +14,14 @@ Description: Originator: Paul Norberger Fit Criterion: - -Testgruppe von 3 Personen, die das Programm zuvor noch nie benutzt haben, stellen keine Fragen über die BenutzerobeflƤche nach einigen Minuten Ausprobieren. - -Kunde, der das neue Interface noch nie benutzt hat, hat keine größeren Schwierigkeiten damit zurecht zu kommen. + - Testgruppe von 3 Personen, die das Programm zuvor noch nie benutzt haben, stellen keine Fragen über die BenutzerobeflƤche nach einigen Minuten Ausprobieren. + - Kunde, der das neue Interface noch nie benutzt hat, hat keine größeren Schwierigkeiten damit zurecht zu kommen. Priority: 20 Support Material: Ubungsblat_01.pdf Conflicts: - -Keine bekannten Konflikte, Stand: 17.12.2019 + - Keine bekannten Konflikte, Stand: 16.01.2019 History: - -Erstellt am 17.12.2019 + - Erstellt am 17.12.2019 + - Aktualisiert am 16.01.2019 \ No newline at end of file diff --git a/docs/Volere Snow Cards/Req_0004.txt b/docs/Volere Snow Cards/Req_0004.txt index 7fd77a2..097ded3 100644 --- a/docs/Volere Snow Cards/Req_0004.txt +++ b/docs/Volere Snow Cards/Req_0004.txt @@ -3,32 +3,29 @@ Req-ID: Req-Type: Funktional Events/UCs: - -RückgƤngigmachen eines vorherigen Fehlers - -RückgƤngigmachen einer versehntlichen Korrektur - -Einen rückgƤngig gemachten Schritt wiederholen + - Erstellen eines Raster Layers + - Erstellen eines Shaped Layers mit Polygonfunktion + - VerƤnderung der Anordnung der Layer + - Verschieben der Layer innerhalb des Canvas Description: - -Es werden insgesamt 20 Bearbeitungschritte gespeichert - -Die gesamten Pixeldaten der Ebenen werden für jeden Schritt gespeichert - -Wird der Undo aktiviert, wird zunƤchst bestimmt ob sich die Daten für den Schritt direkt - davor im Speicher befinden. Ist dies der Fall, werden die Daten geladen und der intern - gespeicherte Index des geladenen Statuses verschiebt sich nach vorn, so kann mehrfach - geundoed und redoed werden. Ist dies nicht der Fall, gibt es ein audiovisuelles Feedback, - dass der Schritt nicht geladen werden kann. - -Wird der Undo aktiviert, wird zunƤchst bestimmt ob sich die Daten für den Schritt direkt - davor im Speicher befinden Ist dies der Fall, werden die Daten geladen und der intern - gespeicherte Index des geladenen Statuses verschiebt sich nach hinten, so kann mehrfach - geundoed und redoed werden. Ist dies nicht der Fall, gibt es ein audiovisuelles Feedback, - dass der Schritt nicht geladen werden kann. + - Layerstruktur ist prinzipiell eine Art Array, jeder Layer hat eine Position in der Reihe und hƤlt eigene Pixeldaten + - Es gibt einen aktiven Layer, der selektiert und geƤndert werden kann + - Der aktive Layer kann bearbeitet werden, wƤhrend andere Layer dabei keine Beachtung finden + - Wird ein Tool verwendet wird eine Vorschau auf einem temporƤren Layer angezeigt, welche dann nach unten mit dem Layer + vereinigt wird, wenn die Ƅnderung übernommen wird, WƤhrend dieses Prozesses kann die Bearbeitung auch abgebrochen werden. + In diesem Fall wird die Ƅnderung nicht auf die darunterliegende Ebene übernommen Originator: Paul Norberger Fit Criterion: - -Bis zu 20 Schritte kƶnnen geundoed und redoed werden - -Das Laden der einzelnen Schritte dauert für ein 512x512px Bild nicht lƤnger als 0.2 Sekunden auf Referenzsystem + - Bis zu 10 Layer gleichzeitig bearbeitbar und durchwechselbar + - Entfernte Layer kƶnnen entfernt werden + - Layer kƶnnen in beliebiger Reihenfolge angeordnet und erstellt werden Priority: - 50 + 0 Support Material: Ubungsblat_01.pdf Conflicts: - - Keine bekannten Konflikte, Stand: 18.12.2019 + - Keine bekannten Konflikte, Stand: 16.01.2020 History: - - Erstellt am 18.12.2019, von Paul Norberger \ No newline at end of file + - Erstellt am 16.01.2020 + - VollstƤndig implementiert, Stand: 16.01.2020 \ No newline at end of file diff --git a/docs/Volere Snow Cards/Req_0004_gestrichen.txt b/docs/Volere Snow Cards/Req_0004_gestrichen.txt new file mode 100644 index 0000000..1ee6102 --- /dev/null +++ b/docs/Volere Snow Cards/Req_0004_gestrichen.txt @@ -0,0 +1,35 @@ +Req-ID: + 0004 +Req-Type: + Funktional +Events/UCs: + -RückgƤngigmachen eines vorherigen Fehlers + -RückgƤngigmachen einer versehntlichen Korrektur + -Einen rückgƤngig gemachten Schritt wiederholen +Description: + -Es werden insgesamt 20 Bearbeitungschritte gespeichert + -Die gesamten Pixeldaten der Ebenen werden für jeden Schritt gespeichert + -Wird der Undo aktiviert, wird zunƤchst bestimmt ob sich die Daten für den Schritt direkt + davor im Speicher befinden. Ist dies der Fall, werden die Daten geladen und der intern + gespeicherte Index des geladenen Statuses verschiebt sich nach vorn, so kann mehrfach + geundoed und redoed werden. Ist dies nicht der Fall, gibt es ein audiovisuelles Feedback, + dass der Schritt nicht geladen werden kann. + -Wird der Undo aktiviert, wird zunƤchst bestimmt ob sich die Daten für den Schritt direkt + davor im Speicher befinden Ist dies der Fall, werden die Daten geladen und der intern + gespeicherte Index des geladenen Statuses verschiebt sich nach hinten, so kann mehrfach + geundoed und redoed werden. Ist dies nicht der Fall, gibt es ein audiovisuelles Feedback, + dass der Schritt nicht geladen werden kann. +Originator: + Paul Norberger +Fit Criterion: + -Bis zu 20 Schritte kƶnnen geundoed und redoed werden + -Das Laden der einzelnen Schritte dauert für ein 512x512px Bild nicht lƤnger als 0.2 Sekunden auf Referenzsystem +Priority: + 50 +Support Material: + Ubungsblat_01.pdf +Conflicts: + - Keine bekannten Konflikte, Stand: 16.01.2020 +History: + - Erstellt am 18.12.2019, von Paul Norberger + - Gestrichen im Januar 2019 \ No newline at end of file From e4543dbe031ba8de8536b8cffd5de58106ab2a5f Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 16 Jan 2020 18:39:08 +0100 Subject: [PATCH 93/97] Started updating screenshots --- docs/Manual/assets/change-colors.png | Bin 2122 -> 554 bytes docs/Manual/assets/file-open.png | Bin 1486 -> 1496 bytes docs/Manual/assets/file-save.png | Bin 2253 -> 2208 bytes docs/Manual/assets/startup.png | Bin 6760 -> 32632 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Manual/assets/change-colors.png b/docs/Manual/assets/change-colors.png index 8a3065a8fdb5c1ea0828ca4eda109a4601564e1e..39cfc514a4ee77737af034c89e575d2d25664972 100644 GIT binary patch literal 554 zcmV+_0@eMAP)DJm)|D=RB3EG#oKGc`3eI5;>uIyyT$J3T!; z09930002NhKtVx4LPA1CMMX+VN=r*i0II40|Nkcc|Ed50{{R60CMIhgwLt&?0Z&Op zK~z}7?bm-#f6C}5g?xe0+a=28jpLuoCV*@Y#;^pq(%H)y9UJ-mJghnLwt zS*>{!ey}fBvs(YE_SWYg*k!EF`XAPED!H!f)Vj-FZd$VB+OUCl>i)q)3tF(>yV~xb s@?Y#G?{RZ}b=EGL*%!o5I?UGk0*5VWc0V7Bm;e9(07*qoM6N<$f>>J2>Hq)$ literal 2122 zcmY*bdpMM78-G%}bQ%?HHJOyg4ADr%!wj({|XtiDD$F9T_<^ z7^l8WDhVr76EV&-e4??KL5LM!GVk}=-Rt^xpX+{p_kI6<_x0S@egE|&IoexoT!&o; z0N7}KjB*lyRX8+$tgsqIA&zwpC6XO&oh{H501O7bD6aS)0Kfta76Y&t3>N$M1YogP zltNWJ27?D!5(Z1cqA?ydA_h;!W59~A!h#h6k3}hUb#*)muc4u#rKP2^nmCcz{!OeVoF8HQmJ7AE0gG9Hco zB#s|H4#U2_s01@$Uyd(|48AW%d>ept0I~rn2jCF^PXS=SFe*0!&<#Kj0DS=b2Eb0r&>MG5|6F5CAy73=RY4Ghi{tm&4$2ID7^lVYMS1F`pwAbHoV3XP_Pt zbNGBQA3;IfEJ2zl5k7*ZNb?LbAVIq4kbwoXk}v*?Mytf5lZY4*qYsQOAyYHR6oMY{ z!W@DY{&A7e7U~NCzK^k{m^xqV`!tZ^-cM1HpHVGJd~J{$!YFeq3>hDN*ih-&|MuqM z3+lj4`yN+9(>q5?KWKAWee=<&8hn79T|eFh-?)%1e_P)sWH~h2dOEvWRjR$*71yDZ zaZFOWkeRa@CxPW5tHQbJ`p(*S!;MkyY*tFBk&+{n>>M7N0NOWmGu~@1ixDU~De!h^q+-cexAdkbZ%+O|? zB^*&C5ORhyNVHg0C|mli`X0#v7VNEwk*U#*I(J^E+g4R3PfNNeeXF}x*Sn$LpQrNOqkzX+hT%?Fp^Fd} zm=_*#JM%0;@}!rW+&M?g`Ptv^kD>qGQHXrS8UKEa@-ps#V^ofkqd<4d9)c}Amcvv@ zx}`+Oi71*(l$|v2l7n_Z4KYs)v!U=;Yv^wI2@ee{)%e%eN`_o_{C@`G73jje)@!q| z{GZgjw4WGSAOFXA_Cz+;M$oT`(H`I;|r?Po<5jl-7`M>nDb)1dFt@{N2+q; z^p7mjq7A=3V5(cqH43vPZnn&a-tIb_n?5RgpIE@eO(qGBoPXcWT>Q{St(3>*^Mp00 zi@$bt7)OaL8h%V$_57#9Oq+An?XPAqR%IvrUeN%AcBQdo1z?AKl?Hi>%!)8mP$HjE1Yajbb4Jn z8P>XGUK-Y2?CPx(KULAJJ@Y9`Ve1Y(T)P5q4EI!2;#xMFou|0lY`4r~tKT`%;#{vp z`p*^ZfYb(R!B z$gYka8>>^y_$E>2PS~1`MCdd~G>+9w%!p_lt;P=SLaEc_o?`d#$mXiha6*V*mIiV3 z(gqd4o--O+ilkK!sA!x>M|10MP4s5Qwd?{???XKFF# zLzRBx_+5g#s#ObC*dIZ+XsOt?*)LWn>zCwzGavc;nGngr43d%#r6j2QP6(CT$+Vz| zG+Fd()2<0fcI36-ig0%AC9ARhC!8aTTA_^3SN0|xb}lwoUXZbW`iS?uo};v#D1z3o zHyyF=*(163%DNn5O2pfrjMTWsjI(`Jd8P=F`F@!18$T79ty7^pIK)zJ99SCHJG_N< z-AtmgEB#yoVG!b&ewnYKzlK`FYMbALNu7m}F|E02ZIH6%Sg3q#D7)#RFfw~Mo|UrH zQJy!_ovKQ`ZYF(8t55!BbC;%>>al6S%bT8O6duy%u<1~QI;B0Ay34@e_dUpB1~0~N z=iJqU=`MbC_vfC+;?@=J72t0K)GU@3_?P`_snn#a{py3=XQ{2J8rwDPe!%=!+LEgn zW9pKnHWoGlDO0VO*2!CGhUBPjj8NU?%Ali7&%Vr_n4XIK*$7^co9UOVK;lzoNzb0| zpjdrRgNTn^-Ms1Kt!C0A{kSC$UQl8XX5x9OR!?pl6mDzQIvYD*QBWOtckqCxMa8tM zJiR$r(SaRE&0ZI&@sg=WsNZF}n3}8|z_edf^nRnYu6oH=BVovcmEvyY`pc`Sg^UT{$Fw-~Sj(f{7<#1Oqp>onq^vg=euIH@If}u6I dp(l38s{OhcN^sw&u$4c7wS_&U-0aNN{{hQK`Un63 diff --git a/docs/Manual/assets/file-open.png b/docs/Manual/assets/file-open.png index f60e22462bcc9dc30c4af2fa0f2d280c545131de..8215da53078d4cb862ad4a2192d2974ddffdb942 100644 GIT binary patch delta 1287 zcmV+i1^D{T3)l-KiBL{Q4GJ0x0000DNk~Le0001-0001N2m=5B0I2jUW&i*IT#+S7 zAtoj!DJdx{D=RH6EiW%GFE218H!d?XGd4ChH#avrIy#YzFjQP!U0z;aKtN<q`005!@0I>i7x&Q#n007qj0Nelo}{r~{~ zKtP5-WTilc#AK!7hCo22WI&S#0djw1h01mS00cKlL_t(|+U=N+SJF@v$Cp|8qoOd# z!VD23Bw!V4n!ifXflw^5$TWYD6-uD)|39aD-^RePP2WU#p7ZW;N2c$+``P{R_Pz*1 z3cDt-4YzTwiJdax?Z)mo)t@ zIQaQ>+ywVyLXDqPgvF1txCnn-QZa|6ClxovbSabGw2K9NzybLj{v{31C!3E}*EEkD z22MG(iCnhk050<9`dwMJgoA#nW~HAQ={p8ai@WJ)bxkX{1G}2TH8Fr@aH6LmgLrBMT1&BrAo zM-*yZWl|o3YgwyJCBjxAGRbk|j0&}`GAZF2Yfhi8M$U1~H7S2oU1ieBhqR)1s{u~; zK@DeAsJhCe);2g3_PM;tbj=4nTx%4nEAE7ZHT+u+>zL ztF}hg5K}9^&332(I|R7=ev;X^DGIWh$Tigi6`opmY z7&r){npL=5@PBuQYK}m-pe-;)q{gsCw2b2{%&@mrX{GGeS0PBO8!PQ*2)grbxK@Q) zuaH6%TiX{D4S_j?!n@Unm@blLHLV`E8dlq#kiWh-9EX47a2)O$!%dxmd%}p-;HDel zUNd4k+$_Usot|A_8g7|sxK*a%RyiDp<8U1A%HW7{)+94ZSGM4KLpHY@?i{%IfE&Mj zi1j|}(Z0iBr{=oDvHq9+VFYC|tr2Vr4o45iYFcrhdk78T#fAup9+nz{zrHvehvRS@ zuAOiJzi(Smu(PSQ+Pj&##iR~5Ix_6DW1DWT&AgxgP=^Z!M*KExvu(Dy`GuvGI$SUi xux49mw=I5LO0G0CL@;Q{w%m40CRc!M^*`P!N7X&_oQePd002ovPDHLkV1gb>PK*Em delta 1277 zcmVKxAY_5c9-008^|0Q~>} z{r~{~005H{0djw#3=}#500cQnL_t(|+U=P8ThdS%$Cp`osVEGxOc0@k1S}kA%JNo< z6iY25%?p{K=I#9dzjfZTi(_nq0kV^w_i>L*&pGdB@8#@#;Wl;~*oNStaSZQ&z&k|< zo$p;7?VcXl;pOlUxn_FySZczFxGyygw2qL$ivjP*{K0>WmphY$%%<$#sT;i7(Jt^Z zn136{Z^SSdjXij}gEtLAfM zr+DBGFkpYZ1b@llCzP#6>uXv@4}ym-9ik^`F7QSEe06ss+v4HQI+Mg7dGQ+rPmR6h zXm!o(p$*=FQ|-a35JW3HL71{jE*^-VO_-9WWc5*7#M?bRx9nV8D3A}hR7x!o`W+rN zC0pa=NJ$9UUptbZq}3KrTeD){8kg4lUJ2%Jliz>qdTX31Xi!=R)mJ-o5t4D&{N91G zfbxXw+9y|C)7To#zct+L6ZIQ!>3Uyk?cpgK0Ht`D%`@pH9SItmr+5O@#_$*(!!uZ9 zJQ}4KFBBf58E<4X9EsA4H#`!e8Sm-y(3m4$y`pXT2!PPmq~&44-UoMO)^xRswvE%% z3Fv>VPa2jH&%s9nJhP&0BX*@4ECZgCj|O-qMN5v}pi0-=W?c2IO5*M6N5IQ`$s2vN zfM=m-L6s6E+set92oVrb20YD2ThSwm_DYqyJSc0q)20$3jEJCWBYI{HIP?_3j}?xO`fv!Z|1RjF$g1T*ozw{9_A_0bAmXB2JA$0&x^ z1w60L$PAC+F+7IH@ct#d1jqHp?Is6&*Znn01H9zjxR88lvt07t0N>eAxy4I7n6O_i z=nwikoJp5>sXhV_;5c7;C`NFTJ!-nsPx$1+2_Zeiaj}jSn#V1EBz)dQ4=8$K&>*+?)L=aI2!e-0spJ-4KKy^bXSGK#e7Hd%PNdeLS=7A4 zB*=5HQ^|GRxvzPgUO!aaZ60^({kT?*YS)m06gt}>u37^!i3{+~0D$^PvX$fp{7PsY zcSiP7V|WaY;W4}$g*R=&dq#b#wk7#XGWP{YD4X>YfxMg@v;H8KB@RdcX|3#nr?GH`0*Beg_z8Z`JDy7Ly zKzlH}*6`>}F6?`caccyjHFzOFS8K4B8pC6F43FV?ix&xv40BF4-Bo)#JHK62FyM`c zM@O9KX1Z&$?-t%0@uFklkOSRZmu-Gwae38<7mY;h=@z?fOCOdCt2M0=joQ+!blnPt nRfW#bxps6#FRdY-r*y@?!m53bsXVzl00000NkvXXu0mjfe^pOR diff --git a/docs/Manual/assets/file-save.png b/docs/Manual/assets/file-save.png index 23d2448a94cf61aa48bed990ad0b20415c81c572..33a770a964ebc06373f177ff96873b1bb1c531c0 100644 GIT binary patch delta 2027 zcmV=cx4h|#$8ZMDv8zCnrCnPQ;Dk>@~D=RH6EiW%GBsVTIGcz_eHa9mnIyyR$m?1(y zE*d~CBtSPLKtL`)KsP`@KuStVKtN<{&_O$T ztif9w;)s+>>5`Zj=vJ~8wlxfBSK4m=|Nj8=B>6~UJBN=rk@TtS9JZvd-;-oN|Ewsl zhNNd`Zj&O}CA(x7kNw&-&D+=SE?-?=`ms02CPvTRM{o5J%BY{~BY)TD*fje~@!Oq! zZht#YDgEr1{V)328#g+tofzX2jaRFIty92WJ86TZ|7p!D`!)6X*Y8a8O+P!Mu07Z5 z=f7N;M!jpA9VqYU$~4=go z=8zk&*<|hgKh946{(rh1V1IGQtY7bvy1&(-P$;k4hGt*yc2MJ@)#wCSlDvQoj@$4_ zgB(7?duuySwqkn?ZrG)L!;Q{!gZ*gD!q^?mZoUt&yKdE=Ec9dN-Id|X-k|mTvsM2c z%+9^Wb8DWblXXD0^jn@AuURn>7vZN;a539{v4NN6g!O*{wXCto^g4n;Xsx zr!$_suY2!3zPF)}GrB&u`??#(4Gq&Y2fHuYFb&dQ{reJp651}fslU(jJe{n)vvv1% z+~?0c`ot*D>wm@{OnT2=+9<9xX3Y|3XTybv?6s2{9nCQN{9MaC8%gP;PabL@RHf}@UXj(>5a$0tI@iDMh@9(?INE`d=0ke#jSvjcORl!{4yq3wK z^5R&&z%pX?)-ri!cg}8=kzTu#x)w^r?9^~-Z)Y{K-I28`S!iBLDYbUD+alDLykYg6 zfZg5R?SI{w-P79MscTaoB?}yaOnx$UGLG5(d>^}AM%viv*jobJWx57Ooy6zao@9J4 zcuzSjytaRLov>N7+?;+qt zuJ<5n1gW^7!Y2!AOza?0JNnsYH>!_|l6?p~Tz^y0Fv^E2JrWBvnpAWG-_f!+P6MP+ zR2La3yE&AdELwIM;vD6Vv+6{Fgi+bK#&>!1?z6gE%FZVqEF=g4YvX&+VB zHe+T7G78qGd!{b`;t*7^jZR{AC#@U8TUoVGLY37g*?4^(5U<*Ux@YF{Wa%JJVRL-# zoqxv3E2{^E61YD*8u5*B&Ca0i8CjZjaQ|jhK97d8!>xj>T3uUTJRyGIuE;tSGUhtd#AEv zuJJAA#bCEIxu^iz)SPpVN(~XNo|*BTYjXLcHx#$H@+2m9_vu6Bu8QU_1+e!X&3`E= zOC|eM*x~uDGMq+lMlqny4m-WksVzNTa^C|I%IC}M(Fw^e7Q3K6599kMq^~QokU>G9 zzHa`LWS8ucJ(Wo#gN+rcrJ7o%Itr&Un;~{PRQmxtc3?2on|ZUmu! zpHLdw-ofIZvdfENE*kc|o$ajv^dFK+e*L^_`UGO|1@#*`HBN|7t($#sch?{N$HbEF z_|8JL43j@GlS9$41HCW$Psyceo!9xH;{;R6*s-|mSX_22E;|;N9gEA3#eZeT;<96L z*|E6nSX_22E;~*UyDLr`-MqQ}>^N=gJWdewyXpt(&W zVaF+C=W*JgIc=k0$5>dq<214-)826^*=!E9C4ZQ#W002ov JPDHLkV1lwo{&WBU delta 2071 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 E0032SMF0Q* literal 6760 zcmc&(c|6ox|Njmtmx>6{LPe1^vXnHElD$Mz)<~9!?CY56R-#Ch{F&3vbZ_Gh_}<8Ob8NF)Ym<29@tMKdAi3l?cdD|YY{Zlkj;qPc#dX$N6W&8 z=4xG1kK*KpgezX9>E@h1cF$#Km)b1>Tn<57C*|_hwnqkBuj&wnZL2 z`DJB(!vr(}iXcxhw3ZvgJ*75tKnJEZhga#0b@f{kki-jK5ry>cjBXSZk>}J`f>&sp zmW3MMI!-+enI;CZg&+rmrw@&C4D1jRIlgDr(rmnWnGY&*%=X_qxV*-jXHJflUk>Fa zXD7Aa=U4Nzbu~i#-j#i4NKv8vE#3;R=I3^#Y<&8z;w!Th5u|E7q(l$(91gjAnBt3B zdW6Q??P(i7^BT8!Tn2JFvXJdD_iPU`Y^}K^MjUyHs&%#0X`w$yhdWZ?&}>wB45bZ zabvk>)xFXJMn9_$uf;X%;S9gejJB{}&BUq?hx+&r)E@i7?#p$~VNjPc$iseq#$jti zi3|6U)_cTKtWG=U*ax5pZUJY=n0-SS<;)I>DV?uyxW4BPQWv#-?mO;bWKgo zV{i#+Q=gLFt7Fa1rK;~%_edwHJqTCG&|=P{)A>AGMOIR4E{%2-g)rKQkJm~<$hG`X zfKstfj2pLoU&(X`qmClH5^Cx zAdv67$@kA5G9B0Y0=(T13U;LRy4%;-%~q?_CZT;%`Cdd^b8+tQ?BZc0`Q4pneZ>?0 zp@4-L-yYUe&XfiD04PWQ`{1aU&UrKa8y4g8^M2IyA@8ulg^bV3p{Llh?Lf+!+4_fXabPwRbNub+r3qK&o$@n$o-Esjo+KAuWLjV(|8Jc(R4WGN zxLsvK$Ve+Ng*t)mXPVr}o3S*}F}r*>&8d{tYT8=|}|~*SH6^A(XNCGTTgpY%>^0(3)1?AAhW8(maya1OOSgrn)E3{wNZ; zF07&Z6#0C7p<2MC5051?j64^ zrLJsjhnWo+7GuvLhty}5DD^UpsQ<(`u9#6 zWjiJ{9eMZb%+gP+(k^(jj4^gG9Y=mw&vV z&Op!#&p+CvEENCRm-~5MUaK~wy>qvkdr=q{_Qe+z^t1i$KVMc==%b@&c*ezLYVx~_ ztMr-$nJ?BTIM1q=-nc%fR?HV_a>lRVps*XobFe+heYrhm*E^azjghN~uDqca!dzne zGhA*e8XR4GqdD01b;!oWDMYVw!oo9faq-gqdWMH$+j@NY^^mm3HtO4akZ&fdOOM#Um#x3 zOFCK3dYl;kn_0!tueaP3Yx`fZQhK9jSS}t^fZVla@zC_1fPm@KDQ}y?6Cdka?Hhhi zwJWbGEPYv6c(C2p$m_d$kW%~cG;+Ij1#Nf7p?ANk(pco`TeOS;9q#?UTEw@^UUM&3 z%zV#pg`|mcu+{a_O1q$yuUph>Jy_`dz7P1P%Wv_?8yk}VPFhE~FTHnQ=OL0v#@FJ- zTjF5-Xm9Vfi9|jg)7Jx+*`b%ZhrSGctD>Y#EY`K8W>&4#x*QrVy5-v2xgLt5T>nh& zE#}vmyB=-R!Js{Jh}YrvqneZ*qh+kpNHQ@jCr+~^5g+k;k-XPOr9g4+_nX( z4sq_jt@Yd|Fc~a&kN3JK2d-Kqo?(n`pD^^R0{lPj48IleZe8Eeo&W6_-HU>K8x=u4YXK z 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 From 92e6b569ea446cc9127f60a6d54a4dc095288eed Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 16 Jan 2020 18:48:53 +0100 Subject: [PATCH 94/97] math --- src/Tool/IntelliToolPolygon.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index d457395..c866424 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -3,6 +3,7 @@ #include #include #include +#include IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon) : IntelliTool(Area, colorPicker, Toolsettings){ From 784e9c051ed7bdfd9398b36e47d8012a628864d8 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 16 Jan 2020 18:54:55 +0100 Subject: [PATCH 95/97] cmath --- src/Tool/IntelliToolPolygon.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index d457395..c866424 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -3,6 +3,7 @@ #include #include #include +#include IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon) : IntelliTool(Area, colorPicker, Toolsettings){ From c16a589a66effefd196d50121c92e6b15183a5fb Mon Sep 17 00:00:00 2001 From: AshBastian Date: Thu, 16 Jan 2020 21:19:17 +0100 Subject: [PATCH 96/97] GUI Update 3 --- src/GUI/IntelliPhotoGui.cpp | 25 +++++++++++++------------ src/GUI/IntelliPhotoGui.h | 2 -- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 1905140..3ae4f0d 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -15,7 +15,7 @@ IntelliPhotoGui::IntelliPhotoGui(){ setIntelliStyle(); // Size the app resize(600,600); - //showMaximized(); + showMaximized(); setDefaultToolValue(); } @@ -73,9 +73,9 @@ void IntelliPhotoGui::slotCreateNewRasterLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); + int width = IntelliInputDialog::getInt("New Raster Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); - int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); + int height = IntelliInputDialog::getInt("New Raster Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); // Create New Layer if (ok1&&ok2) { @@ -92,9 +92,9 @@ void IntelliPhotoGui::slotCreateNewShapedLayer(){ // "New Layer" is the title of the window // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); + int width = IntelliInputDialog::getInt("New Shaped Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1); - int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); + int height = IntelliInputDialog::getInt("New Shaped Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); // Create New Layer if (ok1&&ok2) { @@ -112,10 +112,8 @@ void IntelliPhotoGui::slotChangeDim(){ // the next tr is the text to display // Define the standard Value, min, step and ok button int width = IntelliInputDialog::getInt("New Canvas Size", "Width:", 600, 1, 50000 , 1, &ok1); - maxWidth = width; int height = IntelliInputDialog::getInt("New Canvas Size", "Height:", 600, 1, 50000, 1, &ok2); - maxHeight = height; // Change dimension if (ok1&&ok2) { @@ -624,9 +622,7 @@ void IntelliPhotoGui::createGui(){ // create Gui elements // get and set max width and height - maxHeight = IntelliInputDialog::getInt("New Layer", "Height:", 600, 1); - maxWidth = IntelliInputDialog::getInt("New Layer", "Width:", 600, 1); - paintingArea = new PaintingArea(maxWidth, maxHeight); + paintingArea = new PaintingArea(1280, 720); paintingArea->DummyGui = this; preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); @@ -738,7 +734,7 @@ void IntelliPhotoGui::createGui(){ dimCanvas = new QPushButton(); dimCanvas->setFixedSize(Buttonsize.width()*2,Buttonsize.height()/2); - QString String = QString("%1x%2").arg(maxWidth).arg(maxHeight); + QString String = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height()); dimCanvas->setText(String); // set gui elements @@ -856,6 +852,11 @@ void IntelliPhotoGui::UpdateGui(){ string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name()); SecondColorButton->setStyleSheet(string); - string = QString("%1x%2").arg(maxWidth).arg(maxHeight); + string = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height()); dimCanvas->setText(string); + + if(paintingArea->layerBundle.size() != 0){ + string = QString("%1x%2").arg(paintingArea->layerBundle[static_cast(paintingArea->getNumberOfActiveLayer())].width).arg(paintingArea->layerBundle[static_cast(paintingArea->getNumberOfActiveLayer())].height); + dimActive->setText(string); + } } diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index ad1d731..8d164a4 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -111,8 +111,6 @@ void setDefaultToolValue(); // What we'll draw on PaintingArea* paintingArea; -int maxHeight; -int maxWidth; const QSize Buttonsize = QSize(35,35); QPixmap preview; From 67e51c27a20ccdc7d4a049952654aca226d9cdda Mon Sep 17 00:00:00 2001 From: AshBastian Date: Thu, 16 Jan 2020 21:21:47 +0100 Subject: [PATCH 97/97] GUI Update 4 --- src/GUI/IntelliPhotoGui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 3ae4f0d..3af696b 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -859,4 +859,7 @@ void IntelliPhotoGui::UpdateGui(){ string = QString("%1x%2").arg(paintingArea->layerBundle[static_cast(paintingArea->getNumberOfActiveLayer())].width).arg(paintingArea->layerBundle[static_cast(paintingArea->getNumberOfActiveLayer())].height); dimActive->setText(string); } + else{ + dimActive->setText("0x0"); + } }