From 2432bb0568ef9ea2dd889540fb24a805c3fd5b98 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Sat, 25 Jan 2020 19:37:14 +0100 Subject: [PATCH 01/37] Wechsel Rechner --- src/IntelliPhoto.pro | 2 + src/Layer/PaintingArea.cpp | 4 +- src/Tool/IntelliToolGradient.cpp | 61 ++++++++++++++++++++++++++++++ src/Tool/IntelliToolGradient.h | 64 ++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 src/Tool/IntelliToolGradient.cpp create mode 100644 src/Tool/IntelliToolGradient.h diff --git a/src/IntelliPhoto.pro b/src/IntelliPhoto.pro index 2b1d4d5..a0adaac 100755 --- a/src/IntelliPhoto.pro +++ b/src/IntelliPhoto.pro @@ -30,6 +30,7 @@ SOURCES += \ Tool/IntelliTool.cpp \ Tool/IntelliToolCircle.cpp \ Tool/IntelliToolFloodFill.cpp \ + Tool/IntelliToolGradient.cpp \ Tool/IntelliToolLine.cpp \ Tool/IntelliToolPen.cpp \ Tool/IntelliToolPlain.cpp \ @@ -52,6 +53,7 @@ HEADERS += \ Tool/IntelliTool.h \ Tool/IntelliToolCircle.h \ Tool/IntelliToolFloodFill.h \ + Tool/IntelliToolGradient.h \ Tool/IntelliToolLine.h \ Tool/IntelliToolPen.h \ Tool/IntelliToolPlain.h \ diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 6534aab..8df8ffe 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -17,6 +17,7 @@ #include "Tool/IntelliToolRectangle.h" #include "Tool/IntelliToolFloodFill.h" #include "Tool/IntelliToolPolygon.h" +#include "Tool/IntelliToolGradient.h" #include "GUI/IntelliPhotoGui.h" LayerObject::LayerObject(){ @@ -38,9 +39,8 @@ LayerObject::LayerObject(const LayerObject& layer){ PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) : QLabel(parent){ - this->Tool = nullptr; + this->Tool = new IntelliToolGradient(this,&colorPicker,&Toolsettings); this->setLayerDimensions(maxWidth, maxHeight); - activeLayer = -1; } diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp new file mode 100644 index 0000000..4ab3699 --- /dev/null +++ b/src/Tool/IntelliToolGradient.cpp @@ -0,0 +1,61 @@ +#include "IntelliToolGradient.h" +#include + +IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) + : IntelliTool(Area, colorPicker, Toolsettings){ + this->LineColor = QColor(0,0,0,255); + this->hasMoved = false; + + A = QPoint(0,0); + B = QPoint(0,3); + VectorAB = QPoint(0,3); + computePixelColor(QPoint(2,1)); +} + +IntelliToolGradient::~IntelliToolGradient(){ + IntelliTool::onMouseRightPressed(0,0); +} + +void IntelliToolGradient::onMouseLeftPressed(int x, int y){ + IntelliTool::onMouseLeftPressed(x,y); + A = QPoint(x,y); + B = QPoint(x,y); + VectorAB = QPoint(0,0); + //Canvas->image->drawPlain(colorPicker->getFirstColor); + //Canvas->image->drawPixel(A,LineColor); +} + +void IntelliToolGradient::onMouseRightPressed(int x, int y){ + IntelliTool::onMouseRightPressed(x,y); +} + +void IntelliToolGradient::onMouseLeftReleased(int x, int y){ + if(!hasMoved && A != B){ + //Canvas->image->drawPlain(colorPicker->getFirstColor); + } + IntelliTool::onMouseLeftReleased(x,y); +} + +void IntelliToolGradient::onMouseRightReleased(int x, int y){ + IntelliTool::onMouseRightReleased(x,y); +} + +void IntelliToolGradient::onMouseMoved(int x, int y){ + hasMoved = true; + B = QPoint(x,y); + IntelliTool::onMouseMoved(x,y); +} + +void IntelliToolGradient::onWheelScrolled(int value){ + IntelliTool::onWheelScrolled(value); +} + +void IntelliToolGradient::computePixelColor(QPoint Point){ + QPoint NormalVector = QPoint(VectorAB.y(),(-1*VectorAB.x())); + Point = Point - (dotProduct((Point - A),NormalVector) / dotProduct(NormalVector,NormalVector)) * NormalVector; + qDebug() << Point.y(); +} + +float IntelliToolGradient::dotProduct(QPoint Vector1, QPoint Vector2){ + return static_cast(Vector1.x()*Vector2.x()+Vector1.y()*Vector2.y()); +} diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h new file mode 100644 index 0000000..80424a1 --- /dev/null +++ b/src/Tool/IntelliToolGradient.h @@ -0,0 +1,64 @@ +#ifndef INTELLITOOLGRADIENT_H +#define INTELLITOOLGRADIENT_H +#include "IntelliTool.h" + +class IntelliToolGradient : public IntelliTool{ +private: + QPoint A; + QPoint B; + QPoint VectorAB; + QColor LineColor; + bool hasMoved; + +public: + IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); + + ~IntelliToolGradient(); + + /*! + * \brief A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseRightPressed(int x, int y); + + /*! + * \brief A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseRightReleased(int x, int y); + + /*! + * \brief A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseLeftPressed(int x, int y); + + /*! + * \brief A function managing the left click Released of a Mouse. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseLeftReleased(int x, int y); + + /*! + * \brief A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes! + * \param value - The absolute the scroll has changed. + */ + virtual void onWheelScrolled(int value); + + /*! + * \brief A function managing the mouse moved event. Call this in child classes! + * \param x - The x coordinate of the new mouse position. + * \param y - The y coordinate of the new mouse position. + */ + virtual void onMouseMoved(int x, int y); + + void computePixelColor(QPoint Point); + + float dotProduct(QPoint Vector1, QPoint Vector2); +}; + +#endif // INTELLITOOLGRADIENT_H From 9f6fe965ec9baf4f9dd80476a83010094252b765 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Sat, 25 Jan 2020 21:54:25 +0100 Subject: [PATCH 02/37] =?UTF-8?q?Vollst=C3=A4ndiger=20Gradient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Achtung!!! Sehr Rechenaufwendig und im Fastrenderer noch nicht ordentlich nutzbar --- src/GUI/IntelliPhotoGui.cpp | 31 ++++++++++- src/GUI/IntelliPhotoGui.h | 4 ++ src/Layer/PaintingArea.cpp | 7 ++- src/Layer/PaintingArea.h | 1 + src/Tool/IntelliToolGradient.cpp | 91 ++++++++++++++++++++++++++------ src/Tool/IntelliToolGradient.h | 7 ++- 6 files changed, 122 insertions(+), 19 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d76722a..d3ab832 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -20,6 +20,7 @@ IntelliPhotoGui::IntelliPhotoGui(){ setIntelliStyle(); // Size the app resize(600,600); + showMaximized(); setDefaultValues(); } @@ -241,11 +242,13 @@ void IntelliPhotoGui::slotSetActiveLayer(){ void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ paintingArea->setRenderSettings(true); + FastRendererLabel->setText("Fast Render: On"); UpdateGui(); } void IntelliPhotoGui::slotUpdateRenderSettingsOff(){ paintingArea->setRenderSettings(false); + FastRendererLabel->setText("Fast Render: Off"); UpdateGui(); } @@ -299,6 +302,11 @@ void IntelliPhotoGui::slotCreateFloodFillTool(){ paintingArea->createFloodFillTool(); } +void IntelliPhotoGui::slotCreateGradientTool(){ + GradientButton->setChecked(true); + paintingArea->createGradientTool(); +} + // Open an about dialog void IntelliPhotoGui::slotAboutDialog(){ // Window title and text to display @@ -520,6 +528,10 @@ void IntelliPhotoGui::createActions(){ connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); + actionCreateGradientTool = new QAction(tr("&Gradient"),this); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); + // Create about action and tie to IntelliPhotoGui::about() actionAboutDialog = new QAction(tr("&About"), this); actionAboutDialog->setShortcut(Qt::Key_F2); @@ -539,6 +551,9 @@ void IntelliPhotoGui::createActions(){ connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool())); + connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool())); + connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool())); @@ -621,7 +636,8 @@ void IntelliPhotoGui::createMenus(){ //Attach all Tool Creation Actions toolCreationMenu = new QMenu(tr("&Drawingtools"), this); toolCreationMenu->addAction(actionCreateCircleTool); - toolCreationMenu->addAction(actionCreateFloodFillTool); + toolCreationMenu->addAction(actionCreateFloodFillTool); + toolCreationMenu->addAction(actionCreateGradientTool); toolCreationMenu->addAction(actionCreateLineTool); toolCreationMenu->addAction(actionCreatePenTool); toolCreationMenu->addAction(actionCreatePlainTool); @@ -689,6 +705,13 @@ void IntelliPhotoGui::createGui(){ FloodFillButton->setIconSize(Buttonsize); FloodFillButton->setCheckable(true); + preview = QPixmap(":/Icons/Buttons/icons/icon.png"); + GradientButton = new QPushButton(); + GradientButton->setFixedSize(Buttonsize); + GradientButton->setIcon(preview); + GradientButton->setIconSize(Buttonsize); + GradientButton->setCheckable(true); + preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); LineButton = new QPushButton(); LineButton->setFixedSize(Buttonsize); @@ -787,6 +810,10 @@ void IntelliPhotoGui::createGui(){ QString String = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height()); dimCanvas->setText(String); + FastRendererLabel = new QLabel(); + FastRendererLabel->setFixedSize(Buttonsize.width() * 2 + 15,(Buttonsize.height() * 2) / 3); + FastRendererLabel->setText("Fast Render: On"); + ScrollArea = new QScrollArea(this); ScrollArea->setBackgroundRole(QPalette::Dark); ScrollArea->setWidget(paintingArea); @@ -802,6 +829,7 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(PlainButton,3,2,1,1); mainLayout->addWidget(PolygonButton,3,3,1,1); mainLayout->addWidget(RectangleButton,4,2,1,1); + mainLayout->addWidget(GradientButton,4,3,1,1); mainLayout->addWidget(WidthLine,5,2,1,2); mainLayout->addWidget(EditLineWidth,6,2,1,2); mainLayout->addWidget(innerAlphaLine,7,2,1,2); @@ -813,6 +841,7 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2); mainLayout->addWidget(dimActive,13,2,1,2); mainLayout->addWidget(dimCanvas,14,2,1,2); + mainLayout->addWidget(FastRendererLabel,15,2,1,2); mainLayout->setHorizontalSpacing(0); } diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 0ea5bc3..25f6145 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -85,6 +85,7 @@ void slotCreateRectangleTool(); void slotCreateCircleTool(); void slotCreatePolygonTool(); void slotCreateFloodFillTool(); +void slotCreateGradientTool(); void slotAboutDialog(); @@ -128,6 +129,7 @@ const QSize Buttonsize = QSize(35,35); //buttons used for gui QPushButton* CircleButton; QPushButton* FloodFillButton; +QPushButton* GradientButton; QPushButton* LineButton; QPushButton* PenButton; QPushButton* PlainButton; @@ -144,6 +146,7 @@ QLabel* WidthLine; QLabel* innerAlphaLine; QLabel* ActiveLayerLine; QLabel* ActiveLayerImageLabel; +QLabel* FastRendererLabel; //scroll area to display canvas QScrollArea* ScrollArea; @@ -192,6 +195,7 @@ QAction* actionCreateRectangleTool; QAction* actionCreateCircleTool; QAction* actionCreatePolygonTool; QAction* actionCreateFloodFillTool; +QAction* actionCreateGradientTool; // dimension actions QAction* actionChangeDim; diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 8df8ffe..1b4236b 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -39,7 +39,7 @@ LayerObject::LayerObject(const LayerObject& layer){ PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) : QLabel(parent){ - this->Tool = new IntelliToolGradient(this,&colorPicker,&Toolsettings); + this->Tool = nullptr; this->setLayerDimensions(maxWidth, maxHeight); activeLayer = -1; } @@ -275,6 +275,11 @@ void PaintingArea::createFloodFillTool(){ Tool = new IntelliToolFloodFill(this, &colorPicker, &Toolsettings); } +void PaintingArea::createGradientTool(){ + delete this->Tool; + Tool = new IntelliToolGradient(this, &colorPicker, &Toolsettings); +} + int PaintingArea::getWidthOfActive(){ return this->layerBundle[static_cast(activeLayer)].width; } diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 9b81cb2..6aafff1 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -183,6 +183,7 @@ void createRectangleTool(); void createCircleTool(); void createPolygonTool(); void createFloodFillTool(); +void createGradientTool(); /*! * \brief The getWidthOfActive gets the horizontal dimensions of the active layer diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 4ab3699..40cc8bb 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -1,15 +1,12 @@ #include "IntelliToolGradient.h" +#include "Layer/PaintingArea.h" +#include "math.h" #include IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) : IntelliTool(Area, colorPicker, Toolsettings){ this->LineColor = QColor(0,0,0,255); this->hasMoved = false; - - A = QPoint(0,0); - B = QPoint(0,3); - VectorAB = QPoint(0,3); - computePixelColor(QPoint(2,1)); } IntelliToolGradient::~IntelliToolGradient(){ @@ -18,11 +15,14 @@ IntelliToolGradient::~IntelliToolGradient(){ void IntelliToolGradient::onMouseLeftPressed(int x, int y){ IntelliTool::onMouseLeftPressed(x,y); + doubleA[0] = static_cast(x); + doubleA[1] = static_cast(y); A = QPoint(x,y); B = QPoint(x,y); - VectorAB = QPoint(0,0); - //Canvas->image->drawPlain(colorPicker->getFirstColor); - //Canvas->image->drawPixel(A,LineColor); + VectorAB[0] = 0; + VectorAB[1] = 0; + Canvas->image->drawPlain(colorPicker->getFirstColor()); + Canvas->image->drawPixel(A,LineColor); } void IntelliToolGradient::onMouseRightPressed(int x, int y){ @@ -30,8 +30,12 @@ void IntelliToolGradient::onMouseRightPressed(int x, int y){ } void IntelliToolGradient::onMouseLeftReleased(int x, int y){ - if(!hasMoved && A != B){ - //Canvas->image->drawPlain(colorPicker->getFirstColor); + if(hasMoved && A != B){ + for(int i = 0; i < activeLayer->height; i++){ + for(int j = 0; j < activeLayer->width; j++){ + computePixelColor(QPoint(i,j)); + } + } } IntelliTool::onMouseLeftReleased(x,y); } @@ -43,6 +47,15 @@ void IntelliToolGradient::onMouseRightReleased(int x, int y){ void IntelliToolGradient::onMouseMoved(int x, int y){ hasMoved = true; B = QPoint(x,y); + VectorAB[0] = static_cast(B.x() - A.x()); + VectorAB[1] = static_cast(B.y() - A.y()); + this->Canvas->image->drawPlain(Qt::transparent); + for(int i = 0; i < activeLayer->height; i++){ + for(int j = 0; j < activeLayer->width; j++){ + computePixelColor(QPoint(i,j)); + } + } + Canvas->image->drawLine(A,B,LineColor,1); IntelliTool::onMouseMoved(x,y); } @@ -51,11 +64,59 @@ void IntelliToolGradient::onWheelScrolled(int value){ } void IntelliToolGradient::computePixelColor(QPoint Point){ - QPoint NormalVector = QPoint(VectorAB.y(),(-1*VectorAB.x())); - Point = Point - (dotProduct((Point - A),NormalVector) / dotProduct(NormalVector,NormalVector)) * NormalVector; - qDebug() << Point.y(); + double NormalVector[2]; + NormalVector[0] = VectorAB[1]; + NormalVector[1] = (-1*VectorAB[0]); + double doublePoint[2]; + doublePoint[0] = static_cast(Point.x()); + doublePoint[1] = static_cast(Point.y()); + double doublePointSubA[2]; + doublePointSubA[0] = doublePoint[0] - doubleA[0]; + doublePointSubA[1] = doublePoint[1] - doubleA[1]; + double Perpendicular[2]; + double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); + double NormalDotNormal = dotProduct(NormalVector,NormalVector); + Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; + Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; + double VectorAPoint[2]; + VectorAPoint[0] = static_cast(Perpendicular[0] - doubleA[0]); + VectorAPoint[1] = static_cast(Perpendicular[1] - doubleA[1]); + double ratio; + if(((VectorAPoint[0] < 0 && VectorAB[0] < 0) || (VectorAPoint[0] > 0 && VectorAB[0] > 0)) && ((VectorAPoint[1] < 0 && VectorAB[1] < 0) || (VectorAPoint[1] > 0 && VectorAB[1] > 0))) + ratio = lenghtVector(VectorAPoint)/lenghtVector(VectorAB); + else{ + ratio = -1; + } + QColor computedColor; + if(ratio < 0){ + computedColor = colorPicker->getFirstColor(); + } + else if(ratio > 1){ + computedColor = colorPicker->getSecondColor(); + } + else{ + int red; + int green; + int blue; + int alpha; + int red2; + int green2; + int blue2; + int alpha2; + colorPicker->getFirstColor().getRgb(&red,&green,&blue,&alpha); + colorPicker->getSecondColor().getRgb(&red2,&green2,&blue2,&alpha2); + computedColor.setRed(static_cast(ratio * red2 + (1 - ratio) * red)); + computedColor.setGreen(static_cast(ratio * green2 + (1 - ratio) * green)); + computedColor.setBlue(static_cast(ratio * blue2 + (1 - ratio) * blue)); + computedColor.setAlpha(static_cast(ratio * alpha2 + (1 - ratio) * alpha)); + } + Canvas->image->drawPixel(Point,computedColor); } -float IntelliToolGradient::dotProduct(QPoint Vector1, QPoint Vector2){ - return static_cast(Vector1.x()*Vector2.x()+Vector1.y()*Vector2.y()); +double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ + return static_cast(Vector1[0]*Vector2[0]+Vector1[1]*Vector2[1]); +} + +double IntelliToolGradient::lenghtVector(double Vector[2]){ + return static_cast((std::sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); } diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h index 80424a1..2e3f0ad 100644 --- a/src/Tool/IntelliToolGradient.h +++ b/src/Tool/IntelliToolGradient.h @@ -6,7 +6,8 @@ class IntelliToolGradient : public IntelliTool{ private: QPoint A; QPoint B; - QPoint VectorAB; + double VectorAB[2]; + double doubleA[2]; QColor LineColor; bool hasMoved; @@ -58,7 +59,9 @@ public: void computePixelColor(QPoint Point); - float dotProduct(QPoint Vector1, QPoint Vector2); + double dotProduct(double Vector1[2], double Vector2[2]); + + double lenghtVector(double Vector[2]); }; #endif // INTELLITOOLGRADIENT_H From 710848307fce6c16deade5564bdf6b0393c10bee Mon Sep 17 00:00:00 2001 From: AshBastian Date: Sun, 26 Jan 2020 18:43:14 +0100 Subject: [PATCH 03/37] Gradient Fertig --- knownBugs.txt | 4 ++- src/Tool/IntelliToolGradient.cpp | 44 ++++++++++++++++++++------------ src/Tool/IntelliToolGradient.h | 6 ++++- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/knownBugs.txt b/knownBugs.txt index 8314056..54b8e59 100644 --- a/knownBugs.txt +++ b/knownBugs.txt @@ -1 +1,3 @@ -history tool doesnt load polygon data on undo iff project was loaded \ No newline at end of file +history tool doesnt load polygon data on undo iff project was loaded +history tool doesnt save delete Layer +Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720) \ No newline at end of file diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 40cc8bb..6a52a5f 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -21,7 +21,6 @@ void IntelliToolGradient::onMouseLeftPressed(int x, int y){ B = QPoint(x,y); VectorAB[0] = 0; VectorAB[1] = 0; - Canvas->image->drawPlain(colorPicker->getFirstColor()); Canvas->image->drawPixel(A,LineColor); } @@ -30,14 +29,13 @@ void IntelliToolGradient::onMouseRightPressed(int x, int y){ } void IntelliToolGradient::onMouseLeftReleased(int x, int y){ - if(hasMoved && A != B){ - for(int i = 0; i < activeLayer->height; i++){ - for(int j = 0; j < activeLayer->width; j++){ - computePixelColor(QPoint(i,j)); - } - } + if(hasMoved){ + computeGradientLayer(); + IntelliTool::onMouseLeftReleased(x,y); + } + else{ + IntelliTool::onMouseRightPressed(x,y); } - IntelliTool::onMouseLeftReleased(x,y); } void IntelliToolGradient::onMouseRightReleased(int x, int y){ @@ -49,12 +47,11 @@ void IntelliToolGradient::onMouseMoved(int x, int y){ B = QPoint(x,y); VectorAB[0] = static_cast(B.x() - A.x()); VectorAB[1] = static_cast(B.y() - A.y()); + NormalVector[0] = VectorAB[1]; + NormalVector[1] = (-1*VectorAB[0]); + NormalDotNormal = dotProduct(NormalVector,NormalVector); this->Canvas->image->drawPlain(Qt::transparent); - for(int i = 0; i < activeLayer->height; i++){ - for(int j = 0; j < activeLayer->width; j++){ - computePixelColor(QPoint(i,j)); - } - } + computeGradientLayer(); Canvas->image->drawLine(A,B,LineColor,1); IntelliTool::onMouseMoved(x,y); } @@ -64,9 +61,6 @@ void IntelliToolGradient::onWheelScrolled(int value){ } void IntelliToolGradient::computePixelColor(QPoint Point){ - double NormalVector[2]; - NormalVector[0] = VectorAB[1]; - NormalVector[1] = (-1*VectorAB[0]); double doublePoint[2]; doublePoint[0] = static_cast(Point.x()); doublePoint[1] = static_cast(Point.y()); @@ -75,7 +69,6 @@ void IntelliToolGradient::computePixelColor(QPoint Point){ doublePointSubA[1] = doublePoint[1] - doubleA[1]; double Perpendicular[2]; double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); - double NormalDotNormal = dotProduct(NormalVector,NormalVector); Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; double VectorAPoint[2]; @@ -120,3 +113,20 @@ double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ double IntelliToolGradient::lenghtVector(double Vector[2]){ return static_cast((std::sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); } + +void IntelliToolGradient::computeGradientLayer(){ + bool switched = false; + if(Canvas->image->isFastRendering()){ + switched = true; + Canvas->image->updateRendererSetting(false); + } + qDebug() << activeLayer->width << activeLayer->height; + for(int i = 0; i < activeLayer->height; i++){ + for(int j = 0; j < activeLayer->width; j++){ + computePixelColor(QPoint(i,j)); + } + } + if(switched){ + Canvas->image->updateRendererSetting(true); + } +} diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h index 2e3f0ad..50ee96b 100644 --- a/src/Tool/IntelliToolGradient.h +++ b/src/Tool/IntelliToolGradient.h @@ -6,8 +6,10 @@ class IntelliToolGradient : public IntelliTool{ private: QPoint A; QPoint B; - double VectorAB[2]; double doubleA[2]; + double VectorAB[2]; + double NormalVector[2]; + double NormalDotNormal; QColor LineColor; bool hasMoved; @@ -62,6 +64,8 @@ public: double dotProduct(double Vector1[2], double Vector2[2]); double lenghtVector(double Vector[2]); + + void computeGradientLayer(); }; #endif // INTELLITOOLGRADIENT_H From 657eba80f2131e408f1ff748108f2c4b6332565b Mon Sep 17 00:00:00 2001 From: AshBastian Date: Sun, 26 Jan 2020 18:57:30 +0100 Subject: [PATCH 04/37] Update Bug --- knownBugs.txt | 3 ++- src/Tool/IntelliToolGradient.cpp | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/knownBugs.txt b/knownBugs.txt index 54b8e59..824bf08 100644 --- a/knownBugs.txt +++ b/knownBugs.txt @@ -1,3 +1,4 @@ history tool doesnt load polygon data on undo iff project was loaded history tool doesnt save delete Layer -Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720) \ No newline at end of file +Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720) +Heap block at 0000000025422990 modified at 0000000025422A28 past requested size of 88 \ No newline at end of file diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 6a52a5f..2b36494 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -120,10 +120,9 @@ void IntelliToolGradient::computeGradientLayer(){ switched = true; Canvas->image->updateRendererSetting(false); } - qDebug() << activeLayer->width << activeLayer->height; for(int i = 0; i < activeLayer->height; i++){ for(int j = 0; j < activeLayer->width; j++){ - computePixelColor(QPoint(i,j)); + computePixelColor(QPoint(j,i)); } } if(switched){ From eeceedab8ce5357bf9d5743c4f0e9beb0e05465e Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Sun, 26 Jan 2020 19:10:45 +0100 Subject: [PATCH 05/37] =?UTF-8?q?hotfix,=20rechtsklick=20bringte=20das=20p?= =?UTF-8?q?rogramm=20zum=20abst=C3=BCrzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Tool/IntelliToolGradient.cpp | 27 +++++----- src/Tool/IntelliToolGradient.h | 93 ++++++++++++++++---------------- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 2b36494..216e5f2 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -29,13 +29,10 @@ void IntelliToolGradient::onMouseRightPressed(int x, int y){ } void IntelliToolGradient::onMouseLeftReleased(int x, int y){ - if(hasMoved){ + if(hasMoved && this->isDrawing){ computeGradientLayer(); IntelliTool::onMouseLeftReleased(x,y); } - else{ - IntelliTool::onMouseRightPressed(x,y); - } } void IntelliToolGradient::onMouseRightReleased(int x, int y){ @@ -43,16 +40,18 @@ void IntelliToolGradient::onMouseRightReleased(int x, int y){ } void IntelliToolGradient::onMouseMoved(int x, int y){ - hasMoved = true; - B = QPoint(x,y); - VectorAB[0] = static_cast(B.x() - A.x()); - VectorAB[1] = static_cast(B.y() - A.y()); - NormalVector[0] = VectorAB[1]; - NormalVector[1] = (-1*VectorAB[0]); - NormalDotNormal = dotProduct(NormalVector,NormalVector); - this->Canvas->image->drawPlain(Qt::transparent); - computeGradientLayer(); - Canvas->image->drawLine(A,B,LineColor,1); + if(this->isDrawing){ + hasMoved = true; + B = QPoint(x,y); + VectorAB[0] = static_cast(B.x() - A.x()); + VectorAB[1] = static_cast(B.y() - A.y()); + NormalVector[0] = VectorAB[1]; + NormalVector[1] = (-1*VectorAB[0]); + NormalDotNormal = dotProduct(NormalVector,NormalVector); + this->Canvas->image->drawPlain(Qt::transparent); + computeGradientLayer(); + Canvas->image->drawLine(A,B,LineColor,1); + } IntelliTool::onMouseMoved(x,y); } diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h index 50ee96b..01b0159 100644 --- a/src/Tool/IntelliToolGradient.h +++ b/src/Tool/IntelliToolGradient.h @@ -3,6 +3,53 @@ #include "IntelliTool.h" class IntelliToolGradient : public IntelliTool{ + +public: + IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); + + virtual ~IntelliToolGradient() override; + + /*! + * \brief A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseRightPressed(int x, int y) override; + + /*! + * \brief A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseRightReleased(int x, int y) override; + + /*! + * \brief A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseLeftPressed(int x, int y) override; + + /*! + * \brief A function managing the left click Released of a Mouse. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ + virtual void onMouseLeftReleased(int x, int y) override; + + /*! + * \brief A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes! + * \param value - The absolute the scroll has changed. + */ + virtual void onWheelScrolled(int value) override; + + /*! + * \brief A function managing the mouse moved event. Call this in child classes! + * \param x - The x coordinate of the new mouse position. + * \param y - The y coordinate of the new mouse position. + */ + virtual void onMouseMoved(int x, int y) override; + private: QPoint A; QPoint B; @@ -13,52 +60,6 @@ private: QColor LineColor; bool hasMoved; -public: - IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); - - ~IntelliToolGradient(); - - /*! - * \brief A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseRightPressed(int x, int y); - - /*! - * \brief A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseRightReleased(int x, int y); - - /*! - * \brief A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseLeftPressed(int x, int y); - - /*! - * \brief A function managing the left click Released of a Mouse. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseLeftReleased(int x, int y); - - /*! - * \brief A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes! - * \param value - The absolute the scroll has changed. - */ - virtual void onWheelScrolled(int value); - - /*! - * \brief A function managing the mouse moved event. Call this in child classes! - * \param x - The x coordinate of the new mouse position. - * \param y - The y coordinate of the new mouse position. - */ - virtual void onMouseMoved(int x, int y); - void computePixelColor(QPoint Point); double dotProduct(double Vector1[2], double Vector2[2]); From 2a37143835cb9ec311c70852da871a4e35e18af9 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Mon, 27 Jan 2020 18:58:31 +0100 Subject: [PATCH 06/37] input dialog change --- src/GUI/IntelliInputDialog.h | 86 +++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index 7775c0d..9d89ca7 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -9,35 +9,119 @@ #include #include +/*! + * \brief The IntelliInputDialog class is a customized Input Dialog to get Integers + */ class IntelliInputDialog : public QDialog { Q_OBJECT public: + /*! + * \brief IntelliInputDialog is the baisc constructor to for the InputDialog + * \param Title - Title of the Input Dialog. + * \param Label - A Label for the Iput Dialog, to show further information. + * \param value - The standart value in the Input Box. + * \param minValue - The minimal value to read. + * \param maxValue - The maximal value to read. + * \param step - The step size of Values. + * \param ok - A check if the input was okay + */ IntelliInputDialog(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr); - +/*! + * \brief getInt is a static funktion ยด, which creates an Input Dialog and gets an Integer. + * \param Title - Title of the Input Dialog. + * \param Label - A Label for the Iput Dialog, to show further information. + * \param value - The standart value in the Input Box. + * \param minValue - The minimal value to read. + * \param maxValue - The maximal value to read. + * \param step - The step size of Values. + * \param ok - A check if the input was okay + * \return + */ 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: +/*! + * \brief slotCloseEvent is a slot for catching the close Event. + */ void slotCloseEvent(); + +/*! + * \brief slotEingabe is a slot for catching the Input Event. + */ void slotEingabe(); private: +/*! + * \brief createInputBox creates an Input Box for reading values. + * \param Title - Title of the Input Dialog. + * \param Label - A Label for the Iput Dialog, to show further information. + * \param value - The standart value in the Input Box. + * \param minValue - The minimal value to read. + * \param maxValue - The maximal value to read. + * \param step - The step size of Values. + */ void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1); + +/*! + * \brief createConnections connects the close and Eingabe slot. + */ void createConnections(); + +/*! + * \brief setInputBoxStyle + */ void setInputBoxStyle(); +/*! + * \brief valueInt the variable where the input is saved. + */ int valueInt; +/*! + * \brief Layout to place als gui event onto. + */ QGridLayout* Layout; + +/*! + * \brief ButtonBox is a gui elment for the button. + */ QDialogButtonBox* ButtonBox; + +/*! + * \brief notClosed saves the value, if the InputDialog is closed. + */ bool* notClosed; +/*! + * \brief Linesize to standarize the line size. + */ const QSize Linesize = QSize(150,20); + +/*! + * \brief Buttonsize to standarize the button size. + */ const QSize Buttonsize = QSize(72,20); + +/*! + * \brief InputLabel a gui element for a label. + */ QLabel* InputLabel; + +/*! + * \brief Input a gui element for a SpinBox. + */ QSpinBox* Input; + +/*! + * \brief okButton a gui element for the ok Button. + */ QPushButton* okButton; + +/*! + * \brief cancelButton a gui element for the cancel button. + */ QPushButton* cancelButton; }; From 805c67edc55e3881741797bab3bcee363cf0c2e6 Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 27 Jan 2020 19:07:16 +0100 Subject: [PATCH 07/37] Fixed a bug where sqrt wasn't found sqrt is a math library function, not in standard lib --- src/Tool/IntelliToolGradient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 216e5f2..8f33fb4 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -110,7 +110,7 @@ double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ } double IntelliToolGradient::lenghtVector(double Vector[2]){ - return static_cast((std::sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); + return static_cast((sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); } void IntelliToolGradient::computeGradientLayer(){ From 61fdc099ecf8a5e1e0ffc63d68a4d32d762781d5 Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 27 Jan 2020 19:08:44 +0100 Subject: [PATCH 08/37] Updated CPPCheck Errors --- cppcheck_config.txt | 14 +++++++++++++- cppcheck_errors.txt | 34 +++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/cppcheck_config.txt b/cppcheck_config.txt index 008b5ba..450c488 100644 --- a/cppcheck_config.txt +++ b/cppcheck_config.txt @@ -226,7 +226,10 @@ src/Layer/PaintingArea.cpp:18:0: information: Include file: "Tool/IntelliToolFlo src/Layer/PaintingArea.cpp:19:0: information: Include file: "Tool/IntelliToolPolygon.h" not found. [missingInclude] ^ -src/Layer/PaintingArea.cpp:20:0: information: Include file: "GUI/IntelliPhotoGui.h" not found. [missingInclude] +src/Layer/PaintingArea.cpp:20:0: information: Include file: "Tool/IntelliToolGradient.h" not found. [missingInclude] + +^ +src/Layer/PaintingArea.cpp:21:0: information: Include file: "GUI/IntelliPhotoGui.h" not found. [missingInclude] ^ src/Tool/IntelliTool.h:4:0: information: Include file: "IntelliHelper/IntelliColorPicker.h" not found. [missingInclude] @@ -276,6 +279,15 @@ src/Tool/IntelliToolFloodFill.cpp:5:0: information: Include file: n ^ 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/IntelliToolGradient.cpp:2:0: information: Include file: "Layer/PaintingArea.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolGradient.cpp:3:0: information: Include file: "math.h" not found. [missingInclude] + +^ +src/Tool/IntelliToolGradient.cpp:4: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] diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index 3e6f39d..dc71700 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -7,21 +7,33 @@ src/IntelliHelper/IntelliDatamanager.cpp:66:53: note: Shadowed declaration src/IntelliHelper/IntelliDatamanager.cpp:89:33: note: Shadow variable int red, green, blue, alpha; ^ -src/Layer/PaintingArea.cpp:22:14: warning: Member variable 'LayerObject::image' is not initialized in the constructor. [uninitMemberVar] +src/Layer/PaintingArea.cpp:23:14: warning: Member variable 'LayerObject::image' is not initialized in the constructor. [uninitMemberVar] LayerObject::LayerObject(){ ^ -src/Layer/PaintingArea.cpp:22:14: warning: Member variable 'LayerObject::width' is not initialized in the constructor. [uninitMemberVar] +src/Layer/PaintingArea.cpp:23:14: warning: Member variable 'LayerObject::width' is not initialized in the constructor. [uninitMemberVar] LayerObject::LayerObject(){ ^ -src/Layer/PaintingArea.cpp:22:14: warning: Member variable 'LayerObject::height' is not initialized in the constructor. [uninitMemberVar] +src/Layer/PaintingArea.cpp:23:14: warning: Member variable 'LayerObject::height' is not initialized in the constructor. [uninitMemberVar] LayerObject::LayerObject(){ ^ -src/Layer/PaintingArea.cpp:22:14: warning: Member variable 'LayerObject::widthOffset' is not initialized in the constructor. [uninitMemberVar] +src/Layer/PaintingArea.cpp:23:14: warning: Member variable 'LayerObject::widthOffset' is not initialized in the constructor. [uninitMemberVar] LayerObject::LayerObject(){ ^ -src/Layer/PaintingArea.cpp:22:14: warning: Member variable 'LayerObject::heightOffset' is not initialized in the constructor. [uninitMemberVar] +src/Layer/PaintingArea.cpp:23:14: warning: Member variable 'LayerObject::heightOffset' is not initialized in the constructor. [uninitMemberVar] LayerObject::LayerObject(){ ^ +src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::doubleA' is not initialized in the constructor. [uninitMemberVar] +IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) + ^ +src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::VectorAB' is not initialized in the constructor. [uninitMemberVar] +IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) + ^ +src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::NormalVector' is not initialized in the constructor. [uninitMemberVar] +IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) + ^ +src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::NormalDotNormal' is not initialized in the constructor. [uninitMemberVar] +IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) + ^ src/tst_unittest.cpp:1370:0: style: The function 'bench_Circle_fullDraw' is never used. [unusedFunction] ^ @@ -142,22 +154,22 @@ src/tst_unittest.cpp:1138:0: style: The function 'bench_setPolygon' is never use src/mainUnitTest.cpp:118:0: style: The function 'cleanupTestCase' is never used. [unusedFunction] ^ -src/GUI/IntelliPhotoGui.cpp:27:0: style: The function 'closeEvent' is never used. [unusedFunction] +src/GUI/IntelliPhotoGui.cpp:28:0: style: The function 'closeEvent' is never used. [unusedFunction] ^ src/mainUnitTest.cpp:113:0: style: The function 'initTestCase' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:324:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:329:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:305:0: style: The function 'mousePressEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:310:0: style: The function 'mousePressEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:337:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:342:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:367:0: style: The function 'paintEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:372:0: style: The function 'paintEvent' is never used. [unusedFunction] ^ src/Layer/PaintingArea.cpp:223:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] @@ -316,7 +328,7 @@ src/mainUnitTest.cpp:146:0: style: The function 'test_setLayerUp' is never used. src/mainUnitTest.cpp:144:0: style: The function 'test_setPolygon' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:352:0: style: The function 'wheelEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:357: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 3a13904eead43f264957d5962ec2a66f44e3f0e5 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Tue, 28 Jan 2020 10:41:54 +0100 Subject: [PATCH 09/37] added comments but gui --- src/GUI/IntelliPhotoGui.cpp | 16 +- src/Image/IntelliImage.h | 12 + src/IntelliHelper/IntelliDatamanager.cpp | 4 +- src/IntelliHelper/IntelliDatamanager.h | 13 + .../IntelliRenderSettings.h.autosave | 34 ++ .../IntelliToolsettings.h.autosave | 59 +++ src/Layer/PaintingArea.cpp | 24 +- src/Layer/PaintingArea.h | 101 +++- src/Layer/PaintingArea.h.autosave | 481 ++++++++++++++++++ src/Tool/IntelliTool.h | 18 + src/Tool/IntelliToolGradient.cpp | 1 + src/Tool/IntelliToolGradient.cpp.autosave | 131 +++++ src/Tool/IntelliToolGradient.h | 72 ++- src/Tool/IntelliToolPolygon.cpp | 8 +- 14 files changed, 935 insertions(+), 39 deletions(-) create mode 100644 src/IntelliHelper/IntelliRenderSettings.h.autosave create mode 100644 src/IntelliHelper/IntelliToolsettings.h.autosave create mode 100644 src/Layer/PaintingArea.h.autosave create mode 100644 src/Tool/IntelliToolGradient.cpp.autosave diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d3ab832..7166490 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -141,7 +141,7 @@ void IntelliPhotoGui::slotChangeDim(){ // Change dimension if (ok1&&ok2) { - paintingArea->setLayerDimensions(width,height); + paintingArea->setCanvasDimensions(width,height); UpdateGui(); } } @@ -153,7 +153,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 - int layerNumber = IntelliInputDialog::getInt("Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); + int layerNumber = IntelliInputDialog::getInt("Delete Layer", "Number:", paintingArea->getIndexOfActiveLayer() + 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); // Create New Layer if(ok1) { @@ -169,7 +169,7 @@ void IntelliPhotoGui::slotSetActiveAlpha(){ // the next tr is the text to display // Define the standard Value, min, max, step and ok button - int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); + int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getIndexOfActiveLayer() + 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); // "New Alpha" is the title of the window int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2); @@ -188,7 +188,7 @@ void IntelliPhotoGui::slotSetPolygon(){ // "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("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); + int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getIndexOfActiveLayer() + 1, 1, static_cast(paintingArea->layerBundle.size()), 1, &ok1); if (ok1) { @@ -784,7 +784,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->getIndexOfActiveLayer() + 1); ActiveLayerLine->setText(string); ActiveLayerLine->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3); @@ -922,7 +922,7 @@ void IntelliPhotoGui::setToolWidth(int value){ } void IntelliPhotoGui::UpdateGui(){ - QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); + QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1); ActiveLayerLine->setText(string); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); @@ -947,8 +947,8 @@ void IntelliPhotoGui::UpdateGui(){ 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); + (paintingArea->getIndexOfActiveLayer())].width).arg(paintingArea->layerBundle[static_cast + (paintingArea->getIndexOfActiveLayer())].height); dimActive->setText(string); } else{ diff --git a/src/Image/IntelliImage.h b/src/Image/IntelliImage.h index ac6c3bc..1c114ca 100644 --- a/src/Image/IntelliImage.h +++ b/src/Image/IntelliImage.h @@ -171,10 +171,22 @@ virtual QImage getImageData(); */ virtual void setImageData(const QImage& newData); +/*! + * \brief getWidth returns the width of the Image. + * \return The width of the Image in pixel. + */ virtual int getWidth() const; +/*! + * \brief getHeight returns the height of the Image. + * \return The height of the Image in pixel. + */ virtual int getHeight() const; +/*! + * \brief isFastRendering returns if the Image is in fast rendering mode. + * \return True if the Image is fast rendered, flase otherwiese. + */ virtual bool isFastRendering() const; }; diff --git a/src/IntelliHelper/IntelliDatamanager.cpp b/src/IntelliHelper/IntelliDatamanager.cpp index a704f64..e82e378 100644 --- a/src/IntelliHelper/IntelliDatamanager.cpp +++ b/src/IntelliHelper/IntelliDatamanager.cpp @@ -61,7 +61,7 @@ bool IntelliDatamanager::loadProject(PaintingArea* Canvas, QString filePath){ in >> widthCanvas >> heightCanvas; in >> numberOffLayers; - Canvas->setLayerDimensions(widthCanvas, heightCanvas); + Canvas->setCanvasDimensions(widthCanvas, heightCanvas); for(int i = 0; i> width >> height >> widthOffset >> heightOffset >> alpha; @@ -88,7 +88,7 @@ bool IntelliDatamanager::loadProject(PaintingArea* Canvas, QString filePath){ for(int k = 0; k> red >> green >> blue >> alpha; - Canvas->setPixelToActive(QColor(red, green, blue, alpha), QPoint(j, k)); + Canvas->drawPixelOntoActive(QColor(red, green, blue, alpha), QPoint(j, k)); } } } diff --git a/src/IntelliHelper/IntelliDatamanager.h b/src/IntelliHelper/IntelliDatamanager.h index 777e591..9da93a4 100644 --- a/src/IntelliHelper/IntelliDatamanager.h +++ b/src/IntelliHelper/IntelliDatamanager.h @@ -8,7 +8,20 @@ class PaintingArea; namespace IntelliDatamanager { +/*! + * \brief loadProject loads a project from a file, closes current project. + * \param Canvas - Reference to the used Canvas. + * \param filePath - Filepath to the project which should be opened. + * \return True if everything worked, false otherwise. + */ bool loadProject(PaintingArea* Canvas, QString filePath = "unnamed.idf"); + +/*! + * \brief saveProject saves the current project to a file. + * \param Canvas - Reference to the used Canvas. + * \param filePath - Filepath to the project which should be saved. + * \return True if everything worked, false otherwise. + */ bool saveProject(PaintingArea* Canvas, QString filePath = "unnamed.idf"); } diff --git a/src/IntelliHelper/IntelliRenderSettings.h.autosave b/src/IntelliHelper/IntelliRenderSettings.h.autosave new file mode 100644 index 0000000..2fc3afb --- /dev/null +++ b/src/IntelliHelper/IntelliRenderSettings.h.autosave @@ -0,0 +1,34 @@ +#ifndef INTELLIRENDERSETTINGS_H +#define INTELLIRENDERSETTINGS_H + +//for unit testing +class UnitTest; + +/*! + * \brief The IntelliRenderSettings class which manages the render Settings. + */ +class IntelliRenderSettings +{ +friend UnitTest; +public: +IntelliRenderSettings(); + +/*! + * \brief setFastRendering sets fastRendering to Updatedsetting. + * \param Updatedsetting - Represents the new value for the Fast Rendering Flag. + */ +void setFastRendering(bool Updatedsetting); +/*! + * \brief The getfastRenderer gets the value of the flag for the fastRenderer setting. + * \return Returns true if fastRenderer is active else false + */ +bool isFastRenderering() const; + +private: +/*! + * \brief fastRenderering the state of the project, in relation the the render setting. + */ +bool fastRenderering = true; +}; + +#endif diff --git a/src/IntelliHelper/IntelliToolsettings.h.autosave b/src/IntelliHelper/IntelliToolsettings.h.autosave new file mode 100644 index 0000000..b251aa9 --- /dev/null +++ b/src/IntelliHelper/IntelliToolsettings.h.autosave @@ -0,0 +1,59 @@ +#ifndef INTELLITOOLSETTINGS_H +#define INTELLITOOLSETTINGS_H + +//for unit testing +class UnitTest; +/*! + * \brief The IntelliToolsettings class managing the settings of the tools, independent of an existing tool. + */ +class IntelliToolsettings { +friend UnitTest; +public: +/*! + * \brief IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics. + */ +IntelliToolsettings(); + +/*! + * \brief ~IntelliToolsettings - basic destructor. + */ +virtual ~IntelliToolsettings(); + +/*! + * \brief getLineWidth returns the width attribute of the line. + * \return returns the width attribute as integer. + */ +int getLineWidth() const; + +/*! + * \brief setLineWidth sets the width attribute of the line. + * \param LineWidth - the future width of the line + */ +void setLineWidth(int LineWidth); + +/*! + * \brief getInnerAlpha returns the inner alpha value. + * \return returns the inner alpha attribute as integer. + */ +int getInnerAlpha() const; + +/*! + * \brief setInnerAlpha sets the inner alpha attribute of the Tool. + * \param innerAlpha - the future inner alpha of the Tool. + */ +void setInnerAlpha(int innerAlpha); + +private: + +/*! + * \brief lineWidth attribute of a Tool. + */ +int lineWidth; + +/*! + * \brief innerAlpha aattribute of a Tool. + */ +int innerAlpha; +}; + +#endif diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 1b4236b..64f6134 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -40,7 +40,7 @@ LayerObject::LayerObject(const LayerObject& layer){ PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) : QLabel(parent){ this->Tool = nullptr; - this->setLayerDimensions(maxWidth, maxHeight); + this->setCanvasDimensions(maxWidth, maxHeight); activeLayer = -1; } @@ -69,7 +69,7 @@ bool PaintingArea::getRenderSettings(){ return this->renderSettings.isFastRenderering(); } -void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){ +void PaintingArea::setCanvasDimensions(int maxWidth, int maxHeight){ //set standart parameter this->maxWidth = maxWidth; this->maxHeight = maxHeight; @@ -83,7 +83,7 @@ void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){ } -void PaintingArea::setPixelToActive(QColor color, QPoint point){ +void PaintingArea::drawPixelOntoActive(QColor color, QPoint point){ layerBundle[static_cast(activeLayer)].image->drawPixel(point, color); } @@ -296,11 +296,11 @@ int PaintingArea::getMaxHeight(){ return this->maxHeight; } -ImageType PaintingArea::getTypeOfImageRealLayer(){ +ImageType PaintingArea::getTypeOfImageActiveLayer(){ return this->layerBundle[static_cast(activeLayer)].image->getTypeOfImage(); } -std::vector PaintingArea::getPolygonDataOfRealLayer(){ +std::vector PaintingArea::getPolygonDataOfActiveLayer(){ return this->layerBundle[static_cast(activeLayer)].image->getPolygonData(); } @@ -463,7 +463,7 @@ IntelliTool* PaintingArea::copyActiveTool(){ } } -int PaintingArea::getNumberOfActiveLayer(){ +int PaintingArea::getIndexOfActiveLayer(){ return activeLayer; } @@ -510,14 +510,18 @@ void PaintingArea::updateTools(){ void PaintingArea::historyadd(){ - if (++historyPresent == 100) { + historyPresent++; + if (historyPresent == 100) { historyPresent = 0; } historyMaxFuture = historyPresent; - if (historyPresent == historyMaxPast) - if (++historyMaxPast == 100) + if (historyPresent == historyMaxPast){ + historyMaxPast++; + if (historyMaxPast == 100){ historyMaxPast = 0; - history[static_cast(historyPresent)] = layerBundle; + } + } + history[static_cast(historyPresent)] = layerBundle; } void PaintingArea::historyGoBack(){ diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 6aafff1..9dd6799 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -176,36 +176,91 @@ void colorPickerSetSecondColor(); */ void colorPickerSwapColors(); +/*! + * \brief createPenTool creates a Pen Tool. + */ void createPenTool(); + +/*! + * \brief createPlainTool creates a Plain Tool. + */ void createPlainTool(); + +/*! + * \brief createLineTool creates a Line Tool. + */ void createLineTool(); + +/*! + * \brief createRectangleTool creates a Rectangle Tool. + */ void createRectangleTool(); + +/*! + * \brief createCircleTool creates a Circle Tool. + */ void createCircleTool(); + +/*! + * \brief createPolygonTool creates a Polygon Tool. + */ void createPolygonTool(); + +/*! + * \brief createFloodFillTool creates a Floodfill Tool. + */ void createFloodFillTool(); + +/*! + * \brief createGradientTool creates a Gradient Tool. + */ void createGradientTool(); /*! - * \brief The getWidthOfActive gets the horizontal dimensions of the active layer - * \return Returns the horizontal pixle count of the active layer + * \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 + * \brief The getHeightOfActive gets the vertical dimensions of the active layer. + * \return Returns the vertical pixle count of the active layer. */ int getHeightOfActive(); +/*! + * \brief getMaxWidth gets the max width of the Canvas. + * \return return the width of the Canvas. + */ int getMaxWidth(); +/*! + * \brief getMaxHeight gets the max height of the Canvas. + * \return return the height of the Canvas. + */ int getMaxHeight(); -ImageType getTypeOfImageRealLayer(); +/*! + * \brief getTypeOfImageActiveLayer get the type of the active Layer. + * \return returns the image type of the active layer. + */ +ImageType getTypeOfImageActiveLayer(); -std::vector getPolygonDataOfRealLayer(); +/*! + * \brief getPolygonDataOfActiveLayer get the polygon data of the active Layer. + * \return return the polygon data of the active Layer. + */ +std::vector getPolygonDataOfActiveLayer(); -int getNumberOfActiveLayer(); +/*! + * \brief getIndexOfActiveLayer returns the index of athe active Layer. + * \return return the index of the active Layer. + */ +int getIndexOfActiveLayer(); +/*! + * \brief getImageOfActiveLayer returns the image of the active Layer. + * \return return the image of the active Layer. + */ IntelliImage* getImageOfActiveLayer(); /*! @@ -220,16 +275,44 @@ QImage getImageDataOfActiveLayer(); */ std::vector* getLayerBundle(); +/*! + * \brief Toolsettings - a class to manage Tool settings. + */ IntelliToolsettings Toolsettings; + +/*! + * \brief colorPicker a class to manage Tool color. + */ IntelliColorPicker colorPicker; +/*! + * \brief historyGoBack a function to return the previous state of the project. + */ void historyGoBack(); + +/*! + * \brief historyGoForward a function to undo the return of the previous state of the project. + */ void historyGoForward(); -void setLayerDimensions(int maxWidth, int maxHeight); +/*! + * \brief setCanvasDimensions sets the dimension of the Canvas + * \param maxWidth - the width of the Canvas. + * \param maxHeight - the height of the Canvas. + */ +void setCanvasDimensions(int maxWidth, int maxHeight); -void setPixelToActive(QColor color, QPoint point); +/*! + * \brief drawPixelOntoActive draws a pixel onto the image data of the active Layer. + * \param color - the color of the Pixel, which should be created. + * \param point - the Pixelposition. + */ +void drawPixelOntoActive(QColor color, QPoint point); +/*! + * \brief setPolygonDataToActive sets polygondata to the active Layer. + * \param points - the points of the polygon data. + */ void setPolygonDataToActive(std::vector points); public slots: /*! diff --git a/src/Layer/PaintingArea.h.autosave b/src/Layer/PaintingArea.h.autosave new file mode 100644 index 0000000..41d98db --- /dev/null +++ b/src/Layer/PaintingArea.h.autosave @@ -0,0 +1,481 @@ + +#ifndef PaintingArea_H +#define PaintingArea_H + +#include +#include +#include +#include +#include +#include +#include "Image/IntelliImage.h" +#include "Image/IntelliRasterImage.h" +#include "Image/IntelliShapedImage.h" +#include "Tool/IntelliTool.h" +#include "IntelliHelper/IntelliColorPicker.h" + +//for unit testing +class UnitTest; +class IntelliPhotoGui; +/*! + * \brief The LayerObject struct holds all the information needed to construct a layer + */ +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; + + LayerObject(); + + LayerObject(const LayerObject& layer); +}; + +/*! + * \brief The PaintingArea class manages the methods and stores information about the current painting area, which is the currently opened project + */ +class PaintingArea : public QLabel +{ +friend UnitTest; +// Declares our class as a QObject which is the base class +// for all Qt objects +// QObjects handle events +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 This deconstructor is used to clear up the memory and remove the currently active window + */ +~PaintingArea() override; + +/*! + * \brief setRenderSettings updates all Images to the new Rendersetting. + * \param isFastRenderingOn is the new given flag for the FastRenderer. + */ +void setRenderSettings(bool isFastRenderingOn); + +/*! + * \brief getRenderSettings updates all Images to the new Rendersetting. + * \param isFastRenderingOn is the new given flag for the FastRenderer. + */ +bool getRenderSettings(); + +/*! + * \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 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); + +/*! + * \brief deleteAllLayers deletes all layers + */ +void deleteAllLayers(); +/*! + * \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 alpha - Transparence of the layer + * \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, int alpha = 255, ImageType type = 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, ImageType type = ImageType::RASTERIMAGE); +/*! + * \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, bool isTool = false); +/*! + * \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 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 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 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(); + +/*! + * \brief createPenTool creates a Pen Tool. + */ +void createPenTool(); + +/*! + * \brief createPlainTool creates a Plain Tool. + */ +void createPlainTool(); + +/*! + * \brief createLineTool creates a Line Tool. + */ +void createLineTool(); + +/*! + * \brief createRectangleTool creates a Rectangle Tool. + */ +void createRectangleTool(); + +/*! + * \brief createCircleTool creates a Circle Tool. + */ +void createCircleTool(); + +/*! + * \brief createPolygonTool creates a Polygon Tool. + */ +void createPolygonTool(); + +/*! + * \brief createFloodFillTool creates a Floodfill Tool. + */ +void createFloodFillTool(); + +/*! + * \brief createGradientTool creates a Gradient Tool. + */ +void createGradientTool(); + +/*! + * \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 getMaxWidth gets the max width of the Canvas. + * \return return the width of the Canvas. + */ +int getMaxWidth(); + +/*! + * \brief getMaxHeight gets the max height of the Canvas. + * \return return the height of the Canvas. + */ +int getMaxHeight(); + +/*! + * \brief getTypeOfImageActiveLayer get the type of the active Layer. + * \return returns the image type of the active layer. + */ +ImageType getTypeOfImageActiveLayer(); + +/*! + * \brief getPolygonDataOfActiveLayer get the polygon data of the active Layer. + * \return return the polygon data of the active Layer. + */ +std::vector getPolygonDataOfActiveLayer(); + +/*! + * \brief getIndexOfActiveLayer returns the index of athe active Layer. + * \return return the index of the active Layer. + */ +int getIndexOfActiveLayer(); + +/*! + * \brief getImageOfActiveLayer returns the image of the active Layer. + * \return return the image of the active Layer. + */ +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(); + +/*! + * \brief getLayerBundle returns the real active layerbundle (care!) + * \return the reference of the currentLayerBundle + */ +std::vector* getLayerBundle(); + +/*! + * \brief Toolsettings - a class to manage Tool settings. + */ +IntelliToolsettings Toolsettings; + +/*! + * \brief colorPicker a class to manage Tool color. + */ +IntelliColorPicker colorPicker; + +/*! + * \brief historyGoBack a function to return the previous state of the project. + */ +void historyGoBack(); + +/*! + * \brief historyGoForward a function to undo the return of the previous state of the project. + */ +void historyGoForward(); + +/*! + * \brief setCanvasDimensions sets the dimension of the Canvas + * \param maxWidth - the width of the Canvas. + * \param maxHeight - the height of the Canvas. + */ +void setCanvasDimensions(int maxWidth, int maxHeight); + +/*! + * \brief drawPixelOntoActive draws a pixel onto the image data of the active Layer. + * \param color - the color of the Pixel, which should be created. + * \param point - the Pixelposition. + */ +void drawPixelOntoActive(QColor color, QPoint point); + +/*! + * \brief setPolygonDataToActive sets polygondata to the active Layer. + * \param points - the points of the polygon data. + */ +void setPolygonDataToActive(std::vector points); +public slots: +/*! + * \brief The slotActivateLayer method handles the event of selecting one layer as active + * \param a - idx of the layer to be active + */ +void slotActivateLayer(int a); +/*! + * \brief The slotDeleteActiveLayer method handles the deletion of the active layer + */ +void slotDeleteActiveLayer(); + +protected: +/*! + * \brief mousePressEvent handles a mouse pressed event. + * \param event - the specific mouse event. + */ +void mousePressEvent(QMouseEvent*event) override; + +/*! + * \brief mouseMoveEvent handles a mouse moved event + * \param event - the specific mouse event. + */ +void mouseMoveEvent(QMouseEvent*event) override; + +/*! + * \brief mouseReleaseEvent handles a mouse released event + * \param event - the specific mouse event. + */ +void mouseReleaseEvent(QMouseEvent*event) override; + +/*! + * \brief wheelEvent handles a mouse wheel event + * \param event - the specific mouse event. + */ +void wheelEvent(QWheelEvent*event) override; + +/*! + * \brief paintEvent handles a painting event + * \param event - the specific paint event. + */ +void paintEvent(QPaintEvent*event) override; + +private: +/*! + * \brief offsetXDimension - Offset for drawing the image. + */ +int offsetXDimension; + +/*! + * \brief offsetYDimension - Offset for drawing the image. + */ +int offsetYDimension; + +/*! + * \brief selectLayerUp moves the active Layer one Up. + */ +void selectLayerUp(); + +/*! + * \brief selectLayerDown moves the active Layer one Down. + */ +void selectLayerDown(); + +/*! + * \brief copyActiveTool copys the activ tool [allocated]. + * \return returns a allocates copy of the current tool. + */ +IntelliTool* copyActiveTool(); + +/*! + * \brief Canvas the underlying Image to display on. + */ +QImage* Canvas; + +/*! + * \brief ScaledCanvas the Canvas saved for output + */ +QImage ScaledCanvas; + +/*! + * \brief maxWidth is the width of the canvas + */ +int maxWidth; + +/*! + * \brief maxHeight is the height of the canvas + */ +int maxHeight; + +/*! + * \brief isSettingPolygon for checking the state of the drawing. + */ +bool isSettingPolygon = false; + +/*! + * \brief renderSettings a class to manage the render settings. + */ +IntelliRenderSettings renderSettings; + +/*! + * \brief Tool a class to manage the Tool. + */ +IntelliTool* Tool; + +/*! + * \brief guiReference to manage communication with the gui. + */ +IntelliPhotoGui* guiReference; + +/*! + * \brief layerBundle a container to save all layers. + */ +std::vector layerBundle; + +/*! + * \brief activeLayer the index of the active Layer. + */ +int activeLayer = -1; + +/*! + * \brief drawLayers draws the Layers to the Canvas + * \param forSaving an indecate if drawing for saving. + */ +void drawLayers(bool forSaving = false); + +/*! + * \brief createTempTopLayer creates a temporary Layer on top of the Layer. + * \param idx - the Layer which should get a temp Layer. + * \return True if it workes, false otherwise. + */ +bool createTempTopLayer(int idx); + +/*! + * \brief updateTools resets the Tools. + */ +void updateTools(); + +/*! + * \brief history - an array out of containers to save history actions. + */ +std::vector history[100] = {layerBundle}; + +/*! + * \brief historyMaxPast a indicator how many steps you can go into the past. + */ +int historyMaxPast = 0; + +/*! + * \brief historyMaxPast a indicator how many steps you can go into the future. + */ +int historyMaxFuture = 0; + +/*! + * \brief historyPresent a indicator where the present is. + */ +int historyPresent = 0; + +/*! + * \brief historyadd adds an past version to the history + */ +void historyadd(); + +}; + +#endif diff --git a/src/Tool/IntelliTool.h b/src/Tool/IntelliTool.h index 40901f0..07abb46 100644 --- a/src/Tool/IntelliTool.h +++ b/src/Tool/IntelliTool.h @@ -17,9 +17,13 @@ class PaintingArea; class IntelliTool { friend UnitTest; public: +/*! + * \brief The Tooltype enum categorising the toosl. + */ enum class Tooltype { CIRCLE, FLOODFILL, + GRADIENT, LINE, PEN, PLAIN, @@ -49,6 +53,9 @@ protected: */ PaintingArea* Area; +/*! + * \brief ActiveType the type of the active tool. + */ Tooltype ActiveType; /*! @@ -56,6 +63,9 @@ Tooltype ActiveType; */ IntelliColorPicker* colorPicker; +/*! + * \brief Toolsettings a refrence to the tool settings + */ IntelliToolsettings* Toolsettings; /*! @@ -127,8 +137,16 @@ virtual void onWheelScrolled(int value); */ virtual void onMouseMoved(int x, int y); +/*! + * \brief getTooltype returns the tools type + * \return returns the tool type of the current tool. + */ Tooltype getTooltype() const; +/*! + * \brief getIsDrawing returns if the tool is currently drawing + * \return returns if the tool is currently drawing + */ bool getIsDrawing() const; }; diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 8f33fb4..25cb503 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -5,6 +5,7 @@ IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) : IntelliTool(Area, colorPicker, Toolsettings){ + this->ActiveType = Tooltype::GRADIENT; this->LineColor = QColor(0,0,0,255); this->hasMoved = false; } diff --git a/src/Tool/IntelliToolGradient.cpp.autosave b/src/Tool/IntelliToolGradient.cpp.autosave new file mode 100644 index 0000000..eb90ea9 --- /dev/null +++ b/src/Tool/IntelliToolGradient.cpp.autosave @@ -0,0 +1,131 @@ +#include "IntelliToolGradient.h" +#include "Layer/PaintingArea.h" +#include "math.h" +#include + +IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) + : IntelliTool(Area, colorPicker, Toolsettings){ + this->ActiveType = Tooltype::GRADIENT; + this->LineColor = QColor(0,0,0,255); + this->hasMoved = false; +} + +IntelliToolGradient::~IntelliToolGradient(){ + IntelliTool::onMouseRightPressed(0,0); +} + +void IntelliToolGradient::onMouseLeftPressed(int x, int y){ + IntelliTool::onMouseLeftPressed(x,y); + startPoint_double[0] = static_cast(x); + startPoint_double[1] = static_cast(y); + startPoint = QPoint(x,y); + endPoint = QPoint(x,y); + endPoint_double[0] = 0; + endPoint_double[1] = 0; + Canvas->image->drawPixel(startPoint,LineColor); +} + +void IntelliToolGradient::onMouseRightPressed(int x, int y){ + IntelliTool::onMouseRightPressed(x,y); +} + +void IntelliToolGradient::onMouseLeftReleased(int x, int y){ + if(hasMoved && this->isDrawing){ + computeGradientLayer(); + IntelliTool::onMouseLeftReleased(x,y); + } +} + +void IntelliToolGradient::onMouseRightReleased(int x, int y){ + IntelliTool::onMouseRightReleased(x,y); +} + +void IntelliToolGradient::onMouseMoved(int x, int y){ + if(this->isDrawing){ + hasMoved = true; + endPoint = QPoint(x,y); + endPoint_double[0] = static_cast(endPoint.x() - startPoint.x()); + endPoint_double[1] = static_cast(endPoint.y() - startPoint.y()); + NormalVector[0] = endPoint_double[1]; + NormalVector[1] = (-1*endPoint_double[0]); + NormalDotNormal = dotProduct(NormalVector,NormalVector); + this->Canvas->image->drawPlain(Qt::transparent); + computeGradientLayer(); + Canvas->image->drawLine(startPoint,endPoint,LineColor,1); + } + IntelliTool::onMouseMoved(x,y); +} + +void IntelliToolGradient::onWheelScrolled(int value){ + IntelliTool::onWheelScrolled(value); +} + +void IntelliToolGradient::computeAndDrawPixelColor(QPoint Point){ + double doublePoint[2]; + doublePoint[0] = static_cast(Point.x()); + doublePoint[1] = static_cast(Point.y()); + double doublePointSubA[2]; + doublePointSubA[0] = doublePoint[0] - startPoint_double[0]; + doublePointSubA[1] = doublePoint[1] - startPoint_double[1]; + double Perpendicular[2]; + double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); + Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; + Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; + double VectorAPoint[2]; + VectorAPoint[0] = static_cast(Perpendicular[0] - startPoint_double[0]); + VectorAPoint[1] = static_cast(Perpendicular[1] - startPoint_double[1]); + double ratio; + if(((VectorAPoint[0] < 0 && endPoint_double[0] < 0) || (VectorAPoint[0] > 0 && endPoint_double[0] > 0)) && ((VectorAPoint[1] < 0 && endPoint_double[1] < 0) || (VectorAPoint[1] > 0 && endPoint_double[1] > 0))) + ratio = lenghtVector(VectorAPoint)/lenghtVector(endPoint_double); + else{ + ratio = -1; + } + QColor computedColor; + if(ratio < 0){ + computedColor = colorPicker->getFirstColor(); + } + else if(ratio > 1){ + computedColor = colorPicker->getSecondColor(); + } + else{ + int red; + int green; + int blue; + int alpha; + int red2; + int green2; + int blue2; + int alpha2; + colorPicker->getFirstColor().getRgb(&red,&green,&blue,&alpha); + colorPicker->getSecondColor().getRgb(&red2,&green2,&blue2,&alpha2); + computedColor.setRed(static_cast(ratio * red2 + (1 - ratio) * red)); + computedColor.setGreen(static_cast(ratio * green2 + (1 - ratio) * green)); + computedColor.setBlue(static_cast(ratio * blue2 + (1 - ratio) * blue)); + computedColor.setAlpha(static_cast(ratio * alpha2 + (1 - ratio) * alpha)); + } + Canvas->image->drawPixel(Point,computedColor); +} + +double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ + return static_cast(Vector1[0]*Vector2[0]+Vector1[1]*Vector2[1]); +} + +double IntelliToolGradient::lenghtVector(double Vector[2]){ + return static_cast((sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); +} + +void IntelliToolGradient::computeGradientLayer(){ + bool switched = false; + if(Canvas->image->isFastRendering()){ + switched = true; + Canvas->image->updateRendererSetting(false); + } + for(int i = 0; i < activeLayer->height; i++){ + for(int j = 0; j < activeLayer->width; j++){ + computeAndDrawPixelColor(QPoint(j,i)); + } + } + if(switched){ + Canvas->image->updateRendererSetting(true); + } +} diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h index 01b0159..caf9b81 100644 --- a/src/Tool/IntelliToolGradient.h +++ b/src/Tool/IntelliToolGradient.h @@ -1,12 +1,23 @@ #ifndef INTELLITOOLGRADIENT_H #define INTELLITOOLGRADIENT_H #include "IntelliTool.h" - +/*! + * \brief The IntelliToolGradient class that represents a gradient call + */ class IntelliToolGradient : public IntelliTool{ public: + /*! + * \brief IntelliToolGradient basic constructor of the gradient tool. + * \param Area - a reference to the paintingArea + * \param colorPicker - a reference to the colorpicker + * \param Toolsettings - a regerence to the Toolsettings + */ IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); + /*! + * \brief ~IntelliToolGradient basic destructor. + */ virtual ~IntelliToolGradient() override; /*! @@ -51,21 +62,70 @@ public: virtual void onMouseMoved(int x, int y) override; private: - QPoint A; - QPoint B; - double doubleA[2]; - double VectorAB[2]; + + /*! + * \brief startPoint of the line + */ + QPoint startPoint; + + /*! + * \brief endPoint of the line + */ + QPoint endPoint; + /*! + * \brief doubleStartPoint startPoint as double Values + */ + double doubleStartPoint[2]; + + /*! + * \brief VectorStartEnd a vector between start and end point. + */ + double VectorStartEnd[2]; + + /*! + * \brief NormalVector of the VectorStartEnd + */ double NormalVector[2]; + + /*! + * \brief NormalDotNormal dot product of Normal*Normal + */ double NormalDotNormal; + + /*! + * \brief LineColor color of th line. + */ QColor LineColor; + + /*! + * \brief hasMoved indicates a movement + */ bool hasMoved; - void computePixelColor(QPoint Point); + /*! + * \brief computeAndDrawPixelColor computes the pixelcolor for a given point and sets it to the image. + * \param Point the point which shoud be computed + */ + void computeAndDrawPixelColor(QPoint Point); + /*! + * \brief dotProduct calculates the dot product of 2 vetors. + * \param Vector1 - first argument + * \param Vector2 - second argument + * \return returns the dot product. + */ double dotProduct(double Vector1[2], double Vector2[2]); + /*! + * \brief lenghtVector returns the length of a vector + * \param Vector - Vector to calculate the length + * \return returns the length of the vector + */ double lenghtVector(double Vector[2]); + /*! + * \brief computeGradientLayer computes the gradient over all pixels in the image. + */ void computeGradientLayer(); }; diff --git a/src/Tool/IntelliToolPolygon.cpp b/src/Tool/IntelliToolPolygon.cpp index 3efd0d5..b6d8b4e 100644 --- a/src/Tool/IntelliToolPolygon.cpp +++ b/src/Tool/IntelliToolPolygon.cpp @@ -24,9 +24,9 @@ IntelliToolPolygon::~IntelliToolPolygon(){ } void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ - if(!drawingOfPolygon && Area->getTypeOfImageRealLayer() == ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { - if(Area->getPolygonDataOfRealLayer().size()>2) { - std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); + if(!drawingOfPolygon && Area->getTypeOfImageActiveLayer() == ImageType::SHAPEDIMAGE && x > 0 && y > 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + if(Area->getPolygonDataOfActiveLayer().size()>2) { + std::vector Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfActiveLayer()); QPoint Point(x,y); isInside = IntelliTriangulation::isInPolygon(Triangles,Point); } @@ -37,7 +37,7 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ isInside = true; } } - else if(!drawingOfPolygon && Area->getTypeOfImageRealLayer() == ImageType::RASTERIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { + else if(!drawingOfPolygon && Area->getTypeOfImageActiveLayer() == ImageType::RASTERIMAGE && x >= 0 && y >= 0 && xgetWidthOfActive() && ygetHeightOfActive()) { isInside = true; } From 2dd527ca27719e1c9b278f509c0164257af80b14 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Tue, 28 Jan 2020 10:42:32 +0100 Subject: [PATCH 10/37] added more comments --- src/IntelliHelper/IntelliRenderSettings.h | 7 +- .../IntelliRenderSettings.h.autosave | 34 -- src/IntelliHelper/IntelliToolsettings.h | 37 +- .../IntelliToolsettings.h.autosave | 59 --- src/Layer/PaintingArea.h | 108 +++- src/Layer/PaintingArea.h.autosave | 481 ------------------ src/Tool/IntelliToolGradient.cpp | 42 +- src/Tool/IntelliToolGradient.cpp.autosave | 131 ----- 8 files changed, 170 insertions(+), 729 deletions(-) delete mode 100644 src/IntelliHelper/IntelliRenderSettings.h.autosave delete mode 100644 src/IntelliHelper/IntelliToolsettings.h.autosave delete mode 100644 src/Layer/PaintingArea.h.autosave delete mode 100644 src/Tool/IntelliToolGradient.cpp.autosave diff --git a/src/IntelliHelper/IntelliRenderSettings.h b/src/IntelliHelper/IntelliRenderSettings.h index 296c186..2fc3afb 100644 --- a/src/IntelliHelper/IntelliRenderSettings.h +++ b/src/IntelliHelper/IntelliRenderSettings.h @@ -4,7 +4,9 @@ //for unit testing class UnitTest; - +/*! + * \brief The IntelliRenderSettings class which manages the render Settings. + */ class IntelliRenderSettings { friend UnitTest; @@ -23,6 +25,9 @@ void setFastRendering(bool Updatedsetting); bool isFastRenderering() const; private: +/*! + * \brief fastRenderering the state of the project, in relation the the render setting. + */ bool fastRenderering = true; }; diff --git a/src/IntelliHelper/IntelliRenderSettings.h.autosave b/src/IntelliHelper/IntelliRenderSettings.h.autosave deleted file mode 100644 index 2fc3afb..0000000 --- a/src/IntelliHelper/IntelliRenderSettings.h.autosave +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef INTELLIRENDERSETTINGS_H -#define INTELLIRENDERSETTINGS_H - -//for unit testing -class UnitTest; - -/*! - * \brief The IntelliRenderSettings class which manages the render Settings. - */ -class IntelliRenderSettings -{ -friend UnitTest; -public: -IntelliRenderSettings(); - -/*! - * \brief setFastRendering sets fastRendering to Updatedsetting. - * \param Updatedsetting - Represents the new value for the Fast Rendering Flag. - */ -void setFastRendering(bool Updatedsetting); -/*! - * \brief The getfastRenderer gets the value of the flag for the fastRenderer setting. - * \return Returns true if fastRenderer is active else false - */ -bool isFastRenderering() const; - -private: -/*! - * \brief fastRenderering the state of the project, in relation the the render setting. - */ -bool fastRenderering = true; -}; - -#endif diff --git a/src/IntelliHelper/IntelliToolsettings.h b/src/IntelliHelper/IntelliToolsettings.h index c2fd2bb..3ad9705 100644 --- a/src/IntelliHelper/IntelliToolsettings.h +++ b/src/IntelliHelper/IntelliToolsettings.h @@ -3,21 +3,56 @@ //for unit testing class UnitTest; - +/*! + * \brief The IntelliToolsettings class managing the settings of the tools, independent of an existing tool. + */ class IntelliToolsettings { friend UnitTest; public: +/*! + * \brief IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics. + */ IntelliToolsettings(); + +/*! + * \brief ~IntelliToolsettings - basic destructor. + */ virtual ~IntelliToolsettings(); +/*! + * \brief getLineWidth returns the width attribute of the line. + * \return returns the width attribute as integer. + */ int getLineWidth() const; + +/*! + * \brief setLineWidth sets the width attribute of the line. + * \param LineWidth - the future width of the line + */ void setLineWidth(int LineWidth); +/*! + * \brief getInnerAlpha returns the inner alpha value. + * \return returns the inner alpha attribute as integer. + */ int getInnerAlpha() const; + +/*! + * \brief setInnerAlpha sets the inner alpha attribute of the Tool. + * \param innerAlpha - the future inner alpha of the Tool. + */ void setInnerAlpha(int innerAlpha); private: + +/*! + * \brief lineWidth attribute of a Tool. + */ int lineWidth; + +/*! + * \brief innerAlpha aattribute of a Tool. + */ int innerAlpha; }; diff --git a/src/IntelliHelper/IntelliToolsettings.h.autosave b/src/IntelliHelper/IntelliToolsettings.h.autosave deleted file mode 100644 index b251aa9..0000000 --- a/src/IntelliHelper/IntelliToolsettings.h.autosave +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef INTELLITOOLSETTINGS_H -#define INTELLITOOLSETTINGS_H - -//for unit testing -class UnitTest; -/*! - * \brief The IntelliToolsettings class managing the settings of the tools, independent of an existing tool. - */ -class IntelliToolsettings { -friend UnitTest; -public: -/*! - * \brief IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics. - */ -IntelliToolsettings(); - -/*! - * \brief ~IntelliToolsettings - basic destructor. - */ -virtual ~IntelliToolsettings(); - -/*! - * \brief getLineWidth returns the width attribute of the line. - * \return returns the width attribute as integer. - */ -int getLineWidth() const; - -/*! - * \brief setLineWidth sets the width attribute of the line. - * \param LineWidth - the future width of the line - */ -void setLineWidth(int LineWidth); - -/*! - * \brief getInnerAlpha returns the inner alpha value. - * \return returns the inner alpha attribute as integer. - */ -int getInnerAlpha() const; - -/*! - * \brief setInnerAlpha sets the inner alpha attribute of the Tool. - * \param innerAlpha - the future inner alpha of the Tool. - */ -void setInnerAlpha(int innerAlpha); - -private: - -/*! - * \brief lineWidth attribute of a Tool. - */ -int lineWidth; - -/*! - * \brief innerAlpha aattribute of a Tool. - */ -int innerAlpha; -}; - -#endif diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 9dd6799..aa221ef 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -326,48 +326,154 @@ void slotActivateLayer(int a); void slotDeleteActiveLayer(); protected: +/*! + * \brief mousePressEvent handles a mouse pressed event. + * \param event - the specific mouse event. + */ void mousePressEvent(QMouseEvent*event) override; + +/*! + * \brief mouseMoveEvent handles a mouse moved event + * \param event - the specific mouse event. + */ void mouseMoveEvent(QMouseEvent*event) override; + +/*! + * \brief mouseReleaseEvent handles a mouse released event + * \param event - the specific mouse event. + */ void mouseReleaseEvent(QMouseEvent*event) override; +/*! + * \brief wheelEvent handles a mouse wheel event + * \param event - the specific mouse event. + */ void wheelEvent(QWheelEvent*event) override; +/*! + * \brief paintEvent handles a painting event + * \param event - the specific paint event. + */ void paintEvent(QPaintEvent*event) override; private: -//offset for the displayable +/*! + * \brief offsetXDimension - Offset for drawing the image. + */ int offsetXDimension; + +/*! + * \brief offsetYDimension - Offset for drawing the image. + */ int offsetYDimension; +/*! + * \brief selectLayerUp moves the active Layer one Up. + */ void selectLayerUp(); + +/*! + * \brief selectLayerDown moves the active Layer one Down. + */ void selectLayerDown(); + +/*! + * \brief copyActiveTool copys the activ tool [allocated]. + * \return returns a allocates copy of the current tool. + */ IntelliTool* copyActiveTool(); +/*! + * \brief Canvas the underlying Image to display on. + */ QImage* Canvas; + +/*! + * \brief ScaledCanvas the Canvas saved for output + */ QImage ScaledCanvas; + +/*! + * \brief maxWidth is the width of the canvas + */ int maxWidth; + +/*! + * \brief maxHeight is the height of the canvas + */ int maxHeight; +/*! + * \brief isSettingPolygon for checking the state of the drawing. + */ bool isSettingPolygon = false; +/*! + * \brief renderSettings a class to manage the render settings. + */ IntelliRenderSettings renderSettings; + +/*! + * \brief Tool a class to manage the Tool. + */ IntelliTool* Tool; + +/*! + * \brief guiReference to manage communication with the gui. + */ IntelliPhotoGui* guiReference; +/*! + * \brief layerBundle a container to save all layers. + */ std::vector layerBundle; + +/*! + * \brief activeLayer the index of the active Layer. + */ int activeLayer = -1; +/*! + * \brief drawLayers draws the Layers to the Canvas + * \param forSaving an indecate if drawing for saving. + */ void drawLayers(bool forSaving = false); +/*! + * \brief createTempTopLayer creates a temporary Layer on top of the Layer. + * \param idx - the Layer which should get a temp Layer. + * \return True if it workes, false otherwise. + */ bool createTempTopLayer(int idx); +/*! + * \brief updateTools resets the Tools. + */ void updateTools(); +/*! + * \brief history - an array out of containers to save history actions. + */ std::vector history[100] = {layerBundle}; + +/*! + * \brief historyMaxPast a indicator how many steps you can go into the past. + */ int historyMaxPast = 0; + +/*! + * \brief historyMaxPast a indicator how many steps you can go into the future. + */ int historyMaxFuture = 0; + +/*! + * \brief historyPresent a indicator where the present is. + */ int historyPresent = 0; +/*! + * \brief historyadd adds an past version to the history + */ void historyadd(); }; diff --git a/src/Layer/PaintingArea.h.autosave b/src/Layer/PaintingArea.h.autosave deleted file mode 100644 index 41d98db..0000000 --- a/src/Layer/PaintingArea.h.autosave +++ /dev/null @@ -1,481 +0,0 @@ - -#ifndef PaintingArea_H -#define PaintingArea_H - -#include -#include -#include -#include -#include -#include -#include "Image/IntelliImage.h" -#include "Image/IntelliRasterImage.h" -#include "Image/IntelliShapedImage.h" -#include "Tool/IntelliTool.h" -#include "IntelliHelper/IntelliColorPicker.h" - -//for unit testing -class UnitTest; -class IntelliPhotoGui; -/*! - * \brief The LayerObject struct holds all the information needed to construct a layer - */ -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; - - LayerObject(); - - LayerObject(const LayerObject& layer); -}; - -/*! - * \brief The PaintingArea class manages the methods and stores information about the current painting area, which is the currently opened project - */ -class PaintingArea : public QLabel -{ -friend UnitTest; -// Declares our class as a QObject which is the base class -// for all Qt objects -// QObjects handle events -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 This deconstructor is used to clear up the memory and remove the currently active window - */ -~PaintingArea() override; - -/*! - * \brief setRenderSettings updates all Images to the new Rendersetting. - * \param isFastRenderingOn is the new given flag for the FastRenderer. - */ -void setRenderSettings(bool isFastRenderingOn); - -/*! - * \brief getRenderSettings updates all Images to the new Rendersetting. - * \param isFastRenderingOn is the new given flag for the FastRenderer. - */ -bool getRenderSettings(); - -/*! - * \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 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); - -/*! - * \brief deleteAllLayers deletes all layers - */ -void deleteAllLayers(); -/*! - * \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 alpha - Transparence of the layer - * \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, int alpha = 255, ImageType type = 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, ImageType type = ImageType::RASTERIMAGE); -/*! - * \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, bool isTool = false); -/*! - * \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 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 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 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(); - -/*! - * \brief createPenTool creates a Pen Tool. - */ -void createPenTool(); - -/*! - * \brief createPlainTool creates a Plain Tool. - */ -void createPlainTool(); - -/*! - * \brief createLineTool creates a Line Tool. - */ -void createLineTool(); - -/*! - * \brief createRectangleTool creates a Rectangle Tool. - */ -void createRectangleTool(); - -/*! - * \brief createCircleTool creates a Circle Tool. - */ -void createCircleTool(); - -/*! - * \brief createPolygonTool creates a Polygon Tool. - */ -void createPolygonTool(); - -/*! - * \brief createFloodFillTool creates a Floodfill Tool. - */ -void createFloodFillTool(); - -/*! - * \brief createGradientTool creates a Gradient Tool. - */ -void createGradientTool(); - -/*! - * \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 getMaxWidth gets the max width of the Canvas. - * \return return the width of the Canvas. - */ -int getMaxWidth(); - -/*! - * \brief getMaxHeight gets the max height of the Canvas. - * \return return the height of the Canvas. - */ -int getMaxHeight(); - -/*! - * \brief getTypeOfImageActiveLayer get the type of the active Layer. - * \return returns the image type of the active layer. - */ -ImageType getTypeOfImageActiveLayer(); - -/*! - * \brief getPolygonDataOfActiveLayer get the polygon data of the active Layer. - * \return return the polygon data of the active Layer. - */ -std::vector getPolygonDataOfActiveLayer(); - -/*! - * \brief getIndexOfActiveLayer returns the index of athe active Layer. - * \return return the index of the active Layer. - */ -int getIndexOfActiveLayer(); - -/*! - * \brief getImageOfActiveLayer returns the image of the active Layer. - * \return return the image of the active Layer. - */ -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(); - -/*! - * \brief getLayerBundle returns the real active layerbundle (care!) - * \return the reference of the currentLayerBundle - */ -std::vector* getLayerBundle(); - -/*! - * \brief Toolsettings - a class to manage Tool settings. - */ -IntelliToolsettings Toolsettings; - -/*! - * \brief colorPicker a class to manage Tool color. - */ -IntelliColorPicker colorPicker; - -/*! - * \brief historyGoBack a function to return the previous state of the project. - */ -void historyGoBack(); - -/*! - * \brief historyGoForward a function to undo the return of the previous state of the project. - */ -void historyGoForward(); - -/*! - * \brief setCanvasDimensions sets the dimension of the Canvas - * \param maxWidth - the width of the Canvas. - * \param maxHeight - the height of the Canvas. - */ -void setCanvasDimensions(int maxWidth, int maxHeight); - -/*! - * \brief drawPixelOntoActive draws a pixel onto the image data of the active Layer. - * \param color - the color of the Pixel, which should be created. - * \param point - the Pixelposition. - */ -void drawPixelOntoActive(QColor color, QPoint point); - -/*! - * \brief setPolygonDataToActive sets polygondata to the active Layer. - * \param points - the points of the polygon data. - */ -void setPolygonDataToActive(std::vector points); -public slots: -/*! - * \brief The slotActivateLayer method handles the event of selecting one layer as active - * \param a - idx of the layer to be active - */ -void slotActivateLayer(int a); -/*! - * \brief The slotDeleteActiveLayer method handles the deletion of the active layer - */ -void slotDeleteActiveLayer(); - -protected: -/*! - * \brief mousePressEvent handles a mouse pressed event. - * \param event - the specific mouse event. - */ -void mousePressEvent(QMouseEvent*event) override; - -/*! - * \brief mouseMoveEvent handles a mouse moved event - * \param event - the specific mouse event. - */ -void mouseMoveEvent(QMouseEvent*event) override; - -/*! - * \brief mouseReleaseEvent handles a mouse released event - * \param event - the specific mouse event. - */ -void mouseReleaseEvent(QMouseEvent*event) override; - -/*! - * \brief wheelEvent handles a mouse wheel event - * \param event - the specific mouse event. - */ -void wheelEvent(QWheelEvent*event) override; - -/*! - * \brief paintEvent handles a painting event - * \param event - the specific paint event. - */ -void paintEvent(QPaintEvent*event) override; - -private: -/*! - * \brief offsetXDimension - Offset for drawing the image. - */ -int offsetXDimension; - -/*! - * \brief offsetYDimension - Offset for drawing the image. - */ -int offsetYDimension; - -/*! - * \brief selectLayerUp moves the active Layer one Up. - */ -void selectLayerUp(); - -/*! - * \brief selectLayerDown moves the active Layer one Down. - */ -void selectLayerDown(); - -/*! - * \brief copyActiveTool copys the activ tool [allocated]. - * \return returns a allocates copy of the current tool. - */ -IntelliTool* copyActiveTool(); - -/*! - * \brief Canvas the underlying Image to display on. - */ -QImage* Canvas; - -/*! - * \brief ScaledCanvas the Canvas saved for output - */ -QImage ScaledCanvas; - -/*! - * \brief maxWidth is the width of the canvas - */ -int maxWidth; - -/*! - * \brief maxHeight is the height of the canvas - */ -int maxHeight; - -/*! - * \brief isSettingPolygon for checking the state of the drawing. - */ -bool isSettingPolygon = false; - -/*! - * \brief renderSettings a class to manage the render settings. - */ -IntelliRenderSettings renderSettings; - -/*! - * \brief Tool a class to manage the Tool. - */ -IntelliTool* Tool; - -/*! - * \brief guiReference to manage communication with the gui. - */ -IntelliPhotoGui* guiReference; - -/*! - * \brief layerBundle a container to save all layers. - */ -std::vector layerBundle; - -/*! - * \brief activeLayer the index of the active Layer. - */ -int activeLayer = -1; - -/*! - * \brief drawLayers draws the Layers to the Canvas - * \param forSaving an indecate if drawing for saving. - */ -void drawLayers(bool forSaving = false); - -/*! - * \brief createTempTopLayer creates a temporary Layer on top of the Layer. - * \param idx - the Layer which should get a temp Layer. - * \return True if it workes, false otherwise. - */ -bool createTempTopLayer(int idx); - -/*! - * \brief updateTools resets the Tools. - */ -void updateTools(); - -/*! - * \brief history - an array out of containers to save history actions. - */ -std::vector history[100] = {layerBundle}; - -/*! - * \brief historyMaxPast a indicator how many steps you can go into the past. - */ -int historyMaxPast = 0; - -/*! - * \brief historyMaxPast a indicator how many steps you can go into the future. - */ -int historyMaxFuture = 0; - -/*! - * \brief historyPresent a indicator where the present is. - */ -int historyPresent = 0; - -/*! - * \brief historyadd adds an past version to the history - */ -void historyadd(); - -}; - -#endif diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 25cb503..eb90ea9 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -16,13 +16,13 @@ IntelliToolGradient::~IntelliToolGradient(){ void IntelliToolGradient::onMouseLeftPressed(int x, int y){ IntelliTool::onMouseLeftPressed(x,y); - doubleA[0] = static_cast(x); - doubleA[1] = static_cast(y); - A = QPoint(x,y); - B = QPoint(x,y); - VectorAB[0] = 0; - VectorAB[1] = 0; - Canvas->image->drawPixel(A,LineColor); + startPoint_double[0] = static_cast(x); + startPoint_double[1] = static_cast(y); + startPoint = QPoint(x,y); + endPoint = QPoint(x,y); + endPoint_double[0] = 0; + endPoint_double[1] = 0; + Canvas->image->drawPixel(startPoint,LineColor); } void IntelliToolGradient::onMouseRightPressed(int x, int y){ @@ -43,15 +43,15 @@ void IntelliToolGradient::onMouseRightReleased(int x, int y){ void IntelliToolGradient::onMouseMoved(int x, int y){ if(this->isDrawing){ hasMoved = true; - B = QPoint(x,y); - VectorAB[0] = static_cast(B.x() - A.x()); - VectorAB[1] = static_cast(B.y() - A.y()); - NormalVector[0] = VectorAB[1]; - NormalVector[1] = (-1*VectorAB[0]); + endPoint = QPoint(x,y); + endPoint_double[0] = static_cast(endPoint.x() - startPoint.x()); + endPoint_double[1] = static_cast(endPoint.y() - startPoint.y()); + NormalVector[0] = endPoint_double[1]; + NormalVector[1] = (-1*endPoint_double[0]); NormalDotNormal = dotProduct(NormalVector,NormalVector); this->Canvas->image->drawPlain(Qt::transparent); computeGradientLayer(); - Canvas->image->drawLine(A,B,LineColor,1); + Canvas->image->drawLine(startPoint,endPoint,LineColor,1); } IntelliTool::onMouseMoved(x,y); } @@ -60,23 +60,23 @@ void IntelliToolGradient::onWheelScrolled(int value){ IntelliTool::onWheelScrolled(value); } -void IntelliToolGradient::computePixelColor(QPoint Point){ +void IntelliToolGradient::computeAndDrawPixelColor(QPoint Point){ double doublePoint[2]; doublePoint[0] = static_cast(Point.x()); doublePoint[1] = static_cast(Point.y()); double doublePointSubA[2]; - doublePointSubA[0] = doublePoint[0] - doubleA[0]; - doublePointSubA[1] = doublePoint[1] - doubleA[1]; + doublePointSubA[0] = doublePoint[0] - startPoint_double[0]; + doublePointSubA[1] = doublePoint[1] - startPoint_double[1]; double Perpendicular[2]; double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; double VectorAPoint[2]; - VectorAPoint[0] = static_cast(Perpendicular[0] - doubleA[0]); - VectorAPoint[1] = static_cast(Perpendicular[1] - doubleA[1]); + VectorAPoint[0] = static_cast(Perpendicular[0] - startPoint_double[0]); + VectorAPoint[1] = static_cast(Perpendicular[1] - startPoint_double[1]); double ratio; - if(((VectorAPoint[0] < 0 && VectorAB[0] < 0) || (VectorAPoint[0] > 0 && VectorAB[0] > 0)) && ((VectorAPoint[1] < 0 && VectorAB[1] < 0) || (VectorAPoint[1] > 0 && VectorAB[1] > 0))) - ratio = lenghtVector(VectorAPoint)/lenghtVector(VectorAB); + if(((VectorAPoint[0] < 0 && endPoint_double[0] < 0) || (VectorAPoint[0] > 0 && endPoint_double[0] > 0)) && ((VectorAPoint[1] < 0 && endPoint_double[1] < 0) || (VectorAPoint[1] > 0 && endPoint_double[1] > 0))) + ratio = lenghtVector(VectorAPoint)/lenghtVector(endPoint_double); else{ ratio = -1; } @@ -122,7 +122,7 @@ void IntelliToolGradient::computeGradientLayer(){ } for(int i = 0; i < activeLayer->height; i++){ for(int j = 0; j < activeLayer->width; j++){ - computePixelColor(QPoint(j,i)); + computeAndDrawPixelColor(QPoint(j,i)); } } if(switched){ diff --git a/src/Tool/IntelliToolGradient.cpp.autosave b/src/Tool/IntelliToolGradient.cpp.autosave deleted file mode 100644 index eb90ea9..0000000 --- a/src/Tool/IntelliToolGradient.cpp.autosave +++ /dev/null @@ -1,131 +0,0 @@ -#include "IntelliToolGradient.h" -#include "Layer/PaintingArea.h" -#include "math.h" -#include - -IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) - : IntelliTool(Area, colorPicker, Toolsettings){ - this->ActiveType = Tooltype::GRADIENT; - this->LineColor = QColor(0,0,0,255); - this->hasMoved = false; -} - -IntelliToolGradient::~IntelliToolGradient(){ - IntelliTool::onMouseRightPressed(0,0); -} - -void IntelliToolGradient::onMouseLeftPressed(int x, int y){ - IntelliTool::onMouseLeftPressed(x,y); - startPoint_double[0] = static_cast(x); - startPoint_double[1] = static_cast(y); - startPoint = QPoint(x,y); - endPoint = QPoint(x,y); - endPoint_double[0] = 0; - endPoint_double[1] = 0; - Canvas->image->drawPixel(startPoint,LineColor); -} - -void IntelliToolGradient::onMouseRightPressed(int x, int y){ - IntelliTool::onMouseRightPressed(x,y); -} - -void IntelliToolGradient::onMouseLeftReleased(int x, int y){ - if(hasMoved && this->isDrawing){ - computeGradientLayer(); - IntelliTool::onMouseLeftReleased(x,y); - } -} - -void IntelliToolGradient::onMouseRightReleased(int x, int y){ - IntelliTool::onMouseRightReleased(x,y); -} - -void IntelliToolGradient::onMouseMoved(int x, int y){ - if(this->isDrawing){ - hasMoved = true; - endPoint = QPoint(x,y); - endPoint_double[0] = static_cast(endPoint.x() - startPoint.x()); - endPoint_double[1] = static_cast(endPoint.y() - startPoint.y()); - NormalVector[0] = endPoint_double[1]; - NormalVector[1] = (-1*endPoint_double[0]); - NormalDotNormal = dotProduct(NormalVector,NormalVector); - this->Canvas->image->drawPlain(Qt::transparent); - computeGradientLayer(); - Canvas->image->drawLine(startPoint,endPoint,LineColor,1); - } - IntelliTool::onMouseMoved(x,y); -} - -void IntelliToolGradient::onWheelScrolled(int value){ - IntelliTool::onWheelScrolled(value); -} - -void IntelliToolGradient::computeAndDrawPixelColor(QPoint Point){ - double doublePoint[2]; - doublePoint[0] = static_cast(Point.x()); - doublePoint[1] = static_cast(Point.y()); - double doublePointSubA[2]; - doublePointSubA[0] = doublePoint[0] - startPoint_double[0]; - doublePointSubA[1] = doublePoint[1] - startPoint_double[1]; - double Perpendicular[2]; - double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); - Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; - Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; - double VectorAPoint[2]; - VectorAPoint[0] = static_cast(Perpendicular[0] - startPoint_double[0]); - VectorAPoint[1] = static_cast(Perpendicular[1] - startPoint_double[1]); - double ratio; - if(((VectorAPoint[0] < 0 && endPoint_double[0] < 0) || (VectorAPoint[0] > 0 && endPoint_double[0] > 0)) && ((VectorAPoint[1] < 0 && endPoint_double[1] < 0) || (VectorAPoint[1] > 0 && endPoint_double[1] > 0))) - ratio = lenghtVector(VectorAPoint)/lenghtVector(endPoint_double); - else{ - ratio = -1; - } - QColor computedColor; - if(ratio < 0){ - computedColor = colorPicker->getFirstColor(); - } - else if(ratio > 1){ - computedColor = colorPicker->getSecondColor(); - } - else{ - int red; - int green; - int blue; - int alpha; - int red2; - int green2; - int blue2; - int alpha2; - colorPicker->getFirstColor().getRgb(&red,&green,&blue,&alpha); - colorPicker->getSecondColor().getRgb(&red2,&green2,&blue2,&alpha2); - computedColor.setRed(static_cast(ratio * red2 + (1 - ratio) * red)); - computedColor.setGreen(static_cast(ratio * green2 + (1 - ratio) * green)); - computedColor.setBlue(static_cast(ratio * blue2 + (1 - ratio) * blue)); - computedColor.setAlpha(static_cast(ratio * alpha2 + (1 - ratio) * alpha)); - } - Canvas->image->drawPixel(Point,computedColor); -} - -double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ - return static_cast(Vector1[0]*Vector2[0]+Vector1[1]*Vector2[1]); -} - -double IntelliToolGradient::lenghtVector(double Vector[2]){ - return static_cast((sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); -} - -void IntelliToolGradient::computeGradientLayer(){ - bool switched = false; - if(Canvas->image->isFastRendering()){ - switched = true; - Canvas->image->updateRendererSetting(false); - } - for(int i = 0; i < activeLayer->height; i++){ - for(int j = 0; j < activeLayer->width; j++){ - computeAndDrawPixelColor(QPoint(j,i)); - } - } - if(switched){ - Canvas->image->updateRendererSetting(true); - } -} From 2a85e550af028f7314d8a9932c43ae9adac3bf65 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Tue, 28 Jan 2020 10:44:54 +0100 Subject: [PATCH 11/37] hotfix --- src/Tool/IntelliToolGradient.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index eb90ea9..a47f087 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -16,12 +16,12 @@ IntelliToolGradient::~IntelliToolGradient(){ void IntelliToolGradient::onMouseLeftPressed(int x, int y){ IntelliTool::onMouseLeftPressed(x,y); - startPoint_double[0] = static_cast(x); - startPoint_double[1] = static_cast(y); + doubleStartPoint[0] = static_cast(x); + doubleStartPoint[1] = static_cast(y); startPoint = QPoint(x,y); endPoint = QPoint(x,y); - endPoint_double[0] = 0; - endPoint_double[1] = 0; + VectorStartEnd[0] = 0; + VectorStartEnd[1] = 0; Canvas->image->drawPixel(startPoint,LineColor); } @@ -44,10 +44,10 @@ void IntelliToolGradient::onMouseMoved(int x, int y){ if(this->isDrawing){ hasMoved = true; endPoint = QPoint(x,y); - endPoint_double[0] = static_cast(endPoint.x() - startPoint.x()); - endPoint_double[1] = static_cast(endPoint.y() - startPoint.y()); - NormalVector[0] = endPoint_double[1]; - NormalVector[1] = (-1*endPoint_double[0]); + VectorStartEnd[0] = static_cast(endPoint.x() - startPoint.x()); + VectorStartEnd[1] = static_cast(endPoint.y() - startPoint.y()); + NormalVector[0] = VectorStartEnd[1]; + NormalVector[1] = (-1*VectorStartEnd[0]); NormalDotNormal = dotProduct(NormalVector,NormalVector); this->Canvas->image->drawPlain(Qt::transparent); computeGradientLayer(); @@ -65,18 +65,18 @@ void IntelliToolGradient::computeAndDrawPixelColor(QPoint Point){ doublePoint[0] = static_cast(Point.x()); doublePoint[1] = static_cast(Point.y()); double doublePointSubA[2]; - doublePointSubA[0] = doublePoint[0] - startPoint_double[0]; - doublePointSubA[1] = doublePoint[1] - startPoint_double[1]; + doublePointSubA[0] = doublePoint[0] - doubleStartPoint[0]; + doublePointSubA[1] = doublePoint[1] - doubleStartPoint[1]; double Perpendicular[2]; double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; double VectorAPoint[2]; - VectorAPoint[0] = static_cast(Perpendicular[0] - startPoint_double[0]); - VectorAPoint[1] = static_cast(Perpendicular[1] - startPoint_double[1]); + VectorAPoint[0] = static_cast(Perpendicular[0] - doubleStartPoint[0]); + VectorAPoint[1] = static_cast(Perpendicular[1] - doubleStartPoint[1]); double ratio; - if(((VectorAPoint[0] < 0 && endPoint_double[0] < 0) || (VectorAPoint[0] > 0 && endPoint_double[0] > 0)) && ((VectorAPoint[1] < 0 && endPoint_double[1] < 0) || (VectorAPoint[1] > 0 && endPoint_double[1] > 0))) - ratio = lenghtVector(VectorAPoint)/lenghtVector(endPoint_double); + if(((VectorAPoint[0] < 0 && VectorStartEnd[0] < 0) || (VectorAPoint[0] > 0 && VectorStartEnd[0] > 0)) && ((VectorAPoint[1] < 0 && VectorStartEnd[1] < 0) || (VectorAPoint[1] > 0 && VectorStartEnd[1] > 0))) + ratio = lenghtVector(VectorAPoint)/lenghtVector(VectorStartEnd); else{ ratio = -1; } From 9c8378194d752a728079f13b4c807dc5ca77f9ce Mon Sep 17 00:00:00 2001 From: Conrad Date: Tue, 28 Jan 2020 11:44:09 +0100 Subject: [PATCH 12/37] New GUI Menu Bar Layout --- src/GUI/IntelliPhotoGui.cpp | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d3ab832..acf8457 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -20,7 +20,7 @@ IntelliPhotoGui::IntelliPhotoGui(){ setIntelliStyle(); // Size the app resize(600,600); - showMaximized(); + showMaximized(); setDefaultValues(); } @@ -242,13 +242,13 @@ void IntelliPhotoGui::slotSetActiveLayer(){ void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ paintingArea->setRenderSettings(true); - FastRendererLabel->setText("Fast Render: On"); + FastRendererLabel->setText("Fast Render: On"); UpdateGui(); } void IntelliPhotoGui::slotUpdateRenderSettingsOff(){ paintingArea->setRenderSettings(false); - FastRendererLabel->setText("Fast Render: Off"); + FastRendererLabel->setText("Fast Render: Off"); UpdateGui(); } @@ -303,8 +303,8 @@ void IntelliPhotoGui::slotCreateFloodFillTool(){ } void IntelliPhotoGui::slotCreateGradientTool(){ - GradientButton->setChecked(true); - paintingArea->createGradientTool(); + GradientButton->setChecked(true); + paintingArea->createGradientTool(); } // Open an about dialog @@ -528,9 +528,9 @@ void IntelliPhotoGui::createActions(){ connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); - actionCreateGradientTool = new QAction(tr("&Gradient"),this); - connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); - connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); + actionCreateGradientTool = new QAction(tr("&Gradient"),this); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); // Create about action and tie to IntelliPhotoGui::about() actionAboutDialog = new QAction(tr("&About"), this); @@ -551,8 +551,8 @@ void IntelliPhotoGui::createActions(){ connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool())); - connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetTools())); - connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool())); + connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool())); connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool())); @@ -636,8 +636,8 @@ void IntelliPhotoGui::createMenus(){ //Attach all Tool Creation Actions toolCreationMenu = new QMenu(tr("&Drawingtools"), this); toolCreationMenu->addAction(actionCreateCircleTool); - toolCreationMenu->addAction(actionCreateFloodFillTool); - toolCreationMenu->addAction(actionCreateGradientTool); + toolCreationMenu->addAction(actionCreateFloodFillTool); + toolCreationMenu->addAction(actionCreateGradientTool); toolCreationMenu->addAction(actionCreateLineTool); toolCreationMenu->addAction(actionCreatePenTool); toolCreationMenu->addAction(actionCreatePlainTool); @@ -659,8 +659,7 @@ void IntelliPhotoGui::createMenus(){ // Attach all actions to Options optionMenu = new QMenu(tr("&Options"), this); optionMenu->addAction(actionGoBack); - optionMenu->addAction(actionGoForward); - optionMenu->addMenu(layerMenu); + optionMenu->addAction(actionGoForward); optionMenu->addMenu(toolMenu); optionMenu->addSeparator(); optionMenu->addMenu(renderMenu); @@ -674,6 +673,7 @@ void IntelliPhotoGui::createMenus(){ // Add menu items to the menubar menuBar()->addMenu(fileMenu); menuBar()->addMenu(optionMenu); + menuBar()->addMenu(layerMenu); menuBar()->addMenu(helpMenu); } @@ -705,12 +705,12 @@ void IntelliPhotoGui::createGui(){ FloodFillButton->setIconSize(Buttonsize); FloodFillButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/icon.png"); - GradientButton = new QPushButton(); - GradientButton->setFixedSize(Buttonsize); - GradientButton->setIcon(preview); - GradientButton->setIconSize(Buttonsize); - GradientButton->setCheckable(true); + preview = QPixmap(":/Icons/Buttons/icons/icon.png"); + GradientButton = new QPushButton(); + GradientButton->setFixedSize(Buttonsize); + GradientButton->setIcon(preview); + GradientButton->setIconSize(Buttonsize); + GradientButton->setCheckable(true); preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); LineButton = new QPushButton(); @@ -810,9 +810,9 @@ void IntelliPhotoGui::createGui(){ QString String = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height()); dimCanvas->setText(String); - FastRendererLabel = new QLabel(); - FastRendererLabel->setFixedSize(Buttonsize.width() * 2 + 15,(Buttonsize.height() * 2) / 3); - FastRendererLabel->setText("Fast Render: On"); + FastRendererLabel = new QLabel(); + FastRendererLabel->setFixedSize(Buttonsize.width() * 2 + 15,(Buttonsize.height() * 2) / 3); + FastRendererLabel->setText("Fast Render: On"); ScrollArea = new QScrollArea(this); ScrollArea->setBackgroundRole(QPalette::Dark); @@ -829,7 +829,7 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(PlainButton,3,2,1,1); mainLayout->addWidget(PolygonButton,3,3,1,1); mainLayout->addWidget(RectangleButton,4,2,1,1); - mainLayout->addWidget(GradientButton,4,3,1,1); + mainLayout->addWidget(GradientButton,4,3,1,1); mainLayout->addWidget(WidthLine,5,2,1,2); mainLayout->addWidget(EditLineWidth,6,2,1,2); mainLayout->addWidget(innerAlphaLine,7,2,1,2); @@ -841,7 +841,7 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2); mainLayout->addWidget(dimActive,13,2,1,2); mainLayout->addWidget(dimCanvas,14,2,1,2); - mainLayout->addWidget(FastRendererLabel,15,2,1,2); + mainLayout->addWidget(FastRendererLabel,15,2,1,2); mainLayout->setHorizontalSpacing(0); } From 8980571c1aed627000e844e3f55d453939d2b2c3 Mon Sep 17 00:00:00 2001 From: Conrad Date: Tue, 28 Jan 2020 11:48:22 +0100 Subject: [PATCH 13/37] Moved Tools to Menubar --- 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 acf8457..c80b15b 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -660,7 +660,6 @@ void IntelliPhotoGui::createMenus(){ optionMenu = new QMenu(tr("&Options"), this); optionMenu->addAction(actionGoBack); optionMenu->addAction(actionGoForward); - optionMenu->addMenu(toolMenu); optionMenu->addSeparator(); optionMenu->addMenu(renderMenu); optionMenu->addAction(actionChangeDim); @@ -674,6 +673,7 @@ void IntelliPhotoGui::createMenus(){ menuBar()->addMenu(fileMenu); menuBar()->addMenu(optionMenu); menuBar()->addMenu(layerMenu); + menuBar()->addMenu(toolMenu); menuBar()->addMenu(helpMenu); } From ed462e4feca291b188e0c38e04820af4689cf71b Mon Sep 17 00:00:00 2001 From: Conrad Date: Tue, 28 Jan 2020 11:50:14 +0100 Subject: [PATCH 14/37] Unified Menu Bar Text --- src/GUI/IntelliPhotoGui.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index c80b15b..6d75ff4 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -430,39 +430,39 @@ void IntelliPhotoGui::createActions(){ connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim())); connect(dimCanvas, SIGNAL(clicked()), this, SLOT(slotChangeDim())); - actionSetActiveLayer = new QAction(tr("&set Active"), this); + actionSetActiveLayer = new QAction(tr("&Set Active"), this); actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer())); - actionSetActiveAlpha = new QAction(tr("&set Alpha"), this); + actionSetActiveAlpha = new QAction(tr("&Set Alpha"), this); 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 = 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 = new QAction(tr("&Move Up"), this); actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up)); connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp())); - actionMovePositionDown = new QAction(tr("&move Down"), this); + actionMovePositionDown = new QAction(tr("&Move Down"), this); actionMovePositionDown->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down)); connect(actionMovePositionDown, SIGNAL(triggered()), this, SLOT(slotPositionMoveDown())); - actionMovePositionLeft = new QAction(tr("&move Left"), this); + actionMovePositionLeft = new QAction(tr("&Move Left"), this); actionMovePositionLeft->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left)); connect(actionMovePositionLeft, SIGNAL(triggered()), this, SLOT(slotPositionMoveLeft())); - actionMovePositionRight = new QAction(tr("&move Right"), this); + actionMovePositionRight = new QAction(tr("&Move Right"), this); actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right)); connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight())); - actionMoveLayerUp = new QAction(tr("&move Layer Up"), this); + actionMoveLayerUp = new QAction(tr("&Move Layer Up"), this); 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())); From db07e6fcb00f93592fcb78e91184a887daded231 Mon Sep 17 00:00:00 2001 From: Mienek Date: Tue, 28 Jan 2020 11:52:15 +0100 Subject: [PATCH 15/37] first fix history works again, can load deleted layer --- knownBugs.txt | 2 +- src/GUI/IntelliPhotoGui.cpp | 1 + src/Layer/PaintingArea.cpp | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/knownBugs.txt b/knownBugs.txt index 824bf08..791709e 100644 --- a/knownBugs.txt +++ b/knownBugs.txt @@ -1,4 +1,4 @@ history tool doesnt load polygon data on undo iff project was loaded -history tool doesnt save delete Layer +history tool doesnt save delete Layer - done Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720) Heap block at 0000000025422990 modified at 0000000025422A28 past requested size of 88 \ No newline at end of file diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d3ab832..a5fed3d 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -158,6 +158,7 @@ void IntelliPhotoGui::slotDeleteLayer(){ // Create New Layer if(ok1) { paintingArea->deleteLayer(layerNumber - 1); + paintingArea->historyadd(); UpdateGui(); } } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 1b4236b..79e3cae 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -524,6 +524,10 @@ void PaintingArea::historyGoBack(){ if (historyPresent != historyMaxPast) { if (--historyPresent == -1) historyPresent = 99; + if (layerBundle.size() > history[static_cast(historyPresent)].size()) + activeLayer--; + if ((layerBundle.size() == 0) && (layerBundle.size() < history[static_cast(historyPresent)].size())) + activeLayer++; layerBundle = history[static_cast(historyPresent)]; } this->guiReference->UpdateGui(); @@ -533,6 +537,10 @@ void PaintingArea::historyGoForward(){ if (historyPresent != historyMaxFuture) { if (++historyPresent == 100) historyPresent = 0; + if (layerBundle.size() > history[static_cast(historyPresent)].size()) + activeLayer--; + if ((layerBundle.size() == 0) && (layerBundle.size() < history[static_cast(historyPresent)].size())) + activeLayer++; layerBundle = history[static_cast(historyPresent)]; } this->guiReference->UpdateGui(); From a7deccac6b45a6dc9ad32e36610ed6a875d19a95 Mon Sep 17 00:00:00 2001 From: Conrad Date: Tue, 28 Jan 2020 12:33:05 +0100 Subject: [PATCH 16/37] Added Improved Z Labels --- src/GUI/IntelliPhotoGui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 6d75ff4..5b85dd9 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -458,11 +458,11 @@ void IntelliPhotoGui::createActions(){ actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right)); connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight())); - actionMoveLayerUp = new QAction(tr("&Move Layer Up"), this); + actionMoveLayerUp = new QAction(tr("&Move Forth"), this); 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 Back"), this); actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down)); connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown())); From faec9a7f5eb771ce7a010a3540e5562b66312905 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Tue, 28 Jan 2020 21:51:38 +0100 Subject: [PATCH 17/37] Add gradient tool icon --- src/icons/gradient-tool.svg | 135 ++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 src/icons/gradient-tool.svg diff --git a/src/icons/gradient-tool.svg b/src/icons/gradient-tool.svg new file mode 100644 index 0000000..8953735 --- /dev/null +++ b/src/icons/gradient-tool.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + From 7bf881225078d35bbcdabfdf0a6f8fdea16f606a Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Tue, 28 Jan 2020 21:52:03 +0100 Subject: [PATCH 18/37] Remove icon folder in docs folder --- docs/Icons/circle-tool.svg | 94 ---------------- docs/Icons/eraser-tool.svg | 109 ------------------ docs/Icons/flood-fill-tool.svg | 194 --------------------------------- docs/Icons/line-tool.svg | 99 ----------------- docs/Icons/magic-wand-tool.svg | 169 ---------------------------- docs/Icons/pen-tool.svg | 105 ------------------ docs/Icons/plain-tool.svg | 125 --------------------- docs/Icons/polygon-tool.svg | 117 -------------------- docs/Icons/rectangle-tool.svg | 101 ----------------- 9 files changed, 1113 deletions(-) delete mode 100644 docs/Icons/circle-tool.svg delete mode 100644 docs/Icons/eraser-tool.svg delete mode 100644 docs/Icons/flood-fill-tool.svg delete mode 100644 docs/Icons/line-tool.svg delete mode 100644 docs/Icons/magic-wand-tool.svg delete mode 100644 docs/Icons/pen-tool.svg delete mode 100644 docs/Icons/plain-tool.svg delete mode 100644 docs/Icons/polygon-tool.svg delete mode 100644 docs/Icons/rectangle-tool.svg diff --git a/docs/Icons/circle-tool.svg b/docs/Icons/circle-tool.svg deleted file mode 100644 index a6cc0e4..0000000 --- a/docs/Icons/circle-tool.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/docs/Icons/eraser-tool.svg b/docs/Icons/eraser-tool.svg deleted file mode 100644 index cdc518d..0000000 --- a/docs/Icons/eraser-tool.svg +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/docs/Icons/flood-fill-tool.svg b/docs/Icons/flood-fill-tool.svg deleted file mode 100644 index 980bb7a..0000000 --- a/docs/Icons/flood-fill-tool.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Icons/line-tool.svg b/docs/Icons/line-tool.svg deleted file mode 100644 index 6ff03e8..0000000 --- a/docs/Icons/line-tool.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/docs/Icons/magic-wand-tool.svg b/docs/Icons/magic-wand-tool.svg deleted file mode 100644 index 71f019d..0000000 --- a/docs/Icons/magic-wand-tool.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/docs/Icons/pen-tool.svg b/docs/Icons/pen-tool.svg deleted file mode 100644 index 5dd9782..0000000 --- a/docs/Icons/pen-tool.svg +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/docs/Icons/plain-tool.svg b/docs/Icons/plain-tool.svg deleted file mode 100644 index 6dee885..0000000 --- a/docs/Icons/plain-tool.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/docs/Icons/polygon-tool.svg b/docs/Icons/polygon-tool.svg deleted file mode 100644 index 7602729..0000000 --- a/docs/Icons/polygon-tool.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/docs/Icons/rectangle-tool.svg b/docs/Icons/rectangle-tool.svg deleted file mode 100644 index 3056a02..0000000 --- a/docs/Icons/rectangle-tool.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - From 7fb268dfa80cb6701d1dd079368532bcf0153f2a Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 29 Jan 2020 09:47:10 +0100 Subject: [PATCH 19/37] Unified Naming in Menubar --- 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 5b85dd9..8ebcae0 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -421,7 +421,7 @@ void IntelliPhotoGui::createActions(){ connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer())); // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() - actionDeleteLayer = new QAction(tr("&Delete Layer..."), this); + actionDeleteLayer = new QAction(tr("&Delete Layer"), this); actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer())); @@ -438,7 +438,7 @@ 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 = new QAction(tr("&Set New Polygondata"), this); actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P)); connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon())); @@ -606,7 +606,7 @@ void IntelliPhotoGui::createMenus(){ renderMenu->addAction(actionUpdateRenderSettingsOff); //Attach all Layer Creations to Menu - layerCreationMenu = new QMenu(tr("&Create new Layer"), this); + layerCreationMenu = new QMenu(tr("&Create New Layer"), this); layerCreationMenu->addAction(actionCreateNewRasterLayer); layerCreationMenu->addAction(actionCreateNewShapedLayer); From 48ea8f14f03c32f62935d5870649973768c369b9 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 29 Jan 2020 09:54:34 +0100 Subject: [PATCH 20/37] Added Shortcut for Gradient Tool - Added Shortcut for Gradient Tool - Moved Color Menu To Bar --- src/GUI/IntelliPhotoGui.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 8ebcae0..26ef973 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -529,6 +529,7 @@ void IntelliPhotoGui::createActions(){ connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); actionCreateGradientTool = new QAction(tr("&Gradient"),this); + actionCreateGradientTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_G)); connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); @@ -600,12 +601,12 @@ void IntelliPhotoGui::createMenus(){ fileMenu->addSeparator(); fileMenu->addAction(actionExit); - //Attach all actions to Render Settings + // Attach all actions to Render Settings renderMenu = new QMenu(tr("&Fast Renderer"), this); renderMenu->addAction(actionUpdateRenderSettingsOn); renderMenu->addAction(actionUpdateRenderSettingsOff); - //Attach all Layer Creations to Menu + // Attach all Layer Creations to Menu layerCreationMenu = new QMenu(tr("&Create New Layer"), this); layerCreationMenu->addAction(actionCreateNewRasterLayer); layerCreationMenu->addAction(actionCreateNewShapedLayer); @@ -627,14 +628,14 @@ void IntelliPhotoGui::createMenus(){ layerMenu->addSeparator(); layerMenu->addAction(actionDeleteLayer); - //Attach all Color Options + // 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); + // Attach all Tool Creation Actions + toolCreationMenu = new QMenu(tr("&Tool Selection"), this); toolCreationMenu->addAction(actionCreateCircleTool); toolCreationMenu->addAction(actionCreateFloodFillTool); toolCreationMenu->addAction(actionCreateGradientTool); @@ -644,17 +645,15 @@ void IntelliPhotoGui::createMenus(){ toolCreationMenu->addAction(actionCreatePolygonTool); toolCreationMenu->addAction(actionCreateRectangleTool); - //Attach all Tool Setting Actions - toolSettingsMenu = new QMenu(tr("&Toolsettings"), this); + // Attach all Tool Setting Actions + toolSettingsMenu = new QMenu(tr("&Tool Settings"), this); toolSettingsMenu->addAction(actionSetWidth); toolSettingsMenu->addAction(actionSetInnerAlpha); - //Attach all Tool Options + // Attach all Tool Options toolMenu = new QMenu(tr("&Tools"), this); toolMenu->addMenu(toolCreationMenu); - toolMenu->addMenu(toolSettingsMenu); - toolMenu->addSeparator(); - toolMenu->addMenu(colorMenu); + toolMenu->addMenu(toolSettingsMenu); // Attach all actions to Options optionMenu = new QMenu(tr("&Options"), this); @@ -674,6 +673,7 @@ void IntelliPhotoGui::createMenus(){ menuBar()->addMenu(optionMenu); menuBar()->addMenu(layerMenu); menuBar()->addMenu(toolMenu); + menuBar()->addMenu(colorMenu); menuBar()->addMenu(helpMenu); } From 6dbc23c0ae03ff5c767e719e4d45eb38b87d20d0 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 29 Jan 2020 09:59:39 +0100 Subject: [PATCH 21/37] Renamed History Tool Labels For Conventions --- src/GUI/IntelliPhotoGui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 26ef973..5c7eaea 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -578,11 +578,11 @@ void IntelliPhotoGui::createActions(){ actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha())); - actionGoBack = new QAction(tr("&Go back"),this); + actionGoBack = new QAction(tr("&Undo"),this); actionGoBack->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Z)); connect(actionGoBack, SIGNAL(triggered()), this, SLOT(slotGoBack())); - actionGoForward = new QAction(tr("&Go forward"),this); + actionGoForward = new QAction(tr("&Redo"),this); actionGoForward->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Y)); connect(actionGoForward, SIGNAL(triggered()), this, SLOT(slotGoForward())); } From 6ac4e4783ae7d4436ba808389665426bb12f9146 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 29 Jan 2020 10:04:05 +0100 Subject: [PATCH 22/37] Removed Shortcuts From Trivial Options --- src/GUI/IntelliPhotoGui.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 5c7eaea..09d4840 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -534,13 +534,11 @@ void IntelliPhotoGui::createActions(){ connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); // Create about action and tie to IntelliPhotoGui::about() - actionAboutDialog = new QAction(tr("&About"), this); - actionAboutDialog->setShortcut(Qt::Key_F2); + actionAboutDialog = new QAction(tr("&About"), this); 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 = new QAction(tr("About &Qt"), this); connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); @@ -607,7 +605,7 @@ void IntelliPhotoGui::createMenus(){ renderMenu->addAction(actionUpdateRenderSettingsOff); // Attach all Layer Creations to Menu - layerCreationMenu = new QMenu(tr("&Create New Layer"), this); + layerCreationMenu = new QMenu(tr("&Create Layer"), this); layerCreationMenu->addAction(actionCreateNewRasterLayer); layerCreationMenu->addAction(actionCreateNewShapedLayer); From c8812a8c00bfe0a7645d17e9ffffdc500fc9c20c Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 29 Jan 2020 10:04:40 +0100 Subject: [PATCH 23/37] Updated Polygon Label --- 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 09d4840..e1b3fd4 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -438,7 +438,7 @@ 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 = new QAction(tr("&Set Polygon Data"), this); actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P)); connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon())); From fd1849475586c5fd83816897a0f0bcd75dcb0ecf Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 29 Jan 2020 10:28:25 +0100 Subject: [PATCH 24/37] Bumped Version --- conf/intelliphoto_dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/intelliphoto_dox b/conf/intelliphoto_dox index 8c10cda..c1d0642 100644 --- a/conf/intelliphoto_dox +++ b/conf/intelliphoto_dox @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = IntelliPhoto -PROJECT_NUMBER = 0.6 +PROJECT_NUMBER = 0.7 PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = docs From 2b553f5f4159b35db500197d634864a932d2426a Mon Sep 17 00:00:00 2001 From: AshBastian Date: Wed, 29 Jan 2020 13:21:34 +0100 Subject: [PATCH 25/37] =?UTF-8?q?Icon=20Gradient=20eingef=C3=BCgt=20in=20G?= =?UTF-8?q?UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Bilder.qrc | 1 + src/GUI/IntelliPhotoGui.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Bilder.qrc b/src/Bilder.qrc index 01e8468..f2c6dfa 100644 --- a/src/Bilder.qrc +++ b/src/Bilder.qrc @@ -10,5 +10,6 @@ icons/line-tool.svg icons/flood-fill-tool.svg icons/plain-tool.svg + icons/gradient-tool.svg diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index d3ab832..cd15dcf 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -705,7 +705,7 @@ void IntelliPhotoGui::createGui(){ FloodFillButton->setIconSize(Buttonsize); FloodFillButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/icon.png"); + preview = QPixmap(":/Icons/Buttons/icons/gradient-tool.svg"); GradientButton = new QPushButton(); GradientButton->setFixedSize(Buttonsize); GradientButton->setIcon(preview); From a9435e6d5664f78f81797fa325be1ccaeb8ce2b4 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Wed, 29 Jan 2020 13:35:54 +0100 Subject: [PATCH 26/37] First Change Buttonsize --- src/GUI/IntelliPhotoGui.cpp | 7 +++++++ src/GUI/IntelliPhotoGui.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index e1b3fd4..787c9a8 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include // IntelliPhotoGui constructor IntelliPhotoGui::IntelliPhotoGui(){ @@ -689,6 +691,11 @@ void IntelliPhotoGui::createGui(){ paintingArea = new PaintingArea(1280, 720); paintingArea->guiReference = this; + QScreen *screen = QGuiApplication::primaryScreen(); + QRect screenGeometry = screen->geometry(); + Buttonsize.setWidth(screenGeometry.width()/10); + Buttonsize.setHeight(screenGeometry.height()/10); + preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); CircleButton = new QPushButton(); CircleButton->setFixedSize(Buttonsize); diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 25f6145..aeb2ede 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -124,7 +124,7 @@ PaintingArea* paintingArea; QPixmap preview; //size of all buttons -const QSize Buttonsize = QSize(35,35); +QSize Buttonsize; //buttons used for gui QPushButton* CircleButton; From fe9f4263f98ac5cabc058ab13c511320a9fe48e9 Mon Sep 17 00:00:00 2001 From: AshBastian Date: Wed, 29 Jan 2020 13:47:52 +0100 Subject: [PATCH 27/37] =?UTF-8?q?Button=20Size=20an=20Destopaufl=C3=B6sung?= =?UTF-8?q?=20gekoppelt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/GUI/IntelliPhotoGui.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index b0e9137..b0c4de6 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -332,6 +332,7 @@ void IntelliPhotoGui::slotEnterPressed(){ void IntelliPhotoGui::slotResetTools(){ CircleButton->setChecked(false); FloodFillButton->setChecked(false); + GradientButton->setChecked(false); LineButton->setChecked(false); PenButton->setChecked(false); PlainButton->setChecked(false); @@ -693,8 +694,8 @@ void IntelliPhotoGui::createGui(){ QScreen *screen = QGuiApplication::primaryScreen(); QRect screenGeometry = screen->geometry(); - Buttonsize.setWidth(screenGeometry.width()/10); - Buttonsize.setHeight(screenGeometry.height()/10); + Buttonsize.setWidth(screenGeometry.width()/20); + Buttonsize.setHeight(screenGeometry.height()/20); preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); CircleButton = new QPushButton(); From 3eb61abb94c7e77b8823ee7d408512c8949c85cf Mon Sep 17 00:00:00 2001 From: Mienek Date: Thu, 30 Jan 2020 12:17:28 +0100 Subject: [PATCH 28/37] second fix all kown bugs according to history, fixed --- src/GUI/IntelliPhotoGui.cpp | 2 ++ src/IntelliHelper/IntelliDatamanager.cpp | 1 + src/Layer/PaintingArea.cpp | 17 ++++++++++------- src/Layer/PaintingArea.h | 3 +-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index a5fed3d..e199057 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -103,6 +103,7 @@ void IntelliPhotoGui::slotCreateNewRasterLayer(){ // Create New Layer if (ok1&&ok2) { paintingArea->addLayer(width,height,0,0,255,ImageType::RASTERIMAGE); + paintingArea->historyadd(); UpdateGui(); } } @@ -122,6 +123,7 @@ void IntelliPhotoGui::slotCreateNewShapedLayer(){ // Create New Layer if (ok1&&ok2) { paintingArea->addLayer(width, height, 0, 0,255, ImageType::SHAPEDIMAGE); + paintingArea->historyadd(); UpdateGui(); } } diff --git a/src/IntelliHelper/IntelliDatamanager.cpp b/src/IntelliHelper/IntelliDatamanager.cpp index a704f64..828c0ee 100644 --- a/src/IntelliHelper/IntelliDatamanager.cpp +++ b/src/IntelliHelper/IntelliDatamanager.cpp @@ -94,6 +94,7 @@ bool IntelliDatamanager::loadProject(PaintingArea* Canvas, QString filePath){ } Canvas->setRenderSettings(static_cast(rendersetting)); openFile.close(); + Canvas->historyadd(); return true; } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 79e3cae..ff8696a 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -106,7 +106,6 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff } this->layerBundle.push_back(newLayer); activeLayer = static_cast(layerBundle.size()) - 1; - historyadd(); return activeLayer; } @@ -524,10 +523,12 @@ void PaintingArea::historyGoBack(){ if (historyPresent != historyMaxPast) { if (--historyPresent == -1) historyPresent = 99; + if (activeLayer == -1) + activeLayer = 0; if (layerBundle.size() > history[static_cast(historyPresent)].size()) - activeLayer--; - if ((layerBundle.size() == 0) && (layerBundle.size() < history[static_cast(historyPresent)].size())) - activeLayer++; + activeLayer = static_cast(history[static_cast(historyPresent)].size())-1; + if (history[static_cast(historyPresent)].size() == 0) + activeLayer = -1; layerBundle = history[static_cast(historyPresent)]; } this->guiReference->UpdateGui(); @@ -537,10 +538,12 @@ void PaintingArea::historyGoForward(){ if (historyPresent != historyMaxFuture) { if (++historyPresent == 100) historyPresent = 0; + if (activeLayer == -1) + activeLayer = 0; if (layerBundle.size() > history[static_cast(historyPresent)].size()) - activeLayer--; - if ((layerBundle.size() == 0) && (layerBundle.size() < history[static_cast(historyPresent)].size())) - activeLayer++; + activeLayer = static_cast(history[static_cast(historyPresent)].size())-1; + if (history[static_cast(historyPresent)].size() == 0) + activeLayer = -1; layerBundle = history[static_cast(historyPresent)]; } this->guiReference->UpdateGui(); diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 6aafff1..03dfc79 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -223,6 +223,7 @@ std::vector* getLayerBundle(); IntelliToolsettings Toolsettings; IntelliColorPicker colorPicker; +void historyadd(); void historyGoBack(); void historyGoForward(); @@ -285,8 +286,6 @@ int historyMaxPast = 0; int historyMaxFuture = 0; int historyPresent = 0; -void historyadd(); - }; #endif From 6c136d3299df019db8e0c89b1c72fb64efb9a4a9 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Thu, 30 Jan 2020 13:30:41 +0100 Subject: [PATCH 29/37] all comments for headers --- src/GUI/IntelliPhotoGui.cpp | 64 ++--- src/GUI/IntelliPhotoGui.h | 480 +++++++++++++++++++++++++++++++++--- 2 files changed, 480 insertions(+), 64 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 7166490..a92c481 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -240,13 +240,13 @@ void IntelliPhotoGui::slotSetActiveLayer(){ } } -void IntelliPhotoGui::slotUpdateRenderSettingsOn(){ +void IntelliPhotoGui::slotUpdateFastRenderSettingsOn(){ paintingArea->setRenderSettings(true); FastRendererLabel->setText("Fast Render: On"); UpdateGui(); } -void IntelliPhotoGui::slotUpdateRenderSettingsOff(){ +void IntelliPhotoGui::slotUpdateFastRenderSettingsOff(){ paintingArea->setRenderSettings(false); FastRendererLabel->setText("Fast Render: Off"); UpdateGui(); @@ -327,7 +327,7 @@ void IntelliPhotoGui::slotEnterPressed(){ paintingArea->Toolsettings.setInnerAlpha(string.toInt()); } -void IntelliPhotoGui::slotResetTools(){ +void IntelliPhotoGui::slotResetToolButtons(){ CircleButton->setChecked(false); FloodFillButton->setChecked(false); LineButton->setChecked(false); @@ -467,13 +467,13 @@ void IntelliPhotoGui::createActions(){ 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())); + actionUpdateFastRenderSettingsOn = new QAction(tr("&On"), this); + actionUpdateFastRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A)); + connect(actionUpdateFastRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOn())); - actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this); - actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D)); - connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff())); + actionUpdateFastRenderSettingsOff = new QAction(tr("&Off"), this); + actionUpdateFastRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D)); + connect(actionUpdateFastRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOff())); //Create Color Actions here actionColorPickerFirstColor = new QAction(tr("&Main"), this); @@ -494,42 +494,42 @@ 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)); - connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); actionCreateGradientTool = new QAction(tr("&Gradient"),this); - connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); // Create about action and tie to IntelliPhotoGui::about() @@ -545,28 +545,28 @@ void IntelliPhotoGui::createActions(){ connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); - connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool())); - connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool())); - connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool())); - connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool())); - connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool())); - connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool())); - connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool())); - connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool())); actionSetWidth = new QAction(tr("&Set Width"),this); @@ -602,8 +602,8 @@ void IntelliPhotoGui::createMenus(){ //Attach all actions to Render Settings renderMenu = new QMenu(tr("&Fast Renderer"), this); - renderMenu->addAction(actionUpdateRenderSettingsOn); - renderMenu->addAction(actionUpdateRenderSettingsOff); + renderMenu->addAction(actionUpdateFastRenderSettingsOn); + renderMenu->addAction(actionUpdateFastRenderSettingsOff); //Attach all Layer Creations to Menu layerCreationMenu = new QMenu(tr("&Create new Layer"), this); @@ -783,10 +783,10 @@ void IntelliPhotoGui::createGui(){ SwitchColorButton->setIcon(preview); SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height())); - ActiveLayerLine = new QLabel(); + ActiveLayerLabel = new QLabel(); QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1); - ActiveLayerLine->setText(string); - ActiveLayerLine->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3); + ActiveLayerLabel->setText(string); + ActiveLayerLabel->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); if(activePicture) { @@ -837,7 +837,7 @@ void IntelliPhotoGui::createGui(){ 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(ActiveLayerLabel,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); @@ -923,7 +923,7 @@ void IntelliPhotoGui::setToolWidth(int value){ void IntelliPhotoGui::UpdateGui(){ QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1); - ActiveLayerLine->setText(string); + ActiveLayerLabel->setText(string); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); if(activePicture) { diff --git a/src/GUI/IntelliPhotoGui.h b/src/GUI/IntelliPhotoGui.h index 25f6145..434d3a2 100644 --- a/src/GUI/IntelliPhotoGui.h +++ b/src/GUI/IntelliPhotoGui.h @@ -43,8 +43,15 @@ public: */ IntelliPhotoGui(); +/*! + * \brief UpdateGui a function to update all gui elements. + */ void UpdateGui(); +/*! + * \brief setToolWidth stes a width to the tool + * \param value - the width of the tool + */ void setToolWidth(int value); protected: @@ -54,182 +61,591 @@ protected: void closeEvent(QCloseEvent*event) override; private slots: + +/*! + * \brief slotOpen opens a new image + */ void slotOpen(); + +/*! + * \brief slotSave saves the current canvas + */ void slotSave(); -// layer slots here +/*! + * \brief slotCreateNewRasterLayer creates a new rasterImage + */ void slotCreateNewRasterLayer(); + +/*! + * \brief slotCreateNewShapedLayer creates a new shapedImage + */ void slotCreateNewShapedLayer(); + +/*! + * \brief slotDeleteLayer deletes a layer + */ void slotDeleteLayer(); + +/*! + * \brief slotSetActiveLayer sets a layer to be active + */ void slotSetActiveLayer(); + +/*! + * \brief slotSetActiveAlpha stes the alpha value of the active layer + */ void slotSetActiveAlpha(); + +/*! + * \brief slotSetPolygon sets a polygon to the active layer + */ void slotSetPolygon(); + +/*! + * \brief slotPositionMoveUp moves the current layer to the front + */ void slotPositionMoveUp(); + +/*! + * \brief slotPositionMoveDown moves the crrent layer to the back + */ void slotPositionMoveDown(); + +/*! + * \brief slotPositionMoveLeft moves the current layer left + */ void slotPositionMoveLeft(); + +/*! + * \brief slotPositionMoveRight moves the current layer right + */ void slotPositionMoveRight(); + +/*! + * \brief slotMoveLayerUp moves the current layer up + */ void slotMoveLayerUp(); + +/*! + * \brief slotMoveLayerDown moves the current layer down + */ void slotMoveLayerDown(); -void slotUpdateRenderSettingsOn(); -void slotUpdateRenderSettingsOff(); +/*! + * \brief slotUpdateFastRenderSettingsOn activates the fast renderer + */ +void slotUpdateFastRenderSettingsOn(); +/*! + * \brief slotUpdateFastRenderSettingsOff deactivates the fast render + */ +void slotUpdateFastRenderSettingsOff(); + +/*! + * \brief slotSetFirstColor sets the first color + */ void slotSetFirstColor(); + +/*! + * \brief slotSetSecondColor sets the second color + */ void slotSetSecondColor(); + +/*! + * \brief slotSwapColor swaps first and second color + */ void slotSwapColor(); +/*! + * \brief slotCreatePenTool creates the pen tool + */ void slotCreatePenTool(); + +/*! + * \brief slotCreatePlainTool creates the plain tool + */ void slotCreatePlainTool(); + +/*! + * \brief slotCreateLineTool creates the line tool + */ void slotCreateLineTool(); + +/*! + * \brief slotCreateRectangleTool creates the rectangle tool + */ void slotCreateRectangleTool(); + +/*! + * \brief slotCreateCircleTool creates the cricle tool + */ void slotCreateCircleTool(); + +/*! + * \brief slotCreatePolygonTool creates the polygon tool + */ void slotCreatePolygonTool(); + +/*! + * \brief slotCreateFloodFillTool creates the floodfill tool + */ void slotCreateFloodFillTool(); + +/*! + * \brief slotCreateGradientTool creates the gradient tool + */ void slotCreateGradientTool(); +/*! + * \brief slotAboutDialog displays the about dialog + */ void slotAboutDialog(); +/*! + * \brief slotChangeDim changes the dimension of the canvas + */ void slotChangeDim(); +/*! + * \brief slotEnterPressed read current input of input boxes, and adjusts settings + */ void slotEnterPressed(); +/*! + * \brief slotSetWidth sets the width of the tool + */ void slotSetWidth(); + +/*! + * \brief slotSetInnerAlpha sets the inner alpha of the tool + */ void slotSetInnerAlpha(); -void slotResetTools(); +/*! + * \brief slotResetTools resets all tool Buttons to unclikced + */ +void slotResetToolButtons(); +/*! + * \brief slotGoBack undoes the last action + */ void slotGoBack(); + +/*! + * \brief slotGoForward redoes the last action + */ void slotGoForward(); private: -//setup functions for gui +/*! + * \brief createActions creates all actions + */ void createActions(); + +/*! + * \brief createMenus creates all menus + */ void createMenus(); + +/*! + * \brief createGui sets up the gui + */ void createGui(); + +/*! + * \brief setIntelliStyle sets the stylesheet of the gui + */ void setIntelliStyle(); -// Will check if changes have occurred since last save +/*! + * \brief maybeSave chekcs if the canvas has unsaved work + * \return return true if there is unsaved work, false otherwise + */ bool maybeSave(); -// Opens the Save dialog and saves + +/*! + * \brief saveFile saves the canvas + * \param fileFormat the ileformat to save into + * \return true if saving worked, false otherwise + */ bool saveFile(const QByteArray &fileFormat); -//basic to set tool values to begin +/*! + * \brief setDefaultValues sets basic tool values + */ void setDefaultValues(); -// What we'll draw on +/*! + * \brief paintingArea the logic manager of the backbone + */ PaintingArea* paintingArea; -//used to display a preview of the active layer +/*! + * \brief preview a small pixmap to show the active layer + */ QPixmap preview; -//size of all buttons +/*! + * \brief Buttonsize the size of all standard buttons + */ const QSize Buttonsize = QSize(35,35); -//buttons used for gui +/*! + * \brief CircleButton for creating a circle Tool + */ QPushButton* CircleButton; + +/*! + * \brief FloodFillButton for creating a floodfill Tool + */ QPushButton* FloodFillButton; + +/*! + * \brief GradientButton for creating a gradient Tool + */ QPushButton* GradientButton; + +/*! + * \brief LineButton for creating a line Tool. + */ QPushButton* LineButton; + +/*! + * \brief PenButton for creating a pen tool. + */ QPushButton* PenButton; + +/*! + * \brief PlainButton for creating a plain Tool. + */ QPushButton* PlainButton; + +/*! + * \brief PolygonButton for creating a Polygon Tool. + */ QPushButton* PolygonButton; + +/*! + * \brief RectangleButton for creating a Rectangle Tool. + */ QPushButton* RectangleButton; + +/*! + * \brief FirstColorButton for setting the First color. + */ QPushButton* FirstColorButton; + +/*! + * \brief SecondColorButton for setting the Second color. + */ QPushButton* SecondColorButton; + +/*! + * \brief SwitchColorButton for switching second and first color + */ QPushButton* SwitchColorButton; + +/*! + * \brief dimActive for displaying the dimesnion of the active layer + */ QPushButton* dimActive; + +/*! + * \brief dimCanvas for displaying the dimension of the canvas + */ QPushButton* dimCanvas; -//labels used for gui +/*! + * \brief WidthLine to indicate the line width + */ QLabel* WidthLine; + +/*! + * \brief innerAlphaLine to indicate the inner alpha + */ QLabel* innerAlphaLine; -QLabel* ActiveLayerLine; + +/*! + * \brief ActiveLayerLine to indicate the active Layer + */ +QLabel* ActiveLayerLabel; + +/*! + * \brief ActiveLayerImageLabel to indicate the active Image + */ QLabel* ActiveLayerImageLabel; + +/*! + * \brief FastRendererLabel to indicate render settings + */ QLabel* FastRendererLabel; -//scroll area to display canvas +/*! + * \brief ScrollArea to scroll the painting area on + */ QScrollArea* ScrollArea; -//line edits used for gui +/*! + * \brief EditLineWidth to get the input of the line width + */ QLineEdit* EditLineWidth; + +/*! + * \brief EditLineInnerAlpha to get the input of the inner alpha + */ QLineEdit* EditLineInnerAlpha; -//int validator used for gui +/*! + * \brief ValidatorLineWidth to limit input + */ QIntValidator* ValidatorLineWidth; + +/*! + * \brief ValidatorInnerAlpha to limit input + */ QIntValidator* ValidatorInnerAlpha; -// The menu widgets +/*! + * \brief saveAsMenu to display save options + */ QMenu* saveAsMenu; + +/*! + * \brief fileMenu to display file options + */ QMenu* fileMenu; + +/*! + * \brief renderMenu to display render options + */ QMenu* renderMenu; + +/*! + * \brief optionMenu to display general options + */ QMenu* optionMenu; + +/*! + * \brief layerCreationMenu to display layer creation options + */ QMenu* layerCreationMenu; + +/*! + * \brief layerMenu to display layer options + */ QMenu* layerMenu; + +/*! + * \brief colorMenu to display color options + */ QMenu* colorMenu; + +/*! + * \brief toolCreationMenu to display tool creation options + */ QMenu* toolCreationMenu; + +/*! + * \brief toolSettingsMenu to display settings options + */ QMenu* toolSettingsMenu; + +/*! + * \brief toolMenu to display tool options + */ QMenu* toolMenu; + +/*! + * \brief helpMenu to display the help options + */ QMenu* helpMenu; -// All the actions that can occur -// meta image actions (need further modularisation) +/*! + * \brief actionOpen to open a project + */ QAction* actionOpen; + +/*! + * \brief actionExit to exit the project + */ QAction* actionExit; -//Rendersetting actions -QAction*actionUpdateRenderSettingsOn; -QAction*actionUpdateRenderSettingsOff; +/*! + * \brief actionUpdateFastRenderSettingsOn to set fast render settings to on + */ +QAction* actionUpdateFastRenderSettingsOn; -// color Picker actions +/*! + * \brief actionUpdateFastRenderSettingsOff to set fast render settings to false; + */ +QAction* actionUpdateFastRenderSettingsOff; + +/*! + * \brief actionColorPickerFirstColor to set the first color + */ QAction* actionColorPickerFirstColor; + +/*! + * \brief actionColorPickerSecondColor to set the second color + */ QAction* actionColorPickerSecondColor; + +/*! + * \brief actionColorSwap to swap first and second color + */ QAction* actionColorSwap; -// tool actions +/*! + * \brief actionCreatePenTool to create a pen tool + */ QAction* actionCreatePenTool; + +/*! + * \brief actionCreatePlainTool to create a plain tool + */ QAction* actionCreatePlainTool; + +/*! + * \brief actionCreateLineTool to create a line tool + */ QAction* actionCreateLineTool; + +/*! + * \brief actionCreateRectangleTool to create a rectangle tool + */ QAction* actionCreateRectangleTool; + +/*! + * \brief actionCreateCircleTool to create a circle tool + */ QAction* actionCreateCircleTool; + +/*! + * \brief actionCreatePolygonTool to create a polygon tool + */ QAction* actionCreatePolygonTool; + +/*! + * \brief actionCreateFloodFillTool to create a floodfill tool + */ QAction* actionCreateFloodFillTool; + +/*! + * \brief actionCreateGradientTool to create a gradient tool + */ QAction* actionCreateGradientTool; -// dimension actions +/*! + * \brief actionChangeDim + */ QAction* actionChangeDim; + +/*! + * \brief actionSetWidth to set the width + */ QAction* actionSetWidth; + +/*! + * \brief actionSetInnerAlpha to set the inner alha + */ QAction* actionSetInnerAlpha; -// dialog actions +/*! + * \brief actionAboutDialog to show the + */ QAction* actionAboutDialog; + +/*! + * \brief actionAboutQtDialog to show the qt input dialog + */ QAction* actionAboutQtDialog; -// layer change actions +/*! + * \brief actionCreateNewRasterLayer creates a raster image + */ QAction* actionCreateNewRasterLayer; + +/*! + * \brief actionCreateNewShapedLayer creates a shaped image + */ QAction* actionCreateNewShapedLayer; + +/*! + * \brief actionDeleteLayer deletes a layer + */ QAction* actionDeleteLayer; + +/*! + * \brief actionSetActiveLayer sets a layer to active + */ QAction* actionSetActiveLayer; + +/*! + * \brief actionSetActiveAlpha sets the alpha of the active layer + */ QAction* actionSetActiveAlpha; + +/*! + * \brief actionSetPolygon sets the polygon data to the image + */ QAction* actionSetPolygon; + +/*! + * \brief actionMovePositionUp moves the image up + */ QAction* actionMovePositionUp; + +/*! + * \brief actionMovePositionDown moves the image down + */ QAction* actionMovePositionDown; + +/*! + * \brief actionMovePositionLeft moves the image left + */ QAction* actionMovePositionLeft; + +/*! + * \brief actionMovePositionRight moves the image right + */ QAction* actionMovePositionRight; + +/*! + * \brief actionMoveLayerUp moves the layer to the front + */ QAction* actionMoveLayerUp; + +/*! + * \brief actionMoveLayerDown moves the layer to the back + */ QAction* actionMoveLayerDown; -// actions tied to specific file formats +/*! + * \brief actionSaveAs saves the project as + */ QList actionSaveAs; - -// history actions +/*! + * \brief actionGoBack does a undo action + */ QAction* actionGoBack; + +/*! + * \brief actionGoForward does a redo action + */ QAction* actionGoForward; -// main GUI elements +/*! + * \brief centralGuiWidget the main gui widget to place all others on + */ QWidget* centralGuiWidget; + +/*! + * \brief mainLayout the layout to order all gui elements + */ QGridLayout* mainLayout; }; From 7d744b633326dbc8c0621d80c6f10face5bacd35 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Thu, 30 Jan 2020 15:00:20 +0100 Subject: [PATCH 30/37] Updated user manual --- docs/Manual/assets/change-colors.png | Bin 554 -> 620 bytes docs/Manual/assets/layer-options.png | Bin 2735 -> 1600 bytes docs/Manual/assets/startup.png | Bin 32632 -> 24105 bytes docs/Manual/assets/tool-circle.png | Bin 0 -> 935 bytes docs/Manual/assets/tool-flood-fill.png | Bin 0 -> 2919 bytes docs/Manual/assets/tool-gradient.png | Bin 0 -> 1624 bytes docs/Manual/assets/tool-magic-wand.png | Bin 0 -> 1201 bytes docs/Manual/manual.pdf | Bin 244377 -> 257002 bytes docs/Manual/manual.tex | 122 +++++++++++++------------ 9 files changed, 62 insertions(+), 60 deletions(-) create mode 100644 docs/Manual/assets/tool-circle.png create mode 100644 docs/Manual/assets/tool-flood-fill.png create mode 100644 docs/Manual/assets/tool-gradient.png create mode 100644 docs/Manual/assets/tool-magic-wand.png diff --git a/docs/Manual/assets/change-colors.png b/docs/Manual/assets/change-colors.png index 39cfc514a4ee77737af034c89e575d2d25664972..10c8c6525e0bc7d050e2b4d32e466addff718f0f 100644 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^=YhDDgBeJko)eP}qyhtcLR^6~BO{}zsHnEKwoE8P zCCcvmzTGZ` zF);iGA~m(9_6h%iz~Yn$(9CO|E{-7;x8BZr9dyWn$4z-Uud55A>(jsTAq!%yFrM2R{n-^{v~D%0lI`tK~i8Sv`4x`4lQoy(@(MpJhEoay=~^I*S6 zS$JEJz5T+955-eoEn5B?DD~@S=h5VO@)O^z<5}ugXOd|kw;IB!`y9Nz$ik@Nlb7w^ zn3^y4p6*M}-M>D)TVn72kX-Tak^gNLTshp&_V}QG4p7Tc|H{w7qR-ry@3}u?{eO2$z7bkAA>># d9FYFT_69GwHncsQkP1vT44$rjF6*2UngEk*D60Sf 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)$ diff --git a/docs/Manual/assets/layer-options.png b/docs/Manual/assets/layer-options.png index c237c73c8a128729e1bb103d87fd8418099875eb..3a06a76f4fcabbc66d6b57ebd8554603516a2b42 100644 GIT binary patch literal 1600 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 E0032SMF0Q* diff --git a/docs/Manual/assets/tool-circle.png b/docs/Manual/assets/tool-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..6facabfcba1a7182facb59a77baa31c560219f3d GIT binary patch literal 935 zcmV;Y16cftP)6ciK{6%`g178e&67#J8C85tTH8XFrM92^`S9UUGX9v>ecARr(jA|fLrBP1jw zB_$;$CMG8*CnzW=DJdx`Dk>{0D=aK5EiElBE-o)GFEB7LF)=YRGBPtWGc+_bH8nLh zHa0gmH#j&rIXO8xIyyT$J3Kr*Jv}`>K0ZG`KSMu1L_a@8K0Zx5J5W12Q#m;iv3`)wAdhvO;`*7t+i<$6BQt{^Ae0+c7-OYqtcqJV>ki5F| z=GIsbujrVvyPNv&F~N!fBRZuER(NFy2A%Q*EyF7tDMN)2Sz)Qky8mzdd(2H1Wq7=E z_!UL8U{Q!BQOvSAF0$?W1E>cp1vF#ql+N%p2pOOXYd^LSm4H^sj>!&lZ`nh|qixJ4 zjYk~1@j6tFFm4{1Tuv5c(0zLcCmU2AXcbaJn$LQeBv6~%iO&?o)`8(Tbu9Hco?fRK zB+vhGoK_ri!3F4)Gcqw{5X*z#r@NI^6hN`K-zvBr4FOK%N|j0}EC2YI?UOBcxbrZS?Ul%6C$TC=YL{vxooy002ov JPDHLkV1g?YU3UNg literal 0 HcmV?d00001 diff --git a/docs/Manual/assets/tool-flood-fill.png b/docs/Manual/assets/tool-flood-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..88e49c42d3324e9efe94dfd316a4e2ab0d656f33 GIT binary patch literal 2919 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 R_pJZ`002ovPDHLkV1m$FtGNIG literal 0 HcmV?d00001 diff --git a/docs/Manual/assets/tool-gradient.png b/docs/Manual/assets/tool-gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..430e6fb2742c76fe2fd5539269c5186b3ca60aba GIT binary patch literal 1624 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≶i< z_~P&@@vPT;{Em29kf1ma?yPHGy!DZ|XpYrn*zin|Mnbu&w3J}881@dPy#ecg=%>DQ zVj7qQ2ii;_#w-nw*7oa4oDSCHUz`g>MaSGli0o1o=S$i}XQ+B_J8{V&; zDiYK2)(}K_py&-^WDL6Qiruef0*NYTkTu;w>q@$feK$?gXi9tIc#FMUXJs{*YWbhC zY}NHlBixl|JfeA*5nW>*LO!B@=?ipqgXr=mVf^FxU(kcIB!l$PCoxyNusS)w$xvsg zG`^_H3_545UpIKR#>`&HsdZ)JbKL2}XNlRZGEr1$PzHQ6myW}hnHt7NmS!fHbqXhy zGU2H`A?jlV+|+m6T>5pF3b zF!G`9)X(OIUUXu%=d=BY<`40kD5K+=U~FD0G^F*VoxmPO?TPjoa~2A4^RCQ%89?5{ zZe;b9iaMyyR}(e(nwg`2jCA?5smOBvtKLL#rDNS5zBB?cdH^Tw{G&_3L!D&y&+`a} zS=hMzq9Zg@qBOT_rL;Z8qQ{?W97DhT;>(w3yg z;8Hdy=&I`7eaP&u3?Q~WhHt+RM!&1k@YwMq$oYB-{17SgGE#Yd+hR zL>S+!SlPsRSM%YOs|WvROX;vPW!I03L~KJ$3`Y}ODT*^fJ{`1{(>VRi;7m8}v5h%o z!A&ZKb;;!WP86l+ zYc{XIfn;g^dnMDMmWrI@*C6yK*%9R* z6Z8S)!h?RREZzNacMlk&4wKb4nB*-(r8^s%#CyAhg$dKO14vOjzauW~;1eV+ApYR9 zC_a(!s_(#mW?G*@u-G6dZ@?zyogZ9lS5y$g72XQ1&C~6t;?iObqh9e6M_`VY0LN`1 zqBh;0cUFDgCVJ)HX<~cSJXvOhJf4P(`=qkxC|Q5mJeH2(NG_T!vLmy+YOBu4!^N%V zMuTs=?j!Cl75VBkH3u?4<2wiC6k(@iwnVH5*^bYDPD!5t1shRYuIHLACc~(Ho73b6? z6Oxj#5DhRj;@hvehWQ=20T!}XRbzWRsYApmBkyF<0?AonaWU&Cg~2dILGoayWz!PC zc)(kKvx}V6zbfnAh1oV+KL+jT9hdHF zpGBFhM9l^{B}nK$`QL4Li)Ai9&%yjC4Y`R$fwK-Uoun-gH&^Onu41NyDh>`?EJ{= zU9Vb`z{&>0V@i!em#Es3jMx2~@2WD6{I|hi$NK_bWV)cxDl(<%agM_&ch7LNs0$5$ zU(@9U?BQZivZ!so)>@`Xa?^0owZLN)iSqZ$#&Mpi?1Z7_f}vDmpIP4tul9s=vDop} zh8(z*A`|#xNB<>c=kCcafoqT{m?=}1n0oQrN!e9dGfy@z2$*T&@kO^2t3+BeL2`@W(} zvCZkfAosn=XTC6x!C6SD1I9Znd}`-4RB&J(L2IS@+X4M11QDNeWA6OwRR=G_>_+0jdy+TkM3;!WM< z`{LaQOb_dO4MCiZX($}uzvaUph3`2Y0iXTCYI=)g%DkghI^lscgmQVwNuddE)J&WE z1>wdv7CkuM&k@b)I~3>G<+GK4J5{G06;KbyFgNW}4azA66UP`<$cmCr;=`yd1#G}2 zVcg;{&`@{(1e;$sIYxNWhC|!nejnV!iPKjDut)p-^ zYEfeJQ0={ozYJ7|GbG@Hi6W8x(9(C(J=&2S7U8tg%hTgIr2Da5C#!CMvb{09XG==H z*_4F2Ym`W8f#fi6K-ihMvk{HO@b^+{_+~5!x9F2ZXx67L|8TiUUlq6s%qQ+$0Bse% z)o|u^Y{5v<|51q^Y9h%u{S1IcKuPhA-R)2@;w;4)n7d7rUw4x7yRCc!IvJ%E1^x;^+h?S z$a9CDZe>P;hQa9%b>{4~xG8ywI+bDm)G|g2!iE@8z}Oo{7ei6hKJO0C1-2iWb}W3Pmlqn3sBB5BfE4q zjUt3jOkntW?6R9XF4>dq0k|nii`R8Z!<(;%nxpl2f4z6%3WdfWsSSxrz6UWKO*aLk zc=JfNTSDfZ6_yRZvm6EVB*)_NF&^paluMpcl5}9*lQL#HyPq$KZTi{d_oftd&lg4p zlUn=Loo{FOxlFHrGfy!}OQcLjfTQxg-CG26@H98aY&*1)T7|=V8XdhwB_uE|rs=?R zWolL)1M6xZ!Q<5nZ9*L|eKiT9o@enU1+>};qvYMtF}ram&|W}$l7%|k{j|KuzGF%vmWHR zw8pA!>O5?er7PgX8LPHTR#p+Cp^V*7=BNCrIC);YH~f?b2h+ND7j8d5mJ!ujiOPy< zJA4u3>ZnA_Rji)JB|~J?;a;TjuVQTXz}~cxI#~eCOi-G_;MsMK=;Dbn+0>Qa4nX&r zv$Rp{TNVI+wKxfKJXA;En)DS%SnhlO^BrPM?mo%(BPaE)7v1n|n5EBw+|Od%l+o@#4p$#} zs=uz#u^ULpQrYl2u}a<>bH2Ya>6_cT!vD+=s_!T78U?Lz(RHEb+1z9i=1@vMpw4Yt zt#xk>>a{+v1^Oh863ZEF*`;0R{Q6}$bER4{7bm;kvKciM_d4ggFOyj=Xxy&3qqmd# zwbECAFcfOz{b&kD*jQ;C*yo`2)gzIr8!wSQmvRZessyt|WqktLsUpn>_iJjqAVxj+ z8Gi&kYFKWk)5whQy&z2wCn7Ss=Lqy<5U5VZiE>W7u|^W=H%IP=e$@I$_UwY*&5_!A zv2r#6ERUkU$59&98{UgcA67$3skAP$imZpZ zCIqYV`2{p#eM;g7-xJv}z5qile3qTKmR*g_zGh^=%e4dQ3_Ej-8$xt5=-0LmAANj( z9FDd5{KFthGvU22WJDHDK zJjal4y{0nh$EZFNpSi=TyU*;X&XzX;r+}t^$FDqG zsMgTBCcqUeY)!iYQ?9Q%x~oiSPFzoI1A%)`4`*MDIHuK2r3j_kFm%>2fRzYIOREb= z-z*nWdaQ+K_)xHot&ktkVlZY9OiVI6iPo4OF#=KszcXW%|@AA9X z{&wAM2-R&M&8AbbPEl}jcwONax#uSgcJfnEOD!c8ft@Uy0E$G5`|tcm5t)$3i$2)h zrfd;SHBu|q{2GgRSb+@T_xKMSr8o0xty#FO|2i%xV6uQw#fa~<@H?7+)?zl>WiNSo z?zfr+X1ZZ8Fw$(DmfO4!4XF?2sBG6(KRyq}>6>aO3dGSKlcyiGHgF+EJshVM?VC0@ zvyxdbj-=t5M)rmJ%}`~XX|5czv_7v8SWZ_jv7q7g2{Y^)XdJ`)PYv%k{HB9D&wq>p zWvWUh=nMr2!s7Gerx}@lq0k|GTluS>ox2Y?bGE8FwXN=aA8i9o2d-`UVM_gQ&IxA2 ztVYX|J5}*cj~$#K z2lAa`wmfeRO9=|GM&i}3?}+@iZgM<7kYEd}H-Zo5C>h!aoBZ*AlVCR!|JDv~qDFSQ zoHukONg^TPeo1*i4|>@e-i~fsa=7y7xaTp*FMJ~X=zVF*xe$(B=%*{j;^LKJ01ea5 zgGbph{5`;9%~NaCt}J9e_2pBs?X)2S zQ0NTSp#Ny3!;^AQk* zJDTLCQ$n}_d@4P&evA>}!?)**tLSq~-z%BQg6J+;DgI@_?cDvDwnS^!=b*$(So0Fp z!RV1IidA;xUBuTJU&?)Xq|+Rgn|5RuBG7QU=J2ib+uK2-!B zckb&RxMar0C~tY#I)fg!^I8?B9fELFfkpkE{OF8|uhi|ZfQDmuWzwxm@3-ql>;I@f z3eNdvB-jq<(sD;%;QKNJVb27u3`0Ja@+iA3I~%sFa}}vWX;x9vfbk z3L|7BmIGIB{6*~~a-%G)k&1*0fMX>p}QHHp@KZ30d*!wPa9EPuqs6JdfTx6&jX%0B_iO z&V!)Q(Gl&yAh2CkYIPGZ?OuIx@!`orS~}-4Lau(r$VPo%_MY3QjB1UJolx>y`9p

9 zGPJs~RWG03Fd1h^O03vXk&XqG$q8?-4qK+XZ)#RHQ@;(}QLXkke~stxd~>^b={jYt zSKlglZ9$gW`nV^FXu@Ig%Koj2L5}hPsSXc+ywEJSWd-if50DA)JAbXqng^Ydhm@|W zAS1g488^y(oO`37WwQU_Eb^D#C!6xT`N3f2-W}m>7~kYDqFF+`b(EC7YM0^Pe5pKL zm$<|`3$xSPzGfZ!<672zWF{^FdDi+x$`Pla4jY_vi4KQPbo1IjZ~H}f?8=k5Ig0mp8{aSUw5xBQ1* z6{voc$9Tbshmin^s}|aW6k&f^-N`t84RvMsc|Ium=^Sv!?$8PW9F2aXdN=MAre<5E z>+fM0mA4~J(AF24TluZR9)ci9TV{LT?7Ekn9$WMtVdOcRh3*%DROd=s0jdHt?yZp4p3k zu@-NHA0dCf`!hR>708wl^hAG`%{%*I@EhoA@IQM=>!J!}Ze(+Ga%Ev{3T19&Z(?c+ zH8&tIAa7!73OqatFHB`_XLM+naEbyF0yH$2@l^s81u`)*G&h&wy#XhGY_D z948aocw^hPF>x}%#CGz=wrx*r+qRR5ZQH)zIp>~p>#zE&tDf3eyL#=_ySpB8VhKB2 zpsKsQ2{S!20}~HGMM7DgnT3f7z{J1`OHMB8Xkq}gu(K620GjXsG)#;EDkk;-W){Fd z5N23%fT*3lyQ77fIS@d9Wkmh&AVA&Pz}UjZ!V#cuXKm+VVPp>Ab8&GIa&dBIaC8=6 z_@_w4!~_5|HvyPhSepPue=7cxR*(cxNh+uTBu#8h91W}iiq3}C7DfO$3nLR-ClhLb zshuOh`acf9$j;W-;$NJc82(Mb*2TmT_zy8tM>`vUytt~c#7_l(Re-oCqpB#tz}6Tb zC-qOcEzpVQAGC>)qs_m%qXPi{XIUHk&oca<^}np6+kY$uSY~E`v4s&3U}$1yVGGOn zFWsbVP3-_2{|OsA+y6K94*uvHfpaT3yO9Mya{{{Y?Ry45q&-DD4%zvi|!2JJze0c+)qlFtln~C9HieDL`C@-vZOu zRs$4iCfPD`&Z=b`O88MEnWOYe+xsAqx8hb79&9D4btzFZw7%d?_Gqh+XU&82uM7oW zc2~hd{{-&9Uz6kLndg`J+aHAfx@V_q<=+0=Mt>uJeP`3|`UYrL;-}I+42z56t+K?s zLn0Q?^hI-YRk$ZGt>>)Lcc9nrd<)c&8+wVbl5k)1M>2j4?oKeP?9#)~VtXQO^oQ7bu4SD$LbsT615z{m%vD8EURks_W<^MamjqiaQPM|Th^$&yCR$>FP_t{ z9U(o#cZKgh?D%49xxvx=MxwPWz>f)kmxS}uDBK=v#W5&s<2I{@7F} zH#DHdn#s~0R&g_?mYy#}YNO(_35~~8FL6qOH-s4}Fl?=<}`Kp=% zenE84*}XrI2}U2r_@!uEY;_Z%Th{OS8kbJIx(K5j$v&VLAKFB3DGkicb%<}O3v zmVX&r3?ZPD@mE-XTqUDj)`V!oRT+|ovtdHG;QBmrbu!j>U=)A#*oq$rUH_d;T9-(w z>VC5#>XjIC<}2B<1+#;H^hb-R?*x~_a0pAhxB}s>ec#x@<*-;GRx9E)i&xq~?1LKo zb1O71&Hj=rp9I}dGMBtjbd43VGSxOH_K_Ob4Djc~}G}@ql=k@nl(BHvl zw137c>5^(YOoU`w!%oM!%))4~lQ**d>5-@3e0${>m@bPOEnK|Uk`qQ%B)?pbd&T4IWv z_$@?(tR2;ron{MT22b8qBtNca(_iX2VIHJL1DLc<^xfpbR;$|FNt64Z?>%m3|f?cY-(9@POh5)PPjf<2z3)igD@Aes@ni(8h zz&xcWnl17al9+ic&j$g^xq6rkl0}f>!W{zn*ox|FVXm2#1jV8gQm@YuaAuKuS3!DH z9%4gnSKSqjgmCpqOLjMhq`XRB6CQzu0cOB`oFkl}?Ew#e>h;acdzm6_w_OIKwErxI zC!>Qp(Ms+YNWcBcTO2YY6cvef9v~$+`fa`epbGxBlIBM1>zLC@E;JnC5F&>$JGZR$`pA$*y0rbV7u{Iyt~=FkwFN9?q; z;YmeF5^#%u1C8Ue>I1TC+;I2ooo`CtjYBx-JDk~z+*Qj0pO~wlTYu%P$HX@+!D$*R z*uBq8>XE-X;0CVCg|8_*+hoG(v@PWINeLcU>N#D)d2VmS?%fHb!Kryy^zugaYXF+N zx)R;hvx_fN$GfG=Mwb-Bi`nXLZ%$k+!+f#6Sxav_+ z1+GBSt;k5Zxw(3wcxEJi2b8= zF&hGZKVBe2VWPmQeG|;urYjP<0ESe*-a3WH>-v^@GBlU{;%G-J*(gbYIm7^3CKOw^ zqOI5xFR~%_c1EklmD>lmlfj&xMEm-Fmtt@!2Z8=w$Q5FL zBFDtC5vi=$RDa=fZ0p>%n4I(Bbq}d{g86eTRHG=7LFBUobHyKmYH(lOnzn7~z0wTg zAT_(3Onhp_$72VA_}?CSxsM`3ka_c8>Ms$JJ_w6I(%?ou{Ynu~QvaqU2wY{F4Ef2Y zajz|Wjtf{Gu)FN8P=JZ7Yzbf0!)xb%;{J@b2*~I8Z~)myEV`axY5S9K%$)#46}*Gx z3TQn#r5us|vX4oIrZ%<@&P=Mae^B8Dc3F>~^xJz*$ngDT+|K{e2l_-u_QpF1Gw4tS z?BM?5J5#SHPiYBnG1w>8nQI!7a=9K~Jc8F{rygBsQGhR?)y5eSSymb$JehWXf^d0*gZi|M;ve2(ioY-3_n830206Q4Q6y72{)ATb6wGr{}=B{rdLLjW*KW=oDh zjpn1r3Wl|p-FRmR35)U-No2Qw>s*3>=YtuwC1Q;>gBAbV9mg_HKX(fy#FVw=(R6_k z&HJNL9N&GvH+*|(-Y)zI3w%e2VD)OpN;#UxE(Ou|;aPlI(~VaQ zK9&);HntIRkwjX5P<|NmGt{lVXReEM*)mcM#rWh!{S2unl{7hB8IIk5D7V1~g-HCR z{gpBYp|~pqOx@`!5n44j8f1x(WfZCpPnwL27CxwjmbN#`L2NVS8WIz0R_R$+3ZvC> zzZSpe*VuvEq5BnMxqeLQ4Q++cww;`Eot|FF*<89p3voPt@OsPG-wtpQAI3uty-4>!{^@IHh&RHUw)`K_Ws7#4gQ2OOst?oBEa9t>uXK5c2>M| ziM+t}TVta`M_ACJhEDgXlOZ|3Cb|ly)2)p6VS2zn)oYP%c@jf^s?fmF@ZS@U4XR;I1JXVQxIhs4z-OV;w5L*e*W>HyJS#d&s(3LP;|E3Y_rxf(0Wh5lr6*c*@r)|!_=?S1P*7XGS?(hO;Gqtz- zr%Nd4zQA1TX8qAB`ExiwzyY=JB3~!`>+m|jny%u~W4<$5_b=J^zOhK;#=KxL z7)0+AzPP<$hF-(v9f0#BH<4}mmNh%vkE;nDQH_M;w7o5V$|xd1m|=qkqeRkWzt|sm zlkU>KQd?XX=4OtL>VZ{~Xc}|DmvK}4Ml}l{yAe-Fm8gkV+L+uLekBFLrI#rRY1&9< z>XqlftTtAnvb(b$J4QJbF5!Qa!s81L1g0WIHw7EV0i#n|dX`Txd26xS?2p zmFHifm3xV}B`BfzU!h(IXpB{V)ti)kEWHWjowoT3!_%fL-zQY40ZMEJlX=u%tOew3 zsUrlbxB0v1mIY%3>Ld>_1w;levxq3*!^YHEIV`Dvc?^Cwk|WDZzm=ARMudl+X{Hr! zSZ?17B))RPW!y|ad52o6G>c`N1${+kr^#szf|}W!)I7{@@ZrslNY0 zM+$BYJ?XFWP;y^65Tf;L-vGn8OX0|4d*Zjp`NQ0m|Iko_S-%me;(W=o6nV^qIm+0? z^q54t`%~=Rj>`)?w(R^4gyi>A3k@S~-$pQhG)5;|KaT485Lj+S#zbh#p-Yt&j-S?4 z)#5_N_FNRw$$BNay$XV#Pro~JrWujC1&;Sxl)y-8e%U@ zsyd}KaNKtOdYyyfA7?3K=1!8&ag|+*VNw2$J%u-9P_Ajv;N5|{@%#Mqm&{&xaO%%T85yDuSDMK`@kQVOENAy8rL)PgbnNbOolBe#KtD(KM zWm9=B2)B$2Uy+L~YgcW>+c;czY=#PdvLxA=Y*Z#fr}%dw3U7gr^;1`%nh#iI8@6JA zk2Jt!|JPKeO+@UhKMVbNx|Sf%_v1)06?|Y8KE~oo{gc)@M zO`de45}CA+9G2pzQ^xzgjhW-&vA2F&94V#N;{tp#wpg1Ch|SE+kQyS<#Gt$g6c(J` z!IK#Ug2wZuMAlA1K>SC2H9I84c3TudYkD2ju*<0q9s3vV+!Z_mSBa85G7pE0lqt`1 zp1jI+__}`S4GkOZ{=jdLLZzC26YJ>e?O;Ax%Nr`CZF#Q%CrZ{7yMjF}9ib5mr|^;F zL@ZAZb~E_U5ar*4rztQ1{i{@6oIylkug~2=5{KZ7T0_d@eN8Dk(XZ(iII#n&Zs1~-l zjExEf^2ix@)I%G@BZM*Crzpry?WI+B#Q;h`wZC8GSIT~-sFa3tJYE4RQz(^P01fm| z$Ek~`L`v7rVmf~hu`@}VQOaJHe`wgJ*h?axUY&*~Dl=Jv`Uxnjx>{;r>3rpz#x7s& zWL-+3!4u$bq{6S&fSw$vlpL#}qs5gzX-kK|%$rUdmmx@7kJUN&V{d*wYq=fB)U)5z zxGtn5>RgNia&zsE3&S$QTzH8Jho-0H#d1XuLHfH4IAU>yeOyd%U}I?pf0&zaAHung zqSEV9U0b)r*s7%dJi)qiZwqi3!}QLV=+H>dwA~YxCX4RkNxe9SGeWRdt_ywE*J)&pFiiUVhLyk3 zwAu4KFfP1i&yO?3&N6Uac^5&kZ+f0QY%zVDZw&pzn%=P6a2#I_UB}c;Jd^>hO);x= ztIeL)0t2hOi5G|@e{aicEgg|Z6?rrU)GEs2SVccm2xttD@W&>+_<@P!`i5I6rhG-1 zo7W1ZJuFn36U@IhqskTTWE~&u8c&0$jKBn3igkDut;kiq4z)IWKGT+rhalhWD^ixB zmUT>>D{$7H+&VBwWBaN*%1Us&^BQtvcR^%o?Jnn;aEM=(AI#>r=^SWI!dDt#}wxruTgryp(KgY zu8sJMCJ)LnPIY{P$o$m5gv_RNKTT%5Bx*#tmplBGM5c^!IcQf1rz+D#qH}rP0GWf{ zqWtE)L+EIoe?7ny!b9ubfh<&r8GnspIbpM*Gbs&6oIHAqM3y>`(uRJ;x{h8lLEz}x zWWDf|qQ4SP3H7SoPNq2ro; zc|%Ninoa+DwJf~+Z1T{QbbRMJjg?8Rkxj?XT;Fphf8`WYUGR^)!-osPx81L~!UXU! zXlXXxAH&rGex-Wv=c8n&A!iZh-vM4ZgzTUlIZYaGxtjC5r!vZCJQ)bi5;qYi-^Rx*iHdaJLKK)=~AbT&vqSA?7Qiq$^VT_!2=5D8E=3!60dwRtP z+3w2$^-wSdCRb`Tn(_oJJ zh$etbeot7YO2cq;v7C3B%5f&__uiTEA=`p=ttB)OIAaiTdT6-|l5s{KFm@2BfA(-F zREsyb)&+CZkhY<1?L~CJIrbQe9FPM|>q4r8hg5Ga?{^Tz`7tdX9_a{iBO|ESzUF~L z*C5Y9a}O}gQVMW^;VmVV3g>N7kf}=VSB2@GWoTKd#c%YSn(<-Sxa7{C%E$CtD6-OG z%y(9DWsR7N87I_pSUs5U2>}v#e-mOW45l?qeYGefL&|r8*~vr_r?r9=_-eV7G*8(5 zymt2zFcj2Z&L$7Ch{_hn?~o0_V>pE`|Gm`>Mis25(3EE_o9m|N=u#UyqF)(OQeSwo zl6~sdmuPYGs@-uej9<p1l7u=O;cg75-$}&fMT4gfD}V=<>y|FE+?uJSBw~*O^+IX`RwWXh>Ta z`T8sZ@V$j+5gymm!k~!Pf9PBZ3ppj(m)Wp54kEZ$eW z+8byaRwqmhXD@yj{tgId6}yrfWpIHac4>4E=GBMqQ_%-@%PJF^!bNkNu8?2Q;)E+W zzzvPxP#T_%cKP7>e|YL{3o(|;=AA!%O*vX*@n9uCxzTsdAEpB?jj*R!MQTd>(|x}A zZ+L}!gMfoc4|174&C3o)eXJ>LYpqT=r~AVIyy9Sk5$DABtQewN7!vy~vpvIU&XfJNsVCOX$&e;KMD3?-t7H1Ww`3PSMnNpC%9=|#N;!f_R7F#cgIWoC7TvjucDOsw2YK38j0T0uB zXS@)8C3W)ne~xNBMIR2b!a}|eP1eo%?l?2D9R#Nx6pz5&RRy<4RE&eQ5!G1l4cXWt z(M|=sDjI+AuFyPBUeZ}eS94KiDj8#q=K*?;zjId?8e&gleF-!bwfuO40R>?U12=}* zm44_J>{3Z7#c<0E5F+c9(W|n+w3En56oY(|p6P^*7L#No`LTV1mK2Y%9#=BN!Vs%>R}Gjc-c% z(irope_eZnoCLBJjbjs`lg75DEMo95+>Z|tba45D9RbH2_X{>JpzYzH`%PqNOdW_~ zyGvY&(0w=b=Dt-@CRUd(HPR3H27XI0Y!e1rdAyz#PHm=pH|{k?cMQJ{&WGn={D`Gd zu?A@m&z5cTUaiaU*hED}h`Z<6E+F3$qKc2;f9BGg+|Y;3=a=}ok*mt1xdm}SerFw` zB__-=ZiJ;YN+jSWWhE2pE60*yo~Aq8jEGY>xOmv~1ObbSVhoY`XCSQsezYoeMcG&X z=kJrZb#b7B&XospcTZD?Bn{5PM3%l8#udx=mRVz_kPpqAL{Lw3zsj6Cg=%KFgux3Y ze;wu5?=}St`Nb&xxM>T@popZ?D5T-WbGs`ES56W7^BKhApwPO9G$uLQ>N`3lhcrr8 zn*jdrOiFUW%-=%wh$2*R#Rp_9;03k1p#-9TQU$icM63@f4`b0UTjD0g#9#g>2*7vi zh~vEq-1^B~7wg_l>#bK!PaNZ{n8|qz=O?WP|K5;<09qy^3FSEF;?7~ec13$^Kjfros&CKEkWXaieu4~ zSRzz1QKMF(n8)Az1`sCuhuiRx;NZGIcMHpB&=LzNx*#4WD9H7EfD7=l4%`t!f8lK6 zOP$Zh&l+#Ib_R#!3hu_A8VEJeC(&;lUwe1gHDHKp64Nyu%suWjcr%7xdjX3QS;f_FtIJU}ZuEY1oCWRBp_ zWhi7V+<~j)I(>L?H2S6~yBMC8e=lw9nVt%Ber$$?(N8^#5lGFj3DKirHm*%1{FN`7 zb&x%MLps!OO#o!1a__w{K8qbkwiFbj`B z*Vc_8_UCVezyV9bOh11sWjli**zGfTx*mE98u$&bMrA2C@Nu^W7lVolN9abfmSzj8 zaqNb}Q|gu&Ty6Vm&0>BHf30FPT}&AbTz8Qn3yskM>ic_c$FSEOO>StM*JMBVyGD~h z$E7c-Mx0Lt6cOvUy=j_GT5N3Rm{?P+xnKMr@UR7`EJT0I^jE(QRfOq!d9}%vSRA>S_#45qQh z@W4^_QE8Q$)f91D%JBZFXYWw87gUm|`Fpdwb<7j>C%35qaNJPVVtvQl90pt>7l^b` z=j&_W&-)__nYqQ_zh~~-`BOveG09t{DJH;|XZQE7-c;jde?nG9*F2;@Qg`YBipgrp zAJ^(W=|q`+oTdOo4R85NHKOwmD{6|A9jIlaZ2wBaw3&D)RqhW&Cf4(spSY$8zOZH; zYMsx?Yup&avOI$@kpxy%Xhni@5bKQUBs>mc-)juoc7v~YT@zrSDg_a{#;Gl_re+sTs7S{Bz znN@^x8gf3QMEKlkBV&Qh${ONw$5jhBs0(dw3PB@Ge_%uWt?b)xw~~7{jHPXtdGlPm zz*~CmK;8EsHZAqKz^1B@4OV)VMNwsaF>Czs*qzWhLp-9Qq~}H85bC-pn);+E6JXab zl(!};OC#B9UJMmJo%91S11Wt0!}JIC<6+FbqRm!nS?Du{-+vxkl@t7w<1js?i?cW(3ghT)pg8=A8Qc~$CDxmM!)cmCwLzKxSnK{{6g{_@U+ns(<6 z%iQwjs%XL8SuT~jDlzgrJ}fn3+|>=`35Fewi_cSnfb>bQl5@swKCK4KcCs~PQt>LS zSN@I-ut^c9wb*g2N_qlMk9(Qt8!B+zWah#9e+U)5MNg0mFXwngIRsMk$v9L=lDz91 zBxb8b&I_vW^*0e#wb*xupW3uiTlTC**<2V|LH1}pIlqH(gG;@bQ?S?%cGP~AM{VeO zV`^7`;x1C|5kn#|C;IKlWNIPKI{#I)I@q5-SK2bZON0L%)@R;x;oRjYQn_>zXGRqc ze|AvcC0q-~eVL-jrLFTaBDE=!B{-^t{_1B#iG_A?R3Q$HCq0SiDiDjLfd8lZs@_%+ zS1g!0!QkzJ^PAcL{f_AOyh_BTcIC>e;sB- zdleppf{!m3PrXNCaRkI;hwy>NO$Oa^tFVOG#le_r7V*&ISVRRop@XNqjKbNc{uz;3 zxjtWCUV#aFKOSOoM1`EA8x{+23e!!uTLYfxmw_f0lUl5?(zPJCgk$2`5?<9R)v%dDe3^NqVT|1f|U8 zr;>bHLihPyW}O1S^dVxZBx1HVa3sHDfQ>U|l&a+Z!j{||B-ZA`Yj4Wp{*m7EOJO!l`H!1$Thn)vL2?YQKLE->!5u=jPz)d0UJmdrB*F1At8Vf&bx%zN>dY8$;~9 zhvTCYKWOOV<2-WIQGdOKe|TEOxtDZlqA$g(CS3s&OJq~fzvADl$!7gim|uBmyxE;L z4OZCGI+X_bFHWDytaCDJJss*h{b5K~l1tg%&-hYNF=Yr*nyNUn5`TLvyJUD}EqBKj z+`M7L!f9UcW@;x2wUve1{U4{yfA!{{W0=lW>z@LL(V<%M|-^erI0+%5ZJ6W_R@?dmRk zeD=NNNFKWmI-r3Ce~%aq_O){otCmk!eHcJOYv5^>wK1AfTctD$M%q(l>05Cfap4~d zgR}Ym^Mv#dHY@GFTK!RwdY=4Lz?)$teyM$@uei&aYE5S19w!0Bu81pm6;G3Vsl7hDUL8U~f0;dX;ZlNDmGRFaVb4rd zsAPj{T|rBRqL|GM-2|qsv3s}6g`Z3Xy!gITH-w^G`Cy%BKW678^4tWw$&suif z*4%(~*iq2BecpizBqQu#!)1m=(4vP$$K{Hi#i*H}yPX%zSZzO0< zC5VI$e^9g`Dnqw{kyxz(`LVzZpQfgorOT%=$|lDXpvngx;;54ufLq|=Y2eIU==YEH zKrL8d@qFj*9uH#SUq8sYbfae@M?};Q-7{H;-);+||+! z0`1SCCj_LBy`j<$eEBM8+g?~shYIiOEm5eie{q{boXc_JYpQHvnKZ(tRFjkS>>;Jq-1>phvcF}ipt%)zbb98uaCz1`a)5O zf7z-iL_5HhL$FY&h%~TUXZw~^tiOwKfA_Lc7%$rp6E8Gw1FCLGZQ&%;*p=dX%08*< zfwpqYWg{xaVMbGN?gZ$oA;n7g2vb2~e6gyB)hYJuIpo2xi|UQIovH!Tb}BX6{SAEI zxo=&4KVD0zl*{DpoIdWxbc(Dt4nCW0f3ZQU-ylaoo?_iK@0tUOUHPv?-{FJu6I8z*D-Zi{q@3|S-a6NCbTpTNeH`-78CFFV*Df2NFUf3x*j z!sy4}VLvOJcX~A8TgaQxE+e75YS4Eexyy&ef@38*LYd z9#5t`U`&quDInsxjsMl62Y(LCe;}7Fks1N$5Czzod!@uXn*ul^rnj1jKpEVA!aS=V zux0D+;KNj-8bO?yh_q34PD{65J<7sc-QPKtZZWARF=F4yoiIu+w5x4K29n0V0&m-X z8P+s4ux3)UqN$PufL(f>K~;DDgp>P9{SqWolxkanU%XK6l_a{cALD=inX?~t{>~a_`AZ&KMkPv{UAdlV?YdgZ7vJ;!``~m~eRIHo z-hg3oSBZe_@}gfxt~!Q_LPCax2443A7g_u8;9lDfW*fxhW$UV#wyyo zi|Bj4TLt0xysd($SC+&nV+Do$0-)eo2E(@xCC`vQhooIUP0d&SOeYOk0xz@->&W#1 zlDxl_ko$%xRVKExUNAaasrVI1C<+|X*IBrw;IsE8k7Cp_N1i|}f2-|}lUmmRhZ#5h zw=u#enQG{t;{HTK)$yK7qRW3_SQks=OHes8G8^ma+(C_^hf-&7ed?V>F)1v6ToB-7hawry{r2*HT2P0;!GKpsj=;XBh5kW+aUjUu zR}168Zk`=EtSZJ!e|jy?`<*bRpI&Td%DKZ#z%i_Vb}N^RW?cKH6a)G>#q*9b1{ywF zr~FY}sSg28a%BF4OLE|Q#BF12Qr63_)I!_$93pRN;_($n+2@YR3R5z62ELbHk}hjX ze8K9I`zLpvPg0|irHO2!u1EK<{JSMYGX?{jX?RQ{<{(89f5Z*bV;Y`_CnwHxlEc(_ z)S>c1bsmorE<)Ty4B^gjL*sYPqjpK#r+@C)=b~#WZN5R(_X?>n=Jn33?UF%2*1=WG zXhks#Ntle6?0dWn5Px(KTb*7@1w#aszVzN684zuEtdFX$t#C4sV$OUvfDbx!L|8se ziLd&6nlGV3e-QN$YB@lBMTh~u$KuJ{SmI8+-HFn)`on%xuuwL%TD;(>#h2pxS9>W{VByBR1RZ#j30xN{t|-re+AiWT(WLyPPX!+_wptD*CCmT z&O;=;pi<3cnCf1_MyJ3GDiuLiMmL=u#a>Ru_(EZJq>$H>QWTksVWru@S6cyTsG}#r zD?P}snCfm(8$N!%E$LJW76bwyh|&r)?r_Uns9s7CI+`$H=hcX62%Cy{i+JN*BWhyY zr21Rae+6MD^CFk<``S?_gp2!&_anJ-E*X<7Xz(t| zzO9ZT4Q^jVMRju9-cvGi)M`j^k;HA4N6$eQf5@NV?DM^F5Q*FZxA!|(3|K%`M{6aV zp}xGa#VQSCJ#spg45X6VKt2sU%-J4c>(3#GL99EPyt#fU&sYRd82_m(xd*1)dWeuI8s@xOE|wgjT7Lm+w0nBFJVkjQ=R$uhF{b2VPc-_ ze|!zdu3o zlqDJ&83pQZdKU$JqC&O(vjSv94V9q`f2s_tIMeTJaW1ds4I#_^eyVeSJe9}gBvoEJ zj;%QTHu4L#(`TF<@5H;ayyA9wJ6LCL>eN#idp3)*^BcnE6Zv3WQXKKuh^7-l(E=aM69(;Yo{c%Faqd_wLsf6dm&q%{=n zpr(|ANvrOU4f)%HdjPcXo*MEPNB3Ja=;rkZARKPpw3>Zg_;5_;aykqQh}~Sq39#)g zvG}qBTTQY-6`jO^uvVaX;hVbjolz|fF)K}ObrvJ6?GBMJYGWOZXD`HERLrxRr+JT6 ztDi=h@cLnZ`+eq>U-Pdje?t8CJB?Y|V2Oh1gJD9-Pa$DS94bpn<17^fiSwT@3fxO> zf?`GA*;uo2jn5SAzHUKBUz66crI+~B!cJ%c^iVOZ#El*;zACEs!Zb4A7;apnmv4-P zMuj=Ap~GufY*zR|s1n~SE`@A57;#pA!b57`y-y}Cxkakz6@zpD2>MK|C@vg;QnhkE;D zEccIL8y;f$&7t}J>8e`|nk8bxgIumyhQU4W&o)UZe|FJ-OsV3x~|7oLHPLMWeThREd%vDecx zQhphsMcj|ljGLL~nNAkbr58Kt4l`i~$0f4Lzf4u-(FH=52=`+Q5`9!6_^utPhOU@l zN+;Kv=)fwxG}6la8lv<$n>s%!l(LP>lS|nFr9{jae?76XMPx&%K03*Tq>ynGH<%oW6Dy+4q2n9?q@@Tm*N zO(WXr&+`_<{f*gQ_*m=?M}z;@=P_!8kj>B*gofu>iQrg45s^QJe|TLrs-@Q$X3Ncy7g}Uedt+Rn`c9JxA}Mdr z_psYdQCp;(mi;ps>WTCk`T#{qp1Xkk ziwO+6^It~85TAIQr?ouwWcbCsCNr>kT*9Q7?%QWKF=J^FXvRQ%%J>Efff7xvf73W9 z?$JVz*S)w)dV`?lhnP7}^^u2w?KLSBL02##rC3XB8!i zDD_4VpK*F3E=XZs3zX_c^;TRpfA*I&LrA2aeT>4c@JqB(tz6rME@s!byczt%9Aja&H57U}a*XN|Z7vQZ>d<%XqCOLbbxC%_D_d2MIF*Kg6!wvK zU|vxY`$Bkz@81knsK}r(M)z?@FqY5IJatW#i_ISBXS=)>CHvKf7d3ZyH@}Q z*;vV!*A{!mtzBp#7Oi~4-gcUeXf^!PsnkERC$70d>YFqeO&^^jF%x&i!IU2bTizW3 z9{Y+?md296bo=;^mhj^ieSW9D+E~P%e6vAkAzZ0vrt1cXBm3rTa08m!L;iX#Qi9{| z+49Wig)rqsk*$gn?WF;te@ZD~(lXw{@K!fID8jIdbyEB!Y0+20nM+*hA`P^sEAE7V z9`KVW#HWBR@U7a$=l)J-pYuQciQhAM+p$&}W>h!HdYOkJHQJ~`{IL%#;j2s42QRf3 zx>UDE$26~mJNr|RnlDa((n(X1jo4~}O|g)9zl+tc7KOPb7gsGPe@G%2W2vbSNiL1q zmGDhM^kH?GE9P{VWGyrP46dvWZ76&9c$-o8C9m<1Uk`R z2c=!KiC8loi4h+^zaB#MeeYR++eMnp4qqC;Fhe-s~NNbks8zMua2@jd!` z%c4t=mppfYP9xYwf6R8mQ1l)~5|9?Nys~VpCx0F+h)>9US$W3;tF=#6dc7-}+zHyp zd&Rf4)dJIf0;Y*+L%C{2rb%9m#T>DKw%2UK2(xg*kC5;($9%3i>Jjpoq*);swHfS0 zM?#dk8g%CYf7S$zCeq<2!n8`>4x@;bDdZ=eCrq)nWnJ%xY63g6c|c!d5f#p;!;QIi z%C_hM76bL$z$j&8u|e?JID&16ma=KESpAH;4H>NLO84{;#FM^vl>YTK{l`uQ`UzLD z$dC4@4`(s)BCK{K;1)CmGFBwWHEPh096-XOE_s)?e}^CL+(=*T*CHq7JX+MusgTj; zWh%O%3l|iBkt8ilyl~3C{SZtG|Mvb3(-zqL@oZlS>_z75`rwYp4Z)f{JU7g3J>C2D zFD}!kQMg+?%M1Z}w|0%dUoK=qMKBC*DvT)H@x%mi!?zA?_A$0mWXgMH~FHOdK2uhm^%hc>ZK+8)Q&l~|ySf7%u7+YV`)V@SuB*i*bAzo0U=Qz!A; zET)vs^CD)8(;J(!9cFTxO}BA$!4=IQ;(a;3w5|pieJ4?+Uk+#{Y$BUQiW6fB`pEvy zObyl4G(Z24F*^@ z$+;n2`7$vmdYxsOd+qZhV|PW$m0lK7)Cb-&xWQ4{^i7>c;72>HmMgRqaYI_*OPfV- zB1i44=FE^C=hH}cy*#r}`+|vDxwzGZe|*%4@1Z~~WM#x?0+nW&lKN^#<&>FFiOP5T z`Gl@Tte9ki}!Pg!$VJ{!& zcsP(I$)atJEOb9}c=IAP_i1fy7!paIZPoUnUmW+#zxPYSCy4Cl8JS#^t7r>%e?1=s zs=YL;yA`q!Jnf@^J3(x$Yh+k2W&bB#5~A%5d3ZhTsc?2wunQ7Vz&L!`QlQGgQ%BD2 zJfCE=9uY$yy^oPZXZ|Xb5zpC3dk0bsJnb3MxdCs_Go=?F_R(&0C~Fg${u7fI?rKj% z{5n#R5mYlhNBW-wYPk1!TDnSGe`2SbiyLLI(1<(=JLuPTJP6`uD~Igvk9xox%~Io+ zs>DEm)_0YQzcD-~MNWg_PeU2lPSmo4SDL;wJ4@j&9RX(hS+`5e)HI1eGo^igVscty z0O=KE?q+L1JdjUzIj7mBXmAV0Jb^OP8xQP8>Mk(ck54D?X2D+vQ7MhYe-?&uvY~Gh z3S33ti@u^I-K|th1GqNPA(O(t56^XV>EJ<;o zTD%Fxx`|`bHgxr@jWGrre{<-J_Z`!v>Uix@s)6_sKTwpq?oXbnnc|D{7fa{B%)L$h zCjqoZXNQEF)-q1YA;Mtwrm0WYHf2x6xVSgLDcw!D)%f ze^6u0@-ePbSKd%l88N{l+doWbZ@rQ)DI2K%!Re*1wfU z#6J{QB@dfOnzuc?hQwd;PL2~hoK)CsF-36P@nA$&Mh#bcya%W>n<&3md)(L@aK0gN zVgBe`&LJ5PVdxALf2swW<0)tRDhG1c%kwGS)jP)c^=`gRqoWdv2Ilce{!qQ0eyQkLO`U{q<#o( zUQ-qnfs;m^cQsoCt1D=3I{F0N4anVuBC*~!#ykWK5*%U9vK<(OjhV7B?aNPxLVM%z zrb1gZ5(OCzbQR^!&_^un1^ljeIs;a_dnBYhe(@{@{R8y|Z z!6cqZM!jUe-?>la^E_t=8TL*H&0REW{zKmzoty#lnz~E|=xi-abW2$b-zM%o-I46a ztxM)GGiw8zW@W2hs@Kz%+A8uMYT8LtfxF~rm!T}|&GCs~X^ zwuaq8l31WuAfq1>ZEl3y*7(DsLo)0?XE8ZC6+AhU+{QWO)ACrA(q<+UUB?}sleNAb zVUCHUfw96_p(~DA_>uBGTtlBQzwCI8cs@+kL*E#g@$Vj8X+G`LTnNYgd>C5^*xKUM zYn;>8f77Y~10p%=F_JBZ{m8527=Wk1lV5o+m5(Mzu&p&FMc0MxJt`O05$mS>;wTBO zb>1pKQRkz*IP4LL9CTy(RtN1ZuKmV+oH+BCtJByhtWI0vH#%(j ze_n-5)o*5$1_--68}PVaH#3UB+Md2IJXee3HQ3oO_ZuK@lhJ7-b#+=WCN7j!hlm0- z+yzC|c%DqcS-jgJQ1uOd=F6(7hYhoUPH`rJ>mR6Nj?{d+{U*k_^a^{1mPtc^VHv?@ zX;u^R3|^V}Sx`TF?pcqoiz$}$3Ayk-e~)jSGT^Ajf#+vb%kwG&+wNZOzl^j9Ye;d% zAcaV-lEVL@6iTBy^}lFCE}14#9c&bM0%r?IWi4>)p^37g+aGxnj4^0dae}uK8 zc+NuRR7TWj17slPRJK}7D1XY|HVH)uB!0(E3-Ogi%h_&OW>z*`<`r2V);!jW;Qt-| zmu7#R)+xK0&O~GFwZ8E&1vd+>FK9=%_4NVRC#AhT|dpAVjH=rq305==^-70RC zI0Wc*i=}r&EDEGo7ixKwnN*9;e{x{-uko#)D?s}m-2&QghJ72iLdjc|aUm?5fZ}5h zUJ}36(*6`_kGrK(A2NpCG;TBplmh&NhBB_Xsnz}J6M5&rY#Y-pmG%<`1z{tH(Bv=> zZMWdP5Va@|i2xxr5pkNYFz^8Bb7tU&r20#*3oahSvT2VX2Ed{M`LZT7e`bB(xNG8A z?4=&gHI^5^V-bCvOD?qi9$vbJvDibFkYHcj1;mGk`@pc08S4k9i=4!oXVo^3N9v? zog)n_5mSW8@ZL~%1i?RhJ(`cM`gRG z67NJ#+whsAqSEj?Cyx&^}u;5qI4^mR_H29d8vnQdf5xfMQ~m?!mf(Ix zRzKC5H|_gE8i(qXa8hh2JrqYLEAnLW1jS4UwG9pmOXi6G*-Cs@Qy&W#d+KDn>9>A( z3#FwD#WTh&NjwIRCR-zcwU16bC~tIrm*kXBwi7%XkLh*b)h0KndOqMj5eJmw$fO#^ z5z*v*URpelLP_Hje<&7VN4rn<0e@J_8RllIkMGHAoIas}*J5vlzW(y>rRXlViFo*J z&E2NMLS+D7EdK7ai!fX%j#;IT2n?nk&vZ~P3#p%3NjKyYt|n-po&J_lcT_0cbz zkbMfE)FIo{%rAq;Kn6hKSWOl(n9-~K<_dn{_8F|@%oFuKe`54yfGSrTIOy@eMFshD zo!MN(_6$&`%C&yD_@WUwUXsgxQEM;GS_7j9=xXa|LNN1(0Oh#rp$d2BhQXV{C9);% zeknkJ`^lIS0hi9k<_HC+qja_WBOb7l<(72>Q7Y{ba8VxK#hQi317_wROV39Ggo8gK zaD8JLMJrdme^bjJaFDTsLz$Vdp=uKAmf{D}989VXYQo8jZecDOv5jo9vpw|P>x?5- z0)N$=p~yA~F;L&l@bI9H*}=?*Vw#A3NwmOwlxR$YtI>ESlAH#6gC`!k#j!Ymngscb z@BMX3WU|Qgf~`V=2S+HFKN_j#9rIuI&61N@XvX&54T z;6Bjqe?8*GQAmQ=A=xfC0{J!km*sl#-}v<5VD=JW+2TPGwE80G%I1q>=nSqc>KBhQ z0WzB?h_WK@`A)L>f6>iqCMs;~g#y9qo;VJSBusZ%&+L!PN zGbh(b3I_@tXfRu6*M7+bje;&&ZPBsQI56;kf26`nQE~5wW;faE@@g*V8KOlm89Kej zkpWN%qo9v{UX5=3aidbS@T2_LnMz+jnWe!d>Po;J2XtD) zmlP=457%#d;P3PfD-HA=lqJo}x$ugePfyIvc zap|eq{#}K#$-s=)+VFe`%OQas-(H#b?RfgF(zY8aXpIm0_q4N$7YaD%z;iRA+EA|$ z(ztxSF@rb~yF)M`6Cy;s#H)mOs`R0If9lmO`(P;G+cPAKpJNAAPf$UuSFsmR4$_kr zEArI#-{nV=kxh4Ef-{Trm^}{kE z{$b(z#Z2s}Fu!gK-VUt3NR{$UZ78Vw}(-hqr2;lZIiWG0Vr1t$ml`QoJES#tw z5J)Ri-IllGfPZypoi!&XqtJeve?W|ui5wO9@mREK^ND|3YwyEQl$)8`{OAr1XCvo%O8EN0+#Y7XnQ#HRU=}&xa$}8Y_{h z3GGP6GGLndBtGOHDuJ#R=Lof5Ey}FH1=w=7(XQxy5Xha;nG-*~U+f4F!f{)5lIujVrM@>_7S9NVco*Ge9AYf*7R0BsYr`6hiiWPnR| z&9{W4cg#}`mm@Vy%-B}?2d9on_D#;#XPGsYZ>wnkW#sTPBcb{(APcz3H3X(15{v+2 zp{}a~L_%w-eKalDo91PzY(+*q`>yAWgR(|1zgf8K7@+VBe+X^31g|@=)pt8w=;zi* z*-sqlxpv8IeqPkC02n+IfdWR2&hM zO3w*j(Qrjk`_TJvpC=I;+Rs`pfdWCekOvDPMM_w2dS}i+Tf8F}nyIIxh&vKNZ>18& z*Tans>~M`Qe}uVTWDAU*a`kM048V}qS;kY^eHuSrt|vZ+TVNx8V;YI<+S{r`*J+@N zwb_!Ay`0x@l9d`faHZRPcQ|&$GeOL%bnN;W7gd6(DQ(L-%KWQ>zkx?bR5)R&wiCT! z-eYb50%vE9yfL%-16V3hN1@rU9g~T_vmRTr;{>tef81pHDkbSw+~dIgXWWd=JAwqe zA}=||!N?)K`6;>05~4{dDoVCW6Aj_{4nkx1aZ~k6%}wco0wN53R9O`>n~ZrLhOQ-% zUB3GlE##-cd>45OCRF>>hzL@>4g9!czUABYA!WW!jdp08zx5EL1D&m%ehtkEm=!ZI zLmoSefAdO(jWuJf+~}MiH+jWJ#-niti#6b)N!Av9HW}oy%YhZ6-vpbPP5|>lk9P05 zLib2->7lcu+p?lF)I^GkUL#$5Zt0c@h>#idzfR6J&%e)uy!{Eru9(3<_-f}TA9+;^ zJ!8=}c+A0wSA|fVLO|^Cez>j=(GZHGQ6W87f2(cA7kdw7YoDrU_?z~I@RYfhvMsu< ztQ|n_Cj0n<0BR{k4S%Yz za$@|q06SMRkn=yn%t7|H00jwk5lJO~MRkCL7?Zjf0BC0lkeB|a-OkyG_aC;I3CQ+e z)6oN*{}AqcINf~&i}xsE)M@K z{UgZfAAJDoe>|iCn3|dY!*;Q;Q3TqW0jS07Z5>>k%|HMJds8!z9YEFI7HIc>Ul!2T z%EsgWm-l}eGS0w%d=Rm-_{TZs|3Fqwl2-0!rpi{%|5$AfwE4%Pf8$za|G5_hGgB)U z+yC^N{o}_!H)?8cXXEjIkNjthe;>%Cqo%E;qe1t-1^9Pa!p_9r)XL5RpyvFKmq3u| z|A2p&m4R0O*`EK3`R_IXSpHvst^jlfS-AuBm>K`I9?bvx{u>$mKbEMdy}K6!3l}$l zfsKU+z{1AG4B%mB_xb1ZTLU4{5SviBAJ=Fo0%Z2F4>##1zV>!hyM1J zD4Z#Wrkk1ip+UFA0=_)ib)|=HHDGCKw10trtB#-NhD0QPulqR07i6Ych_>FV=+G?OO?F4&f&S|x*W2peT z6id{PvbJ7mw5_<6`FlGl8Uref4Bby8v%hpzXfu`}1((J`&%3J-VR=D2NLLhiMwSJ? z1043lbW2*zf+jUt+g8ti1XPG#*e5x~Jy{k2uPl68r2P&d_wMz+-|+CXs+e1913Qk` zYJwrk`Fzf;{Jq-BFlle5u!zzhiZf=z(q5zjuBxQFMuzC22d&v`9V@hzY_Bl~&Ay|B z!n|%JqEpBiONF7NA(&OL^$ac6I)^HtYLD-+UF8Gt?>OGp-v~#4>S&}j`;>3Vx?8#o zj+Fevp`I*4RByixIm`G3=A;BLu*35_ad9~jQKx~cACx^kz<5q(yT(e&G!d(-2r;?4 zW0DNx8GC`os|qv>0u|Ts(r1q`=~#J$&nAbbf4ScN$RS17Qz>c6tHzS{j@{y( zkQkPlira6ZajA~(&IrKgXmn5HRwF#kVtIr{>k106=F}6*+j_lyQTZ}<_O*7)v9QWa zIJnr)t-_bBj*FDJqPUViIJ?8AV4$z* zbV&7aH}nAnvH4kcofOJrTn3iF@}4ys#ett#@Svlk)Ei=;{z?_+cbahFa9`xMTNd2y z2kIE$(emY5PfU{*>$lnu5E5BUo~p<|WJtDu?lz^X-`^=)9Jp!+ni{VCKzSwhfwyvx zd{<9(<8coxTPt&?%+^k$M=fyvj+qwp+9^u) z64-Zr2Dx{F?OA^oMAjgqgHh!+cpRi9CyH})WMlQ&v4UnTT(>;X#m;b&&mO^q6dL0IHVp06lDQXGkE z4T;iMg!ZSva;~f-n#8MeganU&;c7pQCx`q5KNl}Uv2IjwRJJN*jB#bhnj1cbH{&^9 zM;*Ztn!a9!a(}0V$)j#q ze2TEg#i@z8!tb>bK)2PR8j)e}vhLZYuI5)MV6du!W^?0II0Gf$^(tY1bV|X#wrG)y z?V|kVP*-TJQZK0)#7my^ZRlX{5DpW5ZkCTH4y7A@CsIVEI-jChC0-ua6`Ka0DsDoS z9zoXGz+SYEBt9>a)W0mcyC|ldUlHEX9i=;Q#nLhi(4x-}e_GDq6I2R~$qI}FxgCK; z4_=K8$Ws)~hU^FB<+V9~`A>BVIzW7o!&lhk_K5=$34=wn+W@$Qi6YjaFRpW6#C~+K zF{qsC3Q0=$9vclJfo@4|oCzb9$cvIp9zWy!+;bMwk1{z|_hSf7l15v83Z*THF<_jU zx9!8}e|JJniA3Blry?tGjj(22QO@N{YYnh5sj21S7T#kZ^Gs%c`3w@@Uz<~V{8%w4 z{Zkn{TddBk0#Q6@$MB>Xfb3NYyfpTAnH1V*lFbFi%}pT}3;;J>>D~>fdivD{*=qP` zrHAy3pbxe?du|yF#_BTOV~$u-Z}%j6OW9?+dS-b}KiELV@5IKFKhJ(|C5WJWruU*QX>;{9+4VoG4dj;*kON#54@JK++2uM9C|Cy@j>L zEL*156H$>uK3D3vzsTL*F%l}GAiSNwU;3BMOj*U*uH4~4AqO1y7b@!)ykW|gdD)nX zneMN;j#PAuLdt*PaAY9^sekaN<9NT#6ykt#qKZUT3ydRwV0Ag~b%=yaTAbt9LKAk6 z$NRb-r7Gv%FXeC*MWhGpA;wWQr}kB54xk1Lc*}cXAIYGKA&14nZAS?Jr(E>tc5FA$ z4Cn{>OmDNa7IG8Z<-z!MB@Mvgd;LLvcZk)6D(A@087H|Qt^^WHU-tf(3QiOz zF=dy72%S=Y{)V7^@*J=M233Mv1lLp#S+Vx|)iDHrTO#eMxMFE~Msc}MxY2oBj-}ud zwNb%Pa{Bo=hF6ykkuyu~GWD#GM1Bg+Bj^%Z+`J&EOlqiu_gy@zF8z^ofN6+RDHKql zD3T~fc!hj3(zO`Nt8%KQ*aL?haC85#4J{1A6DQGsTPCH%UC-VSTjqMv6=Hn@%LY&u z4LjHFThU?e`i=sf=B=1YGpQw0)GQw6FR@|N@kQq;uXGzM=`snFNXFv4;Fr8A z{PSVhLN=$^SX4Qo@6iBgH0y><-N#spb2a!r`jgP}D)drhE!0fdmTOQqQv?iXHHH{I z_ydW5DE`@PyG@+3^A!T|ZnyW)U`o-cYA`}_*sq&7FN>D6Erc(XE90+Vxg|bhw=`=p zQ6vns-emJkn4)NZb@q0yY)%t}2{Wi!Whf&i`HE@wcNEK+sVdztLkH(H>QsK_X z`n?s+Wz#>(z;klep8dK6|DOMW2lLOjKseifMUEW>c}ZfhK$CB*%zobz3-$#zgC3df zetS#hcW^V1h3C8ACGX+D9AL7*KP{E50{2lJp0HR{+oCYOJE1AQI`-1%`JFjFI(DBq zl{S}+DVlQ>247b}u&cnugZm#9|1icSaW7sBc9*81iTugo*>~1}frFt`{}cUYPa^1l zco*W>n2s-X2=Zl+x-{*utKUM8KVqf~&EeX~K&b}k`M|^)@!o=EOz$_!ZnWgU*TKZE z9VI#u+f&BkE-Z@GjCZJ$2+|xcPuO+AmGZx|2~#5J5wgdAe5DD=XcV5CQlm)iCUpF+ zKxcihRDMi)?{y4tLf2p_`?tEX{{`aq}nUPFk#&Uk8JI-@=1=*7iW1 zDWaMyQZq*WQ73}xrCcc8NfTD2dn9^1oq;4O+#h($#P)r#vkf9mG6_F2)`uxWH}4`w z2Dj{dXA^1#h=OYQY*d0Tn|68zYeb>cvF?x*<^aOqqH^S(XV5A-9?+hNQ!A=}_rkr2 z+~={0LvZFGs=nyuOG8-;Zd*=mnBSMmQgi4LW5>;@wZ?-Tx$>DdIBhI#V@>wW%pmt_ zw0$5A#Jb2^uWF&zT-ub^m-Ymkq#t}a>}l)TSh63rWt>i^Qezo*Vy&K5R zvd@>@{4U1fBr0TaPVTV4qhMQRju>cfp1u0(q z2w-F_Cfu|cCB{BH54dPo;SA4@6DJ2~F-Gt8c+qEA zLw|xK;DerQwva=l;8BQ<-4E-`eHs8CJ0XMww{0|YwW zLVnIMMJttHJ1(mDQ4pxfv@uqx9iz36w#WoxlTm(2b#gmCetxj|~m)v#_g{)i~N#{7%HL0!;Xx zr3l!~`iM5x`?uxsH!S)1bu^2AExMOQA^sE%kiLxl+GyJ0Ww|}|-)1ZqV(Lk183=W&r7FVRsy}0FH)VUQ zg0w$4Th%z3qNOBFgxqZ63z~G3^KWppLxva%hT4`HZq9ZVTVy!w5M_Xe(%M?|7k{oi zp_$EH8b;qoB~g;SL8cVe>S43|xu8|g*7>sMtht@c3{w1 zn{1vwIm38t+Nd%YejgKfOztCv`s|$Y2i_AAJFj?P;bVc35{~bgMmo5!Ta04&JN(3)O_^$EFgPFgC+2#BNg% zzfbjAo0Q0%tq}9Q&de3=3KgwNw39!#MG~UY3~g$YVy0wdrKL7ak=IeS$F}2;lCf!v z7ea(}Z_*qZe$XVG7NpB&JG>sZmSKCbMxs^FSR-&u58mEpM*cXM{757EeO{IP*0tcl)M&1O*#3)nm&|}`E=L(++ALWj+J$Yx4L{&LR17l3iI=*4r zj-{5W#fpjDEH0Ac5ISsFN@$foL zn+W(plc)V?ZdQ$xij57tZHA)vg5ghBPc(td#bZKr$BYm?v+|;3@@}4|Y{3>!go|;r z=LIBZ&RcuQc8Cknhy$WJ1wYR2ww|otDc=pCd5rf9;%HO{itL0oJw!Gxx~FZwB32U&xP?{( zq%q=emELWy-5-^J!hZ)EQdY$s2pi9&jKsQ$GL$+b(kIL}bFc=60)S0m!|JHtW?IXD6x7uDGqsve63RcYu6*pP#-QsG0VM$)8`iy7I zPSUqT!xJ7=JkGMK3oPblI?i4v+>wCNGG41RR4Np>*g}qxH9$<4T#9WcZ8e zaTCiT%~;-geb-}atOEuI1|{bu2^&t*u*QRLwhrB|(oXVE_d6yx9qP;FJg}s5O26EH z=l>FpB#g5|WFw-me=*~KoBH#c;A@Wjsl3 z#W}b`fcpl~hbuqHlyo)lLQioK4~!dAA{P~*Pt~9ZBGoPhFkhYY*ZV8|!)U#@hfi-X zp1pjs{&Z-Hgb!*{58}Jbr=wG+dxm*=Zl^jxFNus>2IEKko5|CEJC80G;|*3zT}XK% zi*AWc6=;S*Mfi#C5bN?vY_EAu+GNRCRqn7cplr!lOHr7Y0@Q+4;?mPe-}{;B=ldZ>q8bQ#u0_q0laN;?@35DBzePfd zjQUkkJXgq;N}9L=C#LgFM%db~Q3P7$=r%^A^N1T<7D@htehG!F7HV^piW#<@YS08; zktBhwVn9`tc*I3=Z*@-yMY8bdb%sB$x1H{#R!S6q<8w!g(hm}GY5wJAX91ER+mXFe8(Nw&JAV4K$JdJR)C(-k+Lk5|Qd|ucP6D;Gc7zv`iC!5xo06vi2nBxbP zsklB4h=Xe0pugJRD${Q=QMmw8>M$lKd!}NBQCPOsV$&?T%D9G>Tvi}PgwSsC;W^L2 z;T1Z6DnE`%2A^KLBxEBYU-Xh~#qOhXlupdKv}}-%#SON2`PhFzakMnQg!UKNa~0-8 zcb*m(%{M=6kWfXQA{|3g<&QLNVn;4xXV{EJu44Sp)HBmwo^8!zK2@!N7JeOfSz`4Q zG>&t#?T#bsGd8YB`L2H)%Mnm>%B$!bxGah|0`k*mX0*P~2hO4qT z&%TSTHuZ}qE0fl{Tcj2oT)_SbazNJVO;ncoZ`X=kfw>3~Kvc(ZPFzeShk)&Wb-G*q zOW_`d{lYLu>!aQbCvyyu2MHTOc;zI@?#ev2>mH63My}Y*(L0&Du8@f_n9#c>i4cE$ zZ>43Ao%l*=hEmTLQaJdZWDYGmKUwieoZ%DLM9sH+<95Uf`Cb=({REA(FVPH~l45MF zo$$W zIU>wWj3~e$r*kZNY?jm9P1pbQYHLBBk#AA41mEFZAY3-?JzW=zpltJh+bIdf(vQ^* zXOE$(791&^XDkSN@3cr)(9WVkC@D_k;P<_XfOcA=xp?E9`KD7UyH#;m`TKO$=C+qW zWg?|kpJ73+%R9Qi#+OE!&}{@4l7SKN%Vw*}VSuYiIrR8!EAaf#JRt(@?=#|PDB-YJ zn$Ph}UJF+Cm*fIBWIZ{wN~2npoq|Oo}QuFFziqp4BP^71kY} z_#d-k{NA~uHlJAsG*Vqz$Y-&# zoDA7K2*f9?;n~ZF_gpFbmu&wT6}q>a-DSdLFq)ulJfgWHU&75m7%8XZV~SpSKWq9DEi6^VHU)kczo z8D>$-;M}=YMQp%UFf+Q*C3}C-6~v}nkrbP2IzbU^V_`G$3Z1j2i?Gb8#vMT*{8x?%7PpA)Ur!cXM3Uk+NEaB{;@_f) z&$U!Uu2aW<7{`Rd(T&RNvY$h-taqT=)NF^hH_fVXc=oB=DOX+fveN0KY5rx}IhQtK z#hw^GHVb4z_vNMcN8>8#$#_PV;8))Ry^9^}i$VscAKg z5F(}(wewgpPV9CwS5m;@xoTpVvt?jtJhyqSu@G*55O&z58s`j{(H`+eWRRX>+%x!r zeMTnVo#BU-elio6QOH1k6fV@cjWN6|-<+1dFtJ&cU$)eLGqBZ1ui0q+g#o-xLo)o; zYuSD7(g_l+oV@~pp(`J*3JI&%nRn_XgBq4cM{HZRIufYYBtPx`D<=*kT`l&83_RI0R0;)vn>j@##DP5zj-^K~C1j0o_U|HE1eEr9(H*toG};-gF;*gf z9JKSE^-I?|AZd~vcfbY%7h~~n)D?AQkHQeS&R$3&-04DPS`UxMr&&L82opFLH6z4$ z2^~Wp+9-VF=u9UMI#y=~YyC%!7nfUhw&`|u_wyOI1qAJ%@(imDtQvkYwm$4|j`wo| z!GkQ=MX-fYc>wVh?w<|C^(P5s9em$^CL=&luwkORl4Ic^yPw%?s-`x_!9xsQ6nThLn;d`?cnB4!(U`>JE2*u&<^+ zr_hsBggK|#;B2$?na@B`Ij18@#%L*#)A!0ig0VX~ZKIl}*oKRQ7wT)MsoYXYT@Krk zja&%EVvPIQuJ5CG7VL@h2f&nbwB7AxsK%!1c9_DP#IflfIxt ziJ<`-Y4gtHI-cOjUX3N)@|) zdAKPwE~)lUf54VeW{q-uN}HFKUW=N5NX%hEBe4tej&;B6?|Cq5dcz2ZkxGT^a(=c= zmbHnu!;x7@hwhZGd zz1*ChUpVP9T~=bPD3Q=>*VZ(PIDY&;KQ3ykDFX;*iLRw*kuIk+dy9%pQK{$kf(Zo& zqe`W*&8hg~7jTMy6jy@6Yn+wvw!ZJWLS_@15lQ;`x`%e$YDX@D&EOuhM}iWIdSV29 z?cnAD%}6a-gxV36h}}f00kahx((S6aUmZ5p3@|1H(8;>GI_!{$WU%e^UP@0~zP5;X z2=dkey>4`6#O$=HZpDO}bI08ZQopg(Hm$5`<^sZ{-!;{Lx2jwWUM>PL^KFA?G3wke z`j`kt^i)cn5cu8?aqCB)%%dDl905 z#CK{rHUgG^H`QR3W(0QdTPlRtd~Xo|c{}7V`t3f;0zZcvT&G9LYd}qdo{V5?2F$jD zStaco1ej+edLTRh?q}7h>%u9)5Av%57xgR2&5T}Al9X`2w{sFU6|0*tGBvF&XO^HXE@vC-plg|8NS1!-kRo8sY_wgfS-Ss zYWX_%9An!8ytEn+s#-+tlw>9F!Ue7eh*r486S39;j`i1ZnOvcWkPD^A9u#HJ`q|+} z=-UN*cuSQd5w@H~9`4~EjB^NFsz@#x18Q*94U?jBFB}ddEx4`=#C4p;32DHa_WUfu zg+Up0pye>$;upfz4$9O=xbU17a0bW|IeW8@NSL}oA;<=(`9 z@~-IKu-84-X`i`;9=}ZXnS^6dL!AVP<9Wg>*?0DQetujKEePm8lQC8v z|5+F6aFP~(??(7-jje%wh`IR8bw^s&var~N*q4uzy>&9`p?3j<)K#T@Os)y=@ry_j z!ueuP-_1hoU-RXAEgykFpZ6x%HM5(4bUAm{=+78(A2uqqxg#D+C)oy^FfzfOlit0S zk~j3FFco(f2s%8{p)@A)a3%e$cLs*|d*fBdhja7D4AuJ=uU$E3T?+n1m$1yt+az)o zDNyUKS)M^H=&Bh(Wc>*j3wkzvbN}L+e{E0y za2=JhH0te>{|&z6s|`OGgb{fb=Lrwn7uERH3Ttr6Lbe;uuE|YW9wmMP@WV|wbhwWc zlKO&Ek2ub#b%E4Idms%K!wGMH#xwYM@_ZM)+&18)Xrs!?(o=qd*?E$_?QGVQTEsV* zoW;+;iRg#X(f+-r*+D&fyp&dq3fp*Nw*~#uFxH~(j_rnVhKkmT(F3=~VT(~FxygA5K^HiZYj;+}DQ4a>k^Jh6AT(24vAV(*~#L0C`5E^4Pt`2+q3WYfln ztMGU7f-HTq&K{V(Wv#z|LwOtaAshXXT2&8uJ5qo1XJE{dY@#nUs(_}K@l{@Vt-obA z(sHz+J>`7;-W&1T*e{<&w^QuC@Ru;4`)f>`8&4=P?OR zGEJ8tC61NHJ#7lBUOKa~bEgNNc4sl9rLAI9F{IWzlah}4y#FD8JK(fBzBx5|gJ91B z+6u?(aH;(vOzlU3`VK$n^+|orbEcnWl*)gEzz%V6Ma@@~5=fuNjG}jX_d!Nu&Coxb zv~>JQS8o>i^-fSfujcT$Z*`hTd_nE0jsi?7Kbh_0nw(H1CgL~kAyTBE3a0>0p;VAp&8a}>&^9vjv@h_VQYe#?wT;hdB*i=jleXjVO zZ2kz2#hZQIXF9N|yc05n1hQ{7J(ya-^bco?TRE$U!ivudO?UP1zESylpCZ%b@}I9@ zuD7U921iXgG1N4sNvrO}z2B0|@nuOcNsfjCm)opu7trK?hvT_2c7>agsZD;$`8Cyhts;@=OWl zurDq#=r&EVllB>R+>>dzn@3WGrNMC^qgmap^f0BEIe0$sbc6|p6kE|TdZn3oa@vh+ zeXFR$-rLB31)3vzzDDt+c2ddojL~PBFmOg-tJX-3PBr4IyZ=Jyq@g~|%-=w$c(5I^ zReXE9hpGM0RuCcELAp-vn5fHFfCw-avFcf0Nnn~QJ53&5ur}oI!2_MF=I;%@_y~Jh zIvlwiV$6?O0!rBdGGlx5SVp`XIU9L{q+FQ0f^A8E-4kJ5!*r^hqQ%=V5n%cIu`AT{ z!#90SHar!{6+MIwOiYDv_`oE-T`erOX$priJ!i}>*oHL1r@!V|rkN+Rk*imorSNt#*CDP^C9-nCjHsbJsD;>D4?E28$+` z;wiQ8kt?3|SIR#jWxJw$wF>-KLIZk2E5YlyDnbW6b*GkxP_Lc-s^2Bk7(caB`$S`ZgAS zrOW43-S>HCc;Ae0KdQ=NZS&;LO6B8@wWN+Y{w8y1gp|89he?|D26NX^g z7IxC6R#r>}Idhr~)nPt-*YSY;G_-nuZoxZ`T`q$suRL8+Pk#10_fEI}JAEu7a(Tm! zDqDPP6kSO+Oq)48almK0gcuE9?aG%g8^86nzfZ(c=OQ^150j#>P^XjLK0|%l10@W| zg{lc`C;06<{Px>E)}Qo)1L2`xo}WZ$G~p00d%Mu%;MvWD1j6B+sB0VfwTWPVxuuj} zPm%1Q7$lfh6f!c3168i z%}>Oqc+gnZB*dNcq_WosQ?ouP0bX1!O>f=%a=PG;b_bbgi35S5WTzVZLS&*mi!Ule zz;3&l4`yr;u42gKwBb-?ldao-Z%l z-v&-HfX7>=s$ED7Y|uoT7&CWr1NK2__r5%HxmciYr&X0fbsH@m6g`oHLDP=S);7NgT@ z*52+C2_|PK_IVmsSj}L-uyceK$zEY~qcg}s7?g5@CX<%1Sda4t$eZjQ%1#S#eC#uh z2W9H&?+71MzSf%|xpqK)F~tmhO~<4tYVo$l>26j!)EcDFUkvNE_dKGVI$Avx!ReC{ zpR1y+`|e~1^R1TqecvvB4+_6?P$3#F4mJPE<3lkCWZ)uLUCw#5qIQ_fv28V!VbeGF z83SLJ2ab7fmvF(^sCkmX&>Hb5W`F=mkjeZgO_d z87ep8JkqZjYkpA~K+?XkGsHBzgu}tOG101QAzq)fPG9~B844$V^KLW6@Sd*T;o1`&$g1WpGxjGIQtAb%sGWhN-y&FFx>JF zvm-WnAig~ae3eVNH+bl{3_F$f5or3>ciXLUx_iHH8;1qiR)Pp}F7_JzW&1;d`Ar88 zl8fs!XjnP=m!NfGjpXNLyH>LGE9Lk%4Ikb`?bVc{+AG-xM0S*O*WLutw2?7x`Pkcz zY4N3faabj4D{@?{2_}9O!S~DF_4%d3cIe8wB;adM`OyzHm~S|XuN4%kaD)kpG@4i( z{|AXPN<5ck5CSO>F$ynCWo~D5Xfhx%FgY|bm+@5s6$CLgGclKe+W{zlcV$o=OtvlV z8e9SgcXxMpcjo{HcPCh|;7)LN2n0B|26uPY;O+!o=9@cn>sGz$KU>zWUVHWW(^O>A zPLA%HKF&ZkCN^ePet?Fwx)M7p4<~??nFEQ6O2QRr<_>allr(b(@&j~$mH-W)Gk}d9 zz|P9bhC~IBaB}u>1zFpFxC3Y{=>91JwC&9-K@K2SfVPvplPAc+1|aC^=_%^z=E3ah zA#IKte@TPfl3|Kr5rH1&{$c0$t7Q0jeJ6_8<#@BFF;h=mw+% zSUI@@?EjqrESwxILI2|9#{3TfM^B)u`(I*Ku1*dBB`HlYX%%IEO@NdHi>3s?%+V5{ zDEoKZ(cO*zFB)j!>hQ1a7y<78jqJ_-8=3z%`fu0O``-~W5*r)95@g{HFb7(L9FbW5 zrJJ0il@oyb-(^b==l`_+5_0>?4?z1@Lpp#Z(CRPR!`@!m%mE0Xm2h%!_HYNf0+gIA zfv%1KbteZi$N!*z%p5@WKL20b{~+Yt&Hm~j=4ky_Io5xdKyK0?Z=j_r$o;R>R%Z5p zCHkkX1N`^9C;=@&9uEJW2maOL?~7VGIokXD&y|1I_~$|vEp=r%JsF1o8sML{l%s`{ zCCJelpyB>kOEXu?{}%pftD1rS?VkUT`H!0bZ2y}pnYp`vg1i9+tjzzi2kXDiedBMWywZ+Km^rg6H~3;|myV0tX9an9HbZ_wTDKA*%G_ zoLRXiwel`yLYOjaF{b5hy|5UY3CnYLjxuycG@ml{-%)_O3^f?jHerPq<|0o!D^L;n zq1z~zR0JkAg%!ch`w{wufq0j$u?hYQVFOeDjZD00W<$DThqWR77$C-tYX1a$z8Py~b>(SWyCumOW{xd@7#=z>_ zb1~h3NN_$)(a!IYx=_TUv(af3Z5WxZKg~|Yfj=c#2iEY}i>@pvPzVGqnb=hOr7W8y zoBhInU(Q<)8+Y4JDHIsxOtjd?NFw7O*q~v>RueuIa%-@5JvVmW5I(Jhx_>1IN8R(* zEu%Z>ydJ>2nf$~>*TL`0m+C7V7PgNpNnC1(=9Y7)?7GcG-QKBkq}0t;G@QDbjMUQ_ zJet5;ou>ZSO#lrP3qsI!OyEXKX6fxY*?kMOx!ZNlz9`epLs0TDo1*i z<#TPlQ*vvX?wT0w9+7c;$R-0xu&-9@qasAXuWiHuC@huUm0v`4UP;=?UAG9q5hfNZ z0AF_R^stvlNtAAfAHQSO2Hl78=O6EX`9UV2w?W^8g3ii6ANrm{3R6tEpFpx$qo4Ju z0vh^suOTGUmNnoQ=sOk}N)HplOzX|t#?uGuM9MzHtZo{y-d9t4%Ba2y%CZ}3v0zWO zF;B?$8tiRRy8J#%2riByhpe9TX;wW_S z{lc5K)|VnRpso>w*TlDiU33$toKMYo8&Yec+9TqmoNxJ&rEfMzO}6l|pCuF> zJkI`6CzyCvQePD}D^|mQlIviIZpXFgd=@tAN0p=lid}BbDptX@XZet%)y~`w6gxemP$+Fhv~%ak=_Po6&jc&w4`Ca8rpaPs6Qq#i z4)U*bov+?2_RGF{Rz_L0>R+t0RNBqXUhxlFt?d&=h{!9+pIE=v^XbF&qtuk&Se3n1G9O z#OFC>JLiu*N18^1*Slb%m<4Y-=kJkqvtUR4k?CG$xfH3dl(Oo01TbQiiz-(I`TCka zWy=xV;dI1FXbFY6XYZmLVC`$HnXC)o>$NtR_dMf&-f_}UeB)R`CLFuq8`c{!&}e!I zzq)PT&DvF*_3tS@H7#FkVN4exVDr(qD>(ll!QyG> zZ<{5Qu)h5jpYGy;53_~nwe8p8mh=AXrl0k9xXThLQr@ zJ;kPfi;c28NJtTJ+!5g{%y?3-4ucR-oD$KWYED76&8tjG&bY`MG6wf)U%$ z4E_PzaslC*E0$~=5~;^U+%w-Q`~t8Y*>!DVT13H<73Y*I2!4Q#?05-7;h)FsD0{x(hVtgIgyd0@~{s7*y=4VhVD8XbwUW& zgiW#cHo4g;6=644t`~~i`begL?speUDuOR8PSI;H{U(c3E5^^9!9vCq(4^k{k`!c_ z@f*!xs*soFZO(fJ{f@4gs&f={yNAseu4-OnG5Cb2R~E2J&4K2DA?I&0^u9qHJh)7M z#1BW@0Sgn8&$VEFq;{iERd?yFyXB4@K=T zKNR%rk-0r?hjfWrXyQ8Kn_~iU_40=>bDO&4-RZa|a~5{>1mkQaXAT@*%jp5v)G+FQ zOeJd<$hV$Yd$Ads2cRX>F39uDb zvT3FBsB6Y46{DYLLOs9Gv!xPS++XNh=~|?FwCtU(@{ZMWYsM%*=_Z)XJRMK-5hV3& zuVpLg)-HW_@{pgnCiu!uAWaN;Y6&HB4?Bd4{2pl>V(iQ5#Q+wgCZVhqp49w*OoY)D zPYsahz?1Ao?UDzN3+_2In!VcdYcj2U=db9zHSj|Zf9t$&xVFW})Fa_fwuK`ctBdKl z5cutZS`kq~Gzrhp z56uTfyfS_>D?~w-TBDb;(7Mz~XO zDser(U}MimU-v{zxwxD>5j8Nx_l!4yJHu9Z6kq$mYq?q^XfaBxlsvg8=7=ZZ6HX{r zWsqiKT-8kT7+&nnr;T752RBHZ2acAknJ#*+{h*i1r#?Y(rA0NgZWf`6A`OT z-JEH`uN|?xHBcnP!(7_y7M-3nmT;vI7G4}j8g=~1t(HcyO4K@6qoh1eA|rqMT5jXY z_VIsB{<%22?pgUybQnhWucMa1j~{7hCe6_xFNo@Go5d%#devipYov{^P&5zm7brZ> zsb>A40>`&!efF;woL94{hbg%r)FFg7bzxLp%gjEy#5u;gI8H(#jZkpy!W=Tanp3)ODbG|gG$q1FdBvn09HV$zXje8oD|c- zp^dA;U4+djHPxZ%Unx^N@5V8TVS=QYd6^ig-~dX}sX zK6yluW5sWO3-fs@75I;9Xk37Hd^RvN+bEbqS9A_>=N~j z@tcU2c65o-kr!WZjMqq8{`W%@%OXFc-J3df!xD-^ECB}pf1wVobGPEFj`_*TVC}-h z34hseVUvIf^{SvtjzJ8D=S-n19ATtKUVzEZjzQEL>cv&dCWyH?O%t1Xq~ksf8g0k{m77yuoIB z-advzld_h?m<4XQ#heB?@M(_DurP6ts*3B|&%BE|f2rz(kqhM$jY$$WOHQZB6oCjz zBB#Bz3b|6s;LKFn*oC5T(2yN*d**PM(CGX65mgEs?ri#y^#~1nK>=p1fWM_D?eB{i zoHx|K2!YLX5TmxUeBz#RFKd;I&I(sCjTXu3%wFS}%x9rL>5!a?)bQW7rrGu3tamsZ zmfvWve|HJ(QATQTjXg6l{}sq<{s82)`K7uh;d z#Kjt>-$!LjnsKg@GhJd|TC$EAGJmu6$TEPrJx0rlHE1zioT=9 zf8Qq1WALIDl;c|vh{7G7=6=0QK~`SP0g}Z~jAi|!sal3i6Hkm?$tQa zmvpR$sK{9>o9cJjjBvV4RKLyv4a!CfWFQF~?)H23${5L9s;?&<$(P^}gonW#T&7DiJECh#*}^@)D(W<9 zQI*HxoB&rsG+{?FLCpmmI#hvDEI(^9F;-@j%*>EmB;SmCZUXcvlGbXdBgj#4x1KjW zMD#Y`q+{mvw?JrBz(aufQ~j_f4yG4 z0EX<*Z)2V{D|RgkCM`9=qyUdR3(f(XKLdQ@2SylFsA| zgw%KsopJxmIYs3wUEzTFhli;>@$6~X%)E*S9tV6~a&r5`Y{$ajIGi9;k~;6R5Ni+a|p6PobH z4G*)uWW;dZ-e^ei2IEo1P?rFcV2JOe?&V#~`p;?XSMBv(f*if?l2?$H9q+&|%g~bR z&Pp(sk`@GjXVyyf2KNx<|*?j z!G6T*+nP>5;TOrl6Ngu#kcCK%#n7}yT@vDyE?g=5ss|CSW5!dF3n@v>GY1;LV`@Fb zvT@2hn^~VcadB+L^{|SyL~H8K^r`xRuZFs`NHia!P37Lf3H>~&xclxwTRPm?BPF~Fm-M#r5SN8t}bvuqPQ?p3aMl; zA5=vMe`W=)XIhJRP{4g+lN{&2WRS|_UJQ0C!Zm|;BdL`(ErL(KL=WKias;6TS?t?P ztQb{FP(B69hj)kaTH{!?_HdOuBdjIE+hifLShS8VUR|>nkgpEDe`NfOmwjOP6=5Fj zofD4+$DySMD#4(R@M&^IXCdHpeI`DAySk*f++s5^9ztlJIH{eX4HixG_aO5RDt-06 zGAEpDI?E!l#K~MaT%DmmYhU~+$2UKMp{$Y9Gk&LDU-sJy<1FH4tsvvq07-kM)`8(v z%$R#Ok^cGT7<7pSe`mdH_?$<@%%yqJprqiKY#h2v(z?kg#%Qc8yaA+)_|(t4FT_o# zS9N%K*PmF^%)mZ1^v=3B!VZ_7UV1!6z9c1w$TF5{Ip-OCTGJd6HhWT^jq_O->t=1T z9u+c{c!S#5PV@^71d_OG17~dHP03Mu8vL{6D{UeOlSp{Ne>ZF-;iOEe$_c_Sg16Ev z-A<42AmQOuH2jj1Hk_R8hN1n{yzQO4%H7AMShp~LbuGgFVap(8LG7oKYhZiMUa%1@ zt7_cY@0fBjIu(pj8DVDu{b4B=yJ=-xLtzY}EB+Jq{s+BoQ7%iAAS~8`n%W~$>g&A; zhKW8p4G+BYf8>h}w{@_uwY50vMju)LjBM=5APskhT`&$M@y>h#@MOVEYPg&&v~-Ctd>_IhSb@G(J`Z3?O!BBn5%0{Juwpmeu!#S zcYSqJ+_#8Px-eqAB(Urw0p~MzETnh66{xQB_IaU3f1V~RDU~L2#vz@(8astu_Jlf5 zHm>r(IgDiH&AupmU+9w;bZz-fcm!Ew`8Mf_9;|uy-9V6?BqQ5Z*8l;K{>6k@9@l!~ zE|u%|X%DF1PTKevu_w-W{k;!`s?m^SN5D7=& z8J3qfzV8Zr9I8(9dn&^YaPs<9hcyXI{ZLtEe}*FTJnJW+gdf!Fi82W;g6$W>xmZpR z$o1Y0j)r2-W_1(e!+n@F=`c ze?MiuYvrSzz6$OYc`0$IqJJZ}pRe#3Md!#5OaNF{QsD0Q&_g(wKj)&96E;d3T_*6f z-@+jn;xrpk{Yd6%F1_S-VMhw2Vi`jkfiYFywR@d>rJ;}F3gTeZvM;*Nw}MLDQAe~Oo-N$J2g zkLvq|u%6@1j9QzhQIe4hT->m)mvE+}BmH#CIr1(Nztv^3TwJZvHHk;IMZPUkICbf! zP_&A#ETcMioZoyKRLA%QWYSFw{wwXcWB<4a8`GITrHW?{PQ>o)pZ>u4bxsYo%q?3~ z689A7&|%fiIU0kn-wc5WfBZnoLtV3(?eAHnVd*Lm7X|)z6$0dX7QYOBz}t-GedBLn zC(hdsv|*LzX1xL9CznIM!y+T39Sn|PirE~iuzj6;!yz1LhQJ{46eW33_1VC>W7vjY zW}vFAO276~%YWlSCA>586aImaBBlXxKSD}X=y4rulzx19^8}}~f7iZx5VZ2qHjwN@ zf+5z6!F+)@PAt<+Hs+y!wi$0~|9#wqfYyE|uNi%~_N31~@Od9@7Gh4;nJW@+4#BpU zK7}zTN(gHMBD=qM`8Rq|!N4mRtvN#lf0(FCq?=Ga0nND#HYm0kcyo(?)4rP zd!~sOAG{^gj}Enzf5y44ty3U{rw-sxmi^jRC<(vGXvahsx18C<>{43rB}Eyz(u{q*LzBQe=Oc_ETf%7xu)J77cqk0 zGuh~CA>W6YI~H{pqnH^wiOSzXy09Vy>uVI5(H)T8K4&eg`9wQ6JKP>iQq$tD>j>xt zd$T2qCVUkbeU@jX4(%E*qt;Shg{5BWibF`UXbZjEf2nb7QLg`DKE<&_Z~s}hCZR-@ zky%pV9bsgSe=wcF3yNBBb(AJ{&!py8{M*dN4+UoD*I%&?{3Q`V1n5}C=#v=3z2a?@ z#VlnGxB-6zwSKA)grJ~aS}AuID`}=@8?F;dt|zv%syxd}T=ltO3wwwNZh*oqB&|6x zg8?l~CmZHTM}FAPYcpJrB2%LAnBR9OCrlII8s~{be<~s>RWrh5zjuO#s?)DtHU?cr z75V+0g*>}b|5P_CzB{Qk=s(X|Hc$Pb2A{{_E#h9?{@h)u%#W*?9l?v)6c8=^f>b;? z$|34X5?ixgw_>09%19U6G59tf?u3n9Kl*_*uoR# zgLzw99)QSU+Zo~%;lOSl^$$loQ$dvF8{HRye-s zF#2Q-5jt$-r|Hw1l(VFxt8H}Yiv13kJtvG(01$ggBRHdycKF?pg76q&__X%SQ!`6R z^g-S%E|^4^67|R`Oak+ywxVoTpJ_K%Ifh`NMPBKPINYEMFC}BmD%<`%+-$|#ai-zM ze-uZSjsGGi$WOxE&5qBi3*5YWWrch0p%ME=QAu&I1+$8_mSXYpjDbxapaWhOjfDQF z3{C5Ulxqc&nmSs?-hAlT9rUNnbrS>C256#F!O4HHldB!)XuMs%(2id2E#Eoh1UJeB zgj)AaAv5Lxn7yhu`(CuK&be9rRz+$wf5{HHk8guaHn^CC*nQOsmR!I#>jp2+vhee{ zokyqOcRKLxLGb+4ab)^oL6&U1rI~MXD8F$vl=M3Az-9Dd0^NY}4kB6bWa`4MWSw#w z0T)*!H2Z19L1%)f8<%zvO>sihUSu|TT*Ap=0=x}eX6#x6w{`HE*G`6Nrv04KfA%iB z?0+YPZo(x{H*Ai?91)vXXB;J0sW$fdqfGPZc``e=ANQ?N6rlLJPbbmve1$#W`Mr0i zG~BwspJ_eMt4Wq?lHXOS5jV{cLxbd3cqGRA5&x&xK~Tp5)*PDm(gn9AvXBu6$1(kV z6+jifri*>g13~30bOAN^;?CKje~~1~eb?&_1MZ8ZDlCnBVS`}nAuKQVVpiE^L1g<5 zY*7P;EcS41GpRZ4NzGF zoOZi-g}1AmJ=7^C#)Alm6_0UJU7UzPb^MKkhRxvzw{mlE=a>iM8b>xbe?5GoHH3P< zT*U>%9p7qVBk0=Wdv7O(K_uWRvJb_J=Qvicf+xF{Rq3U10OK%>y}7?mi}pjhZl)={ zAh5~8&a^qwjdNd%6pt_DO?&SSrIX#&pt_GEI)w+n`s0Tr1_u$b@Bx|3m)Z!~4y{A*Sro=b>#XZn8`%m_||Pe-AXKL)A^YS6)be zW?i+iiEaL|AG#%E7V>O|fZ+_^t4&G+IBmWp$?Pezi;_mI&|11UANStM&&&}Vineeh zR&c(PajIE+{WaqgW!zJgmb5DRLM|vtqD(XC&@LjGQPIH9-cOO`F7`mGChJ4&RJVV5^KRF_O0Z?3O-nsl zUaqP=CvG9y3%5pFjI*Dcm?waJGVm+aenX-0(<+-KM77|C$mF^RVHW`Xvn`iT**O;t zZ{@=Kf&p@aI+PZ?mhyd$izn40Yh^&!<*r53Yv}K`X9?rBe^Vdx`aGyjUr`?Du?J&? zTV9WM(AT_;fQ0X7&C{#d36_wz-NszLha#B~?Fy?4cs>-yMMf zH$KqO?p}UA?_0(fTGr_ehilM2|4w?LhE@uJ)aJg(vvzBSnaR_E%+&ds zWKTAKnY+@!wR}^wE{;^lxpbA9;M_08)kZ%kwp=3Sh)0tJe2o)M zxmd1T$~0*y$v##DO5u6a+O8s2k93;98S@$yYXFUw6G|L#8X)TBvs4J=!K>7%std-6 zskjgO8So05Ejf7JKT#5Jf5&B+MojpZH<(U^{wTW_!4PXG2!$+A3~ScJqU2rEM()vH zi};dhf58_~vqBh{I0$io$F-;H8jFgxy&9qWQ`?E0+Pf}jYd_8s+nW1(d!ph!Y@*HTB;k;McB**z9k?7pgnEVlzA%1J9Gabj)P2sjGyAgDPW0HWA`n6`M0W|rdkxN3Kmm;BC zfZKAZPAJ%3G}DiGVWGg4Ch59 zf7i+hR{!ZF%Ifr-V1F0V^IW5reQU71Ek4VUyCMApAlQm9`hEzLkG+8XTwG_ZW9?gs z`IM_xh-;vxV`NVLd$5Vz9 zbGd@c3MYqf)^~dGyMiY+lLOihO73ZFf4u>{vklQTO9Sf1?&|Nx+!oi@MP#L>$a#q_ zu1{({IIU(Zx`Le&I9E7d>C2VzuUy(OQSXO(c;GXlm~K8{SrHRStIN#;qc#G;JmD?l zw-~n<>r2ppLS{^wQp13l0^FA=DKNi{!mn~xGA3oTJlG_~ixJk1HQ7y84Y~cXeQ>ec$0LbJ1})|MQ@uKph@Na>(8G7) zRKuQDm|VAHt9{FkDxqak$#j1WFA>i;iU&Ru_&nKf0t)5AVe%mp&X}Zcy8d&YzG$DY z8F`>AcyA*3T@T9cVn_OU@C%6$f8-aY(ZimhX=~Xgf2dEdM7s7$IqAv1BoUU&(7z~) zmn2l~X65#ZpI>{4F2lkS56Nm~z=xP+jYuHq+=@aUeGTc`ERM*f74^XKR*$6U0x%@v z6F&gP;Yth>kcP(s)XDMAk$?Lk7ML>CMvNidGvCg}LiY~)$I2F!K8apmf5v_(V(I4k zb;sR0boQJt51ZG-eh8$IyZpXQ2`dHL^vMf%o9@!BJJpJQDEBxy296Wwo@VXy;8}j* zXZjfOuOH{F_e#M*ipd-iAG@oO5T)^^3+2)Btr>--qeY}zy;w0PG+{pf``~5Z( zp&f|jv932Rsxd(@%ng)9f0`mWeVDRsVaU_M{Yb+%$sACJh2yvQB-wW~iIZ{F&Zlgf zN!@Zb`9|kSJq^2H6C+wXLQ@90?!4}@wnjAbB?Klb`Xm>n7C6e48njLO9Q?ZtJ^Bl# zxg36KrN*Hy(Ks}FIYX2wj0OEEJvAKuGmbZu!f6uw2URTQEEe?JkFK-K}r6f=%kj$v~t zaW6I}3PZaMT-5sQo2w$b7iO6QXcS{)DIXTqp@dy>BXMzr;i%a>^*kkg-T{ zKvD>v4r|q=xUdl-clTM#A1%#Ktncc4 zU3f#(HRt}Ef8RER$kal$I_cXJ$G8lGvC`@)Q{&B5q^XAm$2D^@-mh`XE@lhr$@Bce zIe^_kSlWx|uCWrfF(7aJOUfCM_kbnoHVae29_pop)6`_I9W&sId6;^5AjKp}M!Bw| z(jQv7P_Y&w4kTUwlWhO*h38^>`LM_7#o&DiW*MLAe;o3ptnT@I^UK?(EF>fC_kNUY zjGfwwt8&fkKVO|1bC#3eUqeZj^Jo#Nqh?0kiuHOuypDtO)`3rzQJgHySOCriWU9Q^ zVkm6AAg+Gr$G3N!?!tu5Uj?Xi-LS^B@%APOX^b%!38M~Y8*VDq>o^k4xulH`#HrHm zFr}f3f5SYvp~RYV+Y_`9`&2uvwW(g{pFC&M#p6k7(ip@}($mxQU zPfov<++2GN%@sM^i$tal@4RoJyc>|h7Iekwe-=#&SabHSUyzdcY;BcxK#ovm;5~g3V27&1Z;dk0S^OLGesLP~!Vs((8P)oqMSEp08G2-WRv?A0t$Nm2m-2wf}ygl3jD074N3MJ*|L2|`K2<*ds{*|F;yXP1$lo}LNO5r zRS`lXJ5xeg$$!%AT%5W8K?6)&T>jM^EuqW*ST;ugV;TRC^*>Q3kN;ToFicE@rj{ly zgvJ1KOFI~bf9WP=XJ${x{vWrgtHXao{}6KihaVy3KN?aIngY!JLA%=6$Q#)L2q{JE zZ5>=)08WH*_ND+QJHmfy@9uwO`H$znP$OGQ8_)k=@c%_fxfuN;hLD~4Kk_mD$7Sg( zZs`FqRkU>ZM{gG=SHOSV8i4=ojU2$#($)4q>41MU`Da&6?d@zl|8K>ATKRW925mKE zEmbv|{~3aRhsEqn>`g80%n4Oo{?XIO$@G65{|+k}S^j5&{>$aR6GeZ>^#9g!MlMd4 z9)voK^#2+W#(zEkwe`iz=tkT=UD*eQY7plN%7Um4qXjYhjS7-Zfb&xGbEKCiK zuCX6fu?yVc@a6-J`SyRVcBLL#iH+g`a3|9r1E7-54Bvs~qb=&Vsg>Q`!`Zr+e zShgneV7HO?E}0waL5kEftl4=Nb<&RIe8>_^F@_aggWyOz32RG#?Ifu5C{VJrzu^D} zG_^mcC;!FzDGWLO3kMU{aLN8#E92Y-#akWYVW(C%#* zQ)ppmuPV!1J(lpRlXXrztGTxjm1U7~uE!=duGHOZ5JzD@(JMt6^vMi(V9al{2*oq1 z9SV!njm{fw*RmTPo3?h%aMA`Rb(5t##Vsfnk7^iLabiXaqB^Mc@X0y==VUJ6ob1`Z z-@mxujDP#0MrMEG)S9;kG%eWLnv2ZUbe4OOh^U^rIVd7$=N(4b3xrvFT40_8(WuMM(LQL&9Mz*&z6p%bTJ3{MrySVd6#?BnRdic}FOLz2|n0NoI zT(Vxyn9UrUJ-qZ%nR^F8YErcs0P*MmM1@BU=S`P~6sf^rR9}Ufz%|laq>lUXVMi_XPLHT}H zelwWK$Hy6a55ORaP3vaiw}6^(Rl0; z@8AlQwy=sk92tDL9uFW%;N_~b&z~v?+HIAs44QxC)WB`yY#u#=&(MXKD(7vE^Z_0b z$hVL&vu<>$M>`m*YCiaq7(7+Z%JdQCf7RV9@U;X3ebGGZz+)p~^HM#Fx-H#I=nm^z z-gy|f@{Qu`^MdW`C|h<&kd1mEns|>5IzUe$=DTmd1zCzi#g(8wbP`vQyHLHnmvRA~ zc~gHIJnv`Ri>KlDxngH>FU#Qv?jlyv120yC zScs;G>59f=YQ*W_^(xCP78~q)0e#c4AMMPIiM!I&ZU{Vzt)-N~dXOi275+lx?OKUM zQ;<|5-OW_9OqbZ9CL|l)lb2yiUx2X;@MnKAfhUOOO<&X4owTvj0{1eI~&>ZlYj?!zemm77&soiiE}}~gf&p%3 z=0A}?QfnTyVdOalba~fUq=FR=m?f$3${n=~e2yL&$xY_UW|q!>w|&mkyVX7dTf>Xb zM>Y4E8hw{9_tnh2UG7E9xeIB;}oAQ{V-Rg1@8zcR2oqFb+o&Lf>sKK$uY7vAB^J6 zW>0OSp#2xsFp|Arr%d8k6rMwZzV(;xCiI+!lY{(t<%+a_J-i7Ds?>jMyoa~FJ_bU^ zWe3aG?`vAS{8#lo9h%cF$H}>jRWq1EETj4EP_U&Z^W4h95$qNqaU@*)86-C#z@+W) zvHfCJMxA`sR1o&;aEe1`VMUl_LU2@Q8ku~0e;b#;B(M&yvO#>)GvRlMjrp%@jUu1|Az9`kxmYLX0~)bsv%N*RH?)6mYVhhy0jnt z1hS|x2U+tl)1UU|4-~{>>zm@(ma;1Oj5ks(i2IsZcbgey%-IJ>xq4%BOVY@lIX@_huSNla76H zj>?%IsWDaamSv|tB}!3jy2^1tGGmS8Iw*euU}*6@&9#PzgW8BNbQ|+(Ie+bOJi{<0 z2-Uak)gq=_mFsk8ib61Al-09iaso3*Rg}0B#}XC*+75YwT!$+03ibmuMx>aXk9`$y zHAJ^Ye5yOJ=cj)id|;qPMPjtWiO>fdR{p1#xXw^Y#f>#Nn=$e2pVPq97&j`+1=6?8 zP7uYD4(HfPj3?JETQN9dJK6L%%q+;SY$r8LNpQT?K1Y;Y%!ksHjE_yn#%TfjpSTWS zyR2I9GrLvp{dDK3aD58KLAnzf4oYb?AEP{v>Oe;d1rvWNu_DS0djC^mR-8YgF03bU z?QUaT(|?4|af6P?%~+^-K4(fIt5eCF4^prsToS6ix%X#jm^8dm#q@~{L8x&#(T9@M zBJ`Fxb{PCpCSPnTN@k>mAuDzm?%%2|iY|7Auv9(4#x?44B+@o3bawY z6oIRs(@~b5pfi(O?U1qUHHNixh4f20wpjv3MRI>=A;{9P&L1l)+Uulwexma&3aB)T z!AX3&C_12eml@<_vWg+a(XD#*``YeO9DX(X{v{P`%IOl7tkTl2r7>m!tz7~BP0Z!f z52^XRa?SW*HZ68?*Q~2c{>%8XU$amP0I!kkiWmb^3WV5(U!;#c)M?e$(8E#YV6B)B zL9Tyl;O`thNG4P*L$F|D!8%*Dplv;$W>lkTopsH+J@{^1fmtBTE4V8UI&ZSXtojqN zIxI9#iduHrVwz0A$0?R!W$5R2$)d*CGHr5ddiJJWIXyf6I)1@W_Rp#NO~-_)O#5zA z;vYSy*K2D{d2)3*iY`O%47@BKsJ-lVv*>>-w)W}5t%3TXNw>SHLAKzVvj-C&_st%3 z6AZ_tTLN*48w2A>UZpNlewSDP@h3$_!0yjigTZiPG|S0w^50;`7nP(lf!$ouaC;8I za+Tu>B}S>>JZR@T5$$*1*fkPp8~Ql9)cEx+u_4NejlXUMFbSAv^C&|0^fRYXHx_@# zBPX(*)%IlEfo_8~hs@$6lp%gj!Qrlo`0_(#=0gr+engvyjw+}c)|!(t)>leliH?7z zsWZEmF`=^~6_$K^o$?-kT}Y1wsn(s~k9@&fYVU!&EcAjxh%rD+bZPRf7kPf9EaIi` zvCt$@WPZ|4!Ur0eTHUvtX|2hF=a7GLN*|*3ErzZ}d01nE^$lTx)VHo-f!drvh|nLP zyn0TvmuI%dgZW{GZyQ2SB5p3m0^xijFFpL!aQ1*_tS401-TANk0qvVMKfL%BnbGxO zVQmF|`*%^w7icEaf?L5I~=8+`^gt=Ed01Zep>s3p5rHky(DGOK@)!tdlM zHuD)G_#6VO1~<7=wL>i%<48I0j6)Mzqn4={^n%;I-2;g=jQRh(RC|)o5RcRa0TP>H zpWzj8QlF)q{n%%_cvXoC8B%W++#U$sAT}_hDh_IjiXXB^1G(PqdQJ_N6dkK}6NeT) ziY4q4`|36|T`A2b!q+lSe8+#9Gb+24L_-E_JgoL2bJTyT9y^QiCTwrA?WcIrV%=Ax z7Ja7LYoTQp>qX?G7)-mx^9zi_mGD+JGO02N?;0S4ipmf6HGAw>=AzSM@BH+J?0PRu z|0F}QBiW_(i(4F`ZUWDRyApkygyz?>LY8|do?dSVD>Q==y9KjI%d>x2*{75F3<(BK z-xyCG-00lBB#0uv`8WRqcBJu)Gikg9T)4CJ8uMDixyo*(g>&1a4*<Yc{uO#2bVd;;D`#f3^&w{ufw6yI!R58G?Salz;w}aW{=7kP6$NGwdL_ulO6AjK)2F3CJ%9(l zo9J(kr>gn#x9U$(*K0Ns&8%>4aY=MjO_NmZ6#7jU*_%q!u-+ZsI;tAXiV%uQIsw}%$_2owdFj6r1F^a z)qo$<(2BC1BJ_V@^bB={#@LT09n({P;} zb04gpM0DcCz)qK&=_sb?G?N+WS_?w&N4It)1>H3s-35hi{lE#AG9<0Z9!74-M2tp} zZbP90axAVvChIf2NItW_F0*2Vjt}N}Xi>G1XetWvPuC?&*uqe)yk6(xJ;QUp*O*0G zFLaBaXf}VnMC@#S6QZZT~r=qyrbam z3LSrUapVfkXjZ-lccjlB`PSp&Rd$i6m+3i>D2;sLgTD{pjIAIMMTtD+875*+RN8UI zBevQ5B=0jW4Ce^zkS_yMD!1di|{v&TH*O2 z-GaU>+C7v%(OO$+6g0x+vM6}|ZV3~vQ#yY=_?JwEE}{hkX(W8l9!DzmO4bYWZ$8}4 zibk|Z1G%E!D*0ZHxj%Vo;uGt{Tgq5l(Y?;-g6{crj*gk}@u21_G>1+vRU zhhTs{bwhPX-Yv^S5DjkQ)HTr|hWLTKhit>j5K4V?x0g0iqUVb>SZ9sd!(*xdoJmkl zGWtOIHoIxB0t@+cBJg%Vf|mH6qD6nq3kSIQ)6Q4m->czL^+B%Z&zoBeoS$I!rTrH> zwiDmjabYgRil6oP=ztSyt2>`b#7VB0Qp`Vg2PaFO${u6=lAIhHQdrc%{sk@`K69b` zH~%Pvfq;oIkie%pfdFsfV2#BfwsAH|G6+|nmvBSp)~vudn%NL8?#IjBpPzrQ#+aKR zPJo`x#fZI(tROKKF(*Kjcy%JwFc3{eZqC;wJ>oI0_0=7e;~;-7MSV6T(paTF@i`Fr5R(y1r>B3=B(bNruj9r^*)1MPD;y0YlrEduox$Yssu^BIx4ec^ zWN|)caFnX*{7dOS!x}_friVB6xj2YHgvM^D7^n^NF3weidCBLeeC-Xf$Y1F1l*a-CjX`o3GMRr$Huz2=I~Vd` zfas_(F?sXX3w+oE5Y229Mm^c?A&+!?ofx}iRD^;nL`s9R8UQb)O^o8Dn?p){Ik4M- zYS=pdIhu6(Wi`t_T?(yRI2Ng!b&HdAb{hTnmSyYY#R)bVC=i#r%O#?UH#9*gyL+M5 zmGVu?*oU~#d@W`~J&}KS!(Ly-7L9`@E$^<$O}J<##;`jqL>#%BXj&23h*dw%87mBI z6r(}=>ff__WSG|BEu_U-IaNUOK*V(wy5Pj?Hq8{Du3+%;)#?%fE~Tn4izjjZ3TF=0AvUa@hV(PHcu%Kkd7nqnoV zg153A@Q3KW0fw+C+J+dS=S~Tq zdTPE?7lZ^_n}vUcSxQvGfi;N~jGQ?}X^qDj>r(R-`0yBVZ@j0RO(m1sP7!&-E=pWk zA6-$bhpBpKR;RUFNQVInCj)DO9Pbx-O(8cQ;q9P*uuGr%V8!;wC%@W9Z4}VJyABuN zfX)EGb}BmLVA4XYWJNrVHsIPtD{Zv6#wK}A^?z#SSjT^p{%jbF1FQR}BtDs(#=$}= z99>imJT^3|$ORiIf!7Vk?ePleE6rIX%2H$DbT5_xlh~Wm9cG^^7{q-S0*s`qJrlw6 zN|+X}b734nb zSr)6HQ(y2R+BF7?vZlD5DQuOLOWq2CIRA6VkmQ_Um zUMhbE#rdH}pyqkBye0*ZTI8_Zwj+3RVZWKEPNz#Wwj!6UnO%dFZ;jn^-DG`UAoJ0m zBze<)Hr*O7jsFhrAsw@pwA;f~$UuglbEh~M&Z2x9&f%r?>0n#ni+#rk3R=hJ22{(U z_~9Z`Ta1KCcH_3ZB1~Cie$bcox7yWb!P0+S-U{-e=4em1amlXV@#2EqTI9qM|Ne-V z*DbH`d{I<_HVbTb+9+Pd%_R_ryCD-FvqY~%-~ongB(F9&=0v&g1SLgyD9VdP#Sz48 zbG9N9%x_7fhgc6ZQ+XOm+%2G-yq`8_TN>Kvf{KF;u*UUFs>Sqpa4D)D)M~mQl2U(} z4MVWRJn`ve$hYwGs{v+Q$KjpC+Bih@lSM+DkX0%R)^IT}*D=;>7}&dMpj(}mXoB*a zSmMAs@lRfOD)}vL5X?qLDDqVdMk>R`XiU!M*iJgPcij{T&#xtRORi_TL@!E^P?Yb; ztAkLEk+?3*Whgo$)9b2X$d)=y`+9$GNxugil^Jp-PDl8RkYpDXxzcW&{W_j+d(+^r zaE+_z#vzLo>^9*n?S5C}1pgg+j4dXOkq&!fT!NBRUK@dl&ODN@m z@5YayJ|j;0l3aB;wfDnL==8}keb{IrWcT+v6yJFj;ZOc?y@p_04wqD83(0?}@YQ4Q z#kh}vP#c)->S?u7UWKFMNfAHU>OoDc`7Y;v0*%+UD7#-*A}2=?)QZ9hcIvfdD3MZl z;`mx4@M0LK6it{>!4v@&C?VcQU))r%yXzax|qZow&9-v{N?(s{C=jcTYQ>Pmn<#^zRqls&|f z<_X!t<{_eg6r9h4wLWnV2VPw_rc_3xQM&@yc`0}L^@rP#GB7M-mVkePEYShBj)9H! zFoTp`JhP9&6pYucV=eV}k~Xu#hUm)uELf#dXk#PP($ZA6 zn!U04FgT)!*5iX~E<6i!ghzqvR8R-K6(4zN1z_1@-ofCu05N|j{$0&xjV;!6_6pKX zkHRT}(;**B!PK}vJhn9NlxN|tL z__vkcsv3)8RaSqTe{%&_!?ib$T-A>cY!Y_Eth{?Hr7+Py1P#|pIFSX2^zx8Gh8$MD zMD(FK8tGq{+E^tDqiz+(oZ-lU>`Y8bw!>~p9sUKrEk_4hDo*dC`2c!e7j|f~ey?{l zkhnaX6}_7~dnHCk84@M~Q!W7GOvT%I>e3`^XnS2Lh)93#7SkH5(S$`P;45xO&)s^^ zXUGxu0y7zownIeb+lok>b zUBiF6{kRQ&zWf!A$>kFgv2(p8@YA#y@H=`5;YF@Q8ysv)|ce#jyB^X&Ipttz|Dvs^3sa~M3${NgK z-W?ZF?-Z}58hh@tPYIY-YL>T6|0)(d2=VC3d7zq?-&7#>(jdysv=SJl{hPt{ky<>M zmgnxzQI!YJrnTMl-DXn+B-vG$;XUqrWKt`ua@8s^lu(4XGka9_S9Fogs35C!u3vwX zh(0c3jP$4Xjlpo^%EHt1ylP(1jA7MUvPgq%!%?-winrzdSDe1=8CLvLnCi#wYcZj(N=)pbcGc3!{Y81Ana|VJBDmF`&}XSAp4!wEg1n@2E@KCKzJ#FRoL^ z4j2h86_tfU06WLvR9KB4!h1b~ItrLD=TmhXGilGm4oF*tdJY~~jRT0nO7a^Mn`O51 z?}Pzg&VVutd)H0|;Yuzp%SDOJ9&83$t}zh1h^!X?M?kp0;L)xj(-ct+11CI>Yq89K zL-ZlT`?)gvAco2O1=S_*X}U$SS~4i$SsB|Z2vOjt31tKlgYpIjyEx_VH!T4B1W;7d zAcIedywMA3ZY3K@QSL<(&ma70bJNFqYj<-n2lCR(3W8~Sb z`_U8U;XR{--b<+Bz}o{ z@P!S*L(pI%An6&d631h~GTMj8g(NWcquo!%0Gxp!Zv_d4zpB{5@WO=*11F@ulp|XDe|njHfgNC-%(!K;_XCupUY`&bZRc zP4HbvJ5CF!hcBFl&azzXQpe+pC_36ELi%J`Cv8rwzK`&AC9!?+tLJ=UKk#4wBRH{L z94lW$Balenw1u)UeBn~XAlhVG6cYHTB1DkxVh(j`y9d+{RSgAtyJymWQ8Dk9c;>q! zQi#pfC6X0!?|;z-6-hL~P-c>6qMBnhpDsGYr1zosz~K`RrZDV>-MbtM`>KN20rNKh zEiJSEFtu6j^SyOlWNIu+%Q^dzl*+-E805O|o9d<;HsTbXE@7JpD6-EpAcBesF(Rn1 zu#y0|DB{ zfJ6xPHpTtj+;Myr891T*6ctJ?xu2BYrT*h>a71-AY1GhI-J8TU*=DE|BPCgJrp%8# z_bM)I2*I4oig0zMs^hPfEY`|tx<%2;dcA$D^*pLa{#B~#P*<&g5cE@!l%s+3uzn+w zm?HtpR}%oN)sm5LChVP7bOm<%mXRI!_?sdFjm(X%9?{bfR#%df10{~4MGorn4u`8Dm1`)bCgIOz6}v-e5LT((&_=B5n7U{`D-Lll$G#1 z9lm;tgvg`7V^_Hvx{A=O#LL?~-w2K|+_Kk<$lrcnecH_C&imOoTOp;L<16>fz-0%8 z0|_?j+RCKwX8j^~kh=DFTie)*I92bp2Zu&M{HE`IbfQ0h*c-&zW}dLD6D;iX6F$DF z9|8AZwQEvPcl)p;R*r;1o&A26HL z2ZDJL$vBcqmcg-BU)pks*!61Pem%0yY|$v!*ftgf+;Ng91hwoAtt?sLeb+&V{V&1# z^kyR>rt-Fb{1W&0I#*RQAjOHP5QBt54E$7G)rNw`8*mj&*8Yk%%IV`zh25qj#z>~% z%3d6AsB1r(Ge-z{8gdh^f%!FtOxJZe%>q4C5Mxx|8@4&2r|(2Gl=G#+3#5?|Im?fT z)l%D_qvP_CVQT(z5z$|0bPe&Xs0pk?fB7sZk-|EEx0~<`1=Y)~jYQ0<3EXS!k`zGs zDp?pu2o@|s^$r9gYqcV8x?VEc>9rm_CyGD>!>>h&(Qgk4gUd|^(6p>#FyOg1YOE|V zfEoHh!*#PMmHo`K6}pYCJ}{3v&6)v2^Z3r#3_e|sSc{?^EzknBAexUXsyfjvAkjjG z=_w$8DFyMBFBoqNMsyPSz;v<>T@r%IFDOFKqP_zaW>LR#oR#m3vWU^-)9xw zzk1@aHQ)Z~VONTs+Yg5Fq3a-M?owQjeNps(gyQ^q9RybgXd#S9S=#YMe$wSF8dnl0 z{(Or>ixr&Il%3WZpK|!j&Ie`g0R~r>%4O6J{>)YkHKxz{M1SDELW$rj0HeLqV>lnh z%s!pQn`#NIFU!9)j}Iv(5d9KnV9z0gS7G}EufM>dk}qBP2o&UIWovPYN!uXtJ0LWF z2vw-VqG*pE?!o16HEg}Bb!Qy5!z&8~2JlD@*iWQZ zQ2F1Vm_^(T+aW|3vWZNJS3S}6LKO9ZW*!fD0Kpo0Q}`NEi_+(0K%e80pmoL_Ny52kRO*MUZ!+9w;v`JuOAkcXzeR=DFul| zejeiFss1k*mf-6Cxbc=H?lhq?CG%HS;*ZB8l9@?2*usOkrBtfS){{~c`W*KCkK45A zp+;-;pq`Xf=1fV4u5TpT}4S{^S*?vc4L|v_R7+c-x*Cl%~B?k^`2L zcV&iFky}gH&d_IV20c}ueuX5W$Wx?eMXAtf$7Y6~TPz-d>OsaeO>ta*68FZ0A@A>S z<^fF@g?hjEMQTXN7?R0_%q04*Rjp=1d^X&RZk$!%ZA6F-nbGnRzh0h^7}H90e5)L4 z*TN}d8tXu=`6y@cD4-H?r|TLPSv)1Fc3DPsZ^U>bbovEv@Mg+BLd89;?Xdfz&rzOo zYl{Bd2Fc6Ep2=A|G@}83V%PK+a&j6jTn^6H%fSuhzu!3AWFs;K-(#5m@hxgccHRh9klR3Ywm`c+#Km<+;ie=8N zn2L@yNV>N(TZJgLqe<`&`9DdL_1&MTcy$-%!LjKdpXx`K)<|4`3!s)_TpEokfWAJV zoarQc#$tc?y0#%CgDE8(;q#t|(4eST5ad&U(;$LtPz2K{1=X@cTGWEs2i@Z0V8R4y zirDFh5b;Xwloie1uaBRH^tSJhND4J)s?vmWC4+=Lq(&8dMD8_D|IniXSM)m+j~Gx! z2SxIsx+|_pR$$+MnYZ->IZd*Jm|S2`she)(X%^JpyzXJ4{rYnkh4>&sO_Pv@T~B9? z-%vO6d2S5dS7mOd_ygZpVn^c(F2%Q*izzH|G6Mdrve#F-?;i2GG%_oPZQj!{ESw=7 zkV&U6JsX!Y-%^1LJ}u6>kRXdWrEDq-8dG{MFhEyo9CYJ4DDtsx=5i)lLc}v3PlvfR6~9w+SUb@v#7Xb6*_z?8`d#BzWbmryHaAx z*|eRbzxEa zGWZM5hzj(7$FUn|pu8N%$MxE$nCvZ3trkO$vlu8p$HDC0I9uwgBYE@c*%*3Cm@=H^ zIvYCWp!+u0Qb^Z!eJd#k8Nh@A62*~U@-EDx`sa=9Wskx8bsp&&9mDf=MSmlh7>H&( z7XJF)=$oSL{u+23bAdY!BWzR z2lcmWiZ*ZLRtJoV?%qX6qrO!B`tTBx%rFG@02}wzT?K?i9q*90%cn z@3G3{T)JX}O+c6GjCp|Tm_iCHZP|h5Vr=x)8H|6@7an9LK#}<1x6BUh{U;G+?b8Pw1T1w-2Xg$PjgKZApYmLs0#@}BsT zr3u!zrL8MHQ%dKpc_K>(gdqh$9}Zx^T1Z>;z7j%dlizANprQfebJY{K&K`=qH2suj z&L{5r7w~x`TOonPINR#|wu%qMBjF!)-BI6v%aQ0Ri<>upd`oue$9kV0^j#nGaKG6N z@jvK=R!SQke-@OBmRG!?^-l~b%moDZC*yyfT?>MXPosJ2IoG1 zr#iK?Wtxp1F+m0oUveqRz>J_zL%>Peqk$@qk9wcW_?cQwW4S|@z9Meooq0ndVaTkgLbEvPVNGvXLAsPWm4rZ7y9 z2DNpbS(t7)(C!?P_$mkhQzMl=7!!1VF5)!18R%p@t6TNa*el+d6=pR<3Y6q*++IZA zDo(p3Up=YxK%e{ElQdsd<5UZLWS8A%ul44DqD@egyYo|{*4gh-)>e*gJMnV* z2aFvnU7FrMTN1W;q-~m#u{qFRHmJMO*xi&mp05*zuhvx6*Mb>0;4+?N(xe0i$wy4c zp>1;_x!t)eW@G)dXSP6vKZVP^2wFEDGV|T3m)H}2^a!J@{zW@Vlw3mhNvaFXgED#)ec44;UjT>UP^ZV>-#XjDt_$*r0n>cR){3u2T>*rVfR+W^%vz~ zVi&@;J2Li~N}O(3%z7#08Et%*`9hnt*Rtl#DD&sS&@;AatUg!O7@v;`X%@31+Y5LP zbw&j6lCi%yY2*U}=8W7Xl*v?VA2&$H#Z;)&qooBeNjlIJ*KOn2mBoyIZ7rvhZUMoB zzOtc*LsuK6q>bggryQZ^dB*~TDY=;VjN#a69J7aUs;lUkq;OsPg=N<0B;Vn>QorpY z=3e&jt;Oz8hlZQF2m2H(o}T1*gq=3l*?O%rX_ewdUqGu_b9$uCdAP|0U4Z5kMA;o@XUbUlv?K|u+|IhNMwP6qg& zhQcC8p@(QT-lz%}vu<5PbI2CXnGRUb(NRr5@a>72S8OYPnv6_;#XlRbBiKD^wJ3u2 z+KAR?VHx^668*lss8eov9eisPpQx>h3dK`FymJQgzscWDE%36%(-`O_@|`a_b>Uh* zIce<4k2kW!h4~y_8|tbg>hh?=Lsr<<-s)#v(=+y%?aSeT=TvT`NG>z@58NqF1Up5j z@S}JSevjuV(>1Bw97Hn3}%4UceNFTAn}m} ztFe-}rR?yu_nw{l23UYz!AJH=5BDgL!Te*u`a4N6dc?bb#7LT@H*oZr4tx*NCmsLy zAHX=;Vcr#_285uvf@b9xcvcaJz?DPGgOtNv1u|kF!*7!PHBPzeVr2V>;`nWZ`GGKZ zV-n2*Iw!MYZdh6;g18OE%$5-fqFOgd4OdpsqgRyxniJ1IlE$1HIFefF1{Wm-Kf^c8 z5o)D(z&c2OG1cg91N@DxadINSzs52!%8*AArlj2{hseB2);|*aRQ;Jol7Tm5m#AWq z$-_uIjC6_lsW!!~CXQ88KOz?we!<^~8@Qx^MP9RzS(}bH!~sW;OJXHzE*g*u<|I1={CUq5} zb^Pv)Pz4sU1OmwrzKEJWnX!^9?qKHqyI|d1j#`J`46$++7Z<9?QG)ScV@J0FF(GH1 z_p`@;F}YHJ`?`abTSG!-N=ndd>*24qEj6J@AlW1i|E^IWn~;lZOryF=yS=YmqPiJ4 zIh?cpI0_gkn#|wc6rc~M=d^by3foG>Ht0KxBd)`%9CSk<*U)iFqI0}y=i_L)CNf+Y zmESjbqs0bP`9$K0DR~R?vCRc}TkBWV-75-zj~ZDq_}ZPRy^v*{^m?`o_$H6)WTVe} zFGkE+{N8m>7Dg@oc$yI#Bj^_o2Ut*^l#hS$7&;)bw5q!jf`wj6dD;m=mjaPSWktKY^J#k-EtY8;J zsK%J@D=my!B?X--(fvKs47qu^SBnCFr)ad60FSY5BqqIRGC1ih!i_N<9!7;UvI2;= zCF66=XFPOebzw$w5dc-*f#l%PJ~seuYNXKrIqt)!fI46-4;*CqhQ31N;=_Yn9lD{OqdOTr(13o2?MaI#kTA^;R<<_BNag2&v?TepzsW_W?w{ zORDuzyP1)n1?5$$I|2yLWZg_)Fe&ioInCr}r`#XhLQ7UhT}^G)Y=ndJRTy&rELJ)p zP*=_djsUGVBK%t2Kp7sbvQ?LVjf}26QzWe3)xD{MU}_(N6gQyoBoqmXv``WPD*lKH zWd#uZSTpaaZz3Ma;D|eXov+=)hbYLF_Ltk9W<+1m^=O(8&ueKSqS#7xeQR%MAib2f znCz9|(O@@u@&Nx0qFO=)|-lW9okdB)P7{(5ky|*y}>nq3JN=NpduB0 z-#Ju!TQ{lf3jEmm1MlHl@|>f11edFD$s z19fw(;YpMDXKHA5sJGn9aP;{CPyYy+DC`BlS;GCig{~g$KHs0Sh^b8g6sDg z>fr#anY|THD~>>&YRCJ3`r!-2f&Et2;F@WE@p!?sVTgLqTcdEgKq+69TOf7%1kF6E z(s7_xtz+?pZK=proN2Ahx%b*#VdRjoM%#YBDggiWw<`_O^s?4+Rfa=&X*;b}z>Q$v z{jPS@niKJWgbg7WTlcNOwE7nZEH}tLq*O$Z;CX z8${mn@QNYFdXx8mbpXz$8t7H&6o-sqG=+mC1t1NknLD+#>chWNMqEuZN0s7J`{DM< z7!(@Xj+C{bGE%bsmx9TpGv*h!M$|BbS`-nm28H`m&`{(hCHnJoFwMCIo+uJ4k&^|D zZPhYHXJS(e@^oFNQL0T=MiEUNRR!p=g==N~{Z>AE+~Q_Tot;24 z#c*ElKF7WGNUFc)vucuBFT}g+=)37gfOcpuof5}?Qw0NKB;L!S{9=nB=Hw+T_Q!WS z-#N=5ftUkINV|XHGU~?VCFHEVt9WR;n`|!pLmSq#0vd5GcD=0p14|3Qg2{?sO?v{b zj#YqTfhSD)>P|8sO`nK`yOu5bZ<+aS)KuN1gfeTbr^bq)6I`eF+!9+PxZ@ZUanUx{ zra}yV`P_RJ#J*YkX{*CHG+9akBuXRmyHjFQeDjupAY+c!gjwodZEKL~#I4ACtc7Ds zsJpz`=Gr|4vdbGwzmyse!yp=*V|Sg%@1^DvLOee4BMl;E`)9&<2sMStO#z%nv|9O? z9#Tcw!Vt+7ssQp45b582gHquU0dz#^e^kwXoq(y<#T=DG3qf&l)V;M(Vr`}Zh8<^& zVwcm{%(l(tmH0gIqgGus$5&%=UKCsyEF7{_#~=4>D_}mGGXDAta=ma+C*%V(R$;Or z4JZB6$={y`#tPVkq&C%X+uF(nKRRT}%sWs|EQT1;T0X(< z*b-h(&S2p-eWEtwXm>ULKCT#|xB{AO7hMW&_(ce++F)q5cHZ5h_2?+ax0v|!d(-5^ zhJ}Tpaov9WF6BKxx$W-q1SpAQ$o-_@@D#UKnCqqzZJ^d+{FF6%d%bH*FBa*4@a*%h zyYdQgQ)r>6+c~7uHpEuIV@$>9XE_Xg7wu2KDr9pyd4@w+^E+$^;+0cGgO{d5U#O$R z8_`UCOOM5PSDfA$_QokHvbg@*J16oWfwE!vx&T9JaFosE=S}GR< zmF93x?`>Wz3!NI1e16XpT^7=RT>Ru`#QBI&+nh_NV_?<8!`bXciN7rThHlTBCUOlJJv&|ZwQkA!#GbWUgHuYe*{?%sE4X9qGpQgU8!G^{%2 zPc8=Ww(b-tn!E`PLBulmB^rQTr$x|Qw?tPF+?t8j=uo`+LrD%B5`#;!N_g`X!&zC? z+xGk{8@wULaui!DA9?3Yul0jWL-A0dOR+nd4iF*lz9&2WuOZwjlEM3%$ot#_jFEWE zRA&2n3WM%L9NVZ27Muxx|7%hnvEpyOjvBhY@xH0yqyV#CEvY(Z=4?B)yjb?o+aE(U zadAC7rBTHKZ5Jy5)!FHaWJSe#KNn2Q^O;nN#KDcciXu}-KTVjwu-u@FBu!bLzTq(l zvbjAVY))7GfR((!|H6}+_1QO!kr!Be3vlc>^*oEHL;4penfK&>`M0h^t&396yei5U zn(9a3KX-J_U+Wm+@6N-BOQ6gP`X(VEAy7j2_X!dneg?u%1`1}Nl&e?Vst7x>hAZ=&lwr}B1Qm!Bb zN7o+m#~b|&rwboA&Is(^9f+=EdS_b0II@Mmh2snMCDfSH)~(++a}5xS`o$FA2dg&< z#FkV+%lr~sN+^gr=70VoG8_Nww@g;=*DF^M$^G^IHJQ7AxEZh^eVlUT_@xCgmZrvS z$0@HspRC3Fz2Ow@_6A{!M})YVmbtv{wo6BdfLQOs?_{140RVTtpM0tHd4TJ5RJy;I zBZB0C5Isu3TT@+hNTp$HrO3H9PKDkxGe>u%Pv=RG`N%y>YOFihQadA)AR+8G?6!3O ztuvoEe|3F-pT|lPxy*|8P9hCT@(g`&Ahkr<1&6E!WSWH#0=nD*I0pp#PREbZFgReX z?Pc1ZUh1^sPNP(5jF?Vrw`?B-!=Mhh8eoMX`CUkPO&*Wb+=YSBA<^<25BGuZfy=cP zQzTqR5Z_qNnr32I)~5j?2XE0qVYSKxsk+;w`5$S2+Z0FKIdeV5vuB|IVm6I!mw8HJ z0Vh~ydcC@}IACoMbl$@yxs__OUg))uS-Hk0GoL1pq6U&&Que?v?#gMQk%7Fb(u@Ak zQdy&O7AkkU`JRXyPW54u5g7eJ>rnkB&(d>l9;TMvdp*m7tB9NoTY5~W%wojCJ5K|& ziFcBJtR20oXwcUA5Wt2u8S!33+qP}nLVgr>J#wsI~iEJz< z_RbLd>)mM9j%Hj>5-?WNqtARH_Ii^{qe&jzvVB9ML2FVaCKdRF49%5cj%nv3h>AJW zO?e-V$2-?nRqRESFLaZ8xXME8UV)YSZb^UN#n}QT(xe)K>#M#;UPrNWO?boFpQzSJ=g5k_3%bFpu?Q?xgyc4KmA=~6ik{leb!`zKnuIG>s3xqpM zcdHbe=#Dzs+e*c>_f)vBa#izlFK>Z()B^`qPkGOt_M7xyUiSWsCd(7wa!VzDl9JCP zkek>ztqQytw23ZbTs-TYP&sJD%-|h?$1_@9<%p2oCO+DX5&Z0=YqJ{XOYP2iBUw#i z!bXNuQAjue*)WRV5n}!?)W4EUMaLn&l7WobU(wYUl|GiF;7D{F()pjk*6tb_fv(jhk!Ji|gL?0H@$i zGLnA^f?Iu!-Y*Q%2t4RxPWNcK%aoMHp=t~I376Y{*fzx9h+}5Ur^?t{K{XBKBmQyC zHf(Oz?i7QDKfLN(rh={7W6$Q(nE ze!``#CdwQe8@}jZlohPg)pYpH7RfGtGdiS|`_QR6x6%%RQ^{J&>mufd$wJTYu_kZP zIDy1@&OPkIOlr%#4TF`#zYRuc@o(W_l^>U2x3|H|EPuN$9mn9UP#FpHJwquvCiHWo z=@OmR5z4#!aNB~(f&cV>JfEVL!}?xC5t#&b=rxvAkcXE?7bJGLXWBQ<#RR;m5#`mW zyG`8gye$86#b48$1St@y3*LPeY*HMKf(qUwCecM_qB(W^72D=Ew#`=(-`m9OBEdU@ zB~Pk&WlAIiIq?X$idaao%Dpj5anb9dHNc4P)8yfTNjxSB@?-M5b?PK2vZ9?uytu+Flc z9`<;w@EwrX6L{BuYh(BT#kq#p#-X@%5%U-}rDnq095;GYD;3fWW|axb4sIIbKU1hJ z*_X&?vk=CCEY;ti`g5$3g@6^{@fBeh*F5s?od$R|lS>E+cx5 z;Cw*mXkPRea{21|8vmj^f?+@gnyUjq@LInYI^!TXcxUT>Fwd@R4_iJTQ-OM@*zqH# zIc>Ig$e4rX98I(LgLTKHc$NM?wc96YIWOv#vP~r_N6KwWrVVUR&gbc-f2+146M%+~u96c6#`?a)w>`BH9i<_RPZjPEA~Z zc>}92zLD%@D+v*Z?{n#MQ8{M0LoPkH-w5%J;ztVz6E7|84(AM{k{|?z@ z57;sCsnu3Z)sz=9CM7x<^MD5IJ!b^xL&6a;8eW}xA&2u3#-|I2J`*+`+ETCtm{G|f zPE?M6J>K+fcCbyCFQQYLF6{V?$M1uOUMDZF?68U#|5_Nj0UlN;{uU>PevgN-^XRoa zrN~z&ypm`m{l_JEPR&d>17Oz}=V$*o*;CqB{Nxp$+4s(nQt>~uf+5{wp-QMaqFs^9 z$3bGcLE0tMt_A=3bHm3pO8j#5VOlityc}Jhx8g?7 zS0v(YR@#hpgMK_^C{+j=woycn&2WjmCi0#Ca$?{u{`KKkZ-H8?#8b>Q@~d^W0F+Ic ziw+uL$*!{kD!bTF9E~D43q7d~eNRIc>me+XY4rH)%n^O=wiSFpp$StzH_ecLTA-J1 z?VgC4@8eLW`Uqn`i0Ax@_d{9*ZH|`fcGbqtk0dm=#pFeWxDg;Rqgxu*#KVnEd~C4K zNFysN;g!I7MHnWk`JZGl#lKEmQcEB=kafP(e?B=d_&<>M)CB^yU$tHpgOX4ENvRByNpt%Ng?LyMTB~ zqa>)V(7u3=NL5j8>wp-Myr;hqA{5|uFHdlLSe*bH!Bu`a*8&Xs9mz}kK_XDaFViDW*yh{57c7bOKJ)HQ z2|e?O@jwa+I`J8X(YL({gOb{d{uCMeF_aTdL`Sc61bzLs5G@mWr_4{&ca&WV6asR} zX+7IapCYoMFdqXkNKZC@#Gmyv>8|cq$yLCVlU0(z_%8|3Be;16yTSiObV)R@0?rH# ze<--Z2n7?Bl+Im`zl!QKvOrLuB zjP|L{f7j!MvL53fUUdzr1pIHEZj1yfVXneBZ*!e3aS~Gw`u?$h8@tpQIHXMe&luj6 z5DIhmJA3_=v^C@)A}q%##M}U(EH0g+iV#AK_0R4Qb;YHs@HwqlIk8Pd>$R(6yZghu0G$L=}r;M~D5o|oZ*Y5G??`@|aE?p&lEf`+@;1bUW zl>HS*eCc9cCiu^+iHAhomfn9aQ)b{|7OmQF9SfmjS6Tr%VT!-uI3SVv$Kif+W$#Jl z^qAaV(0V(C^VKQM}60+9inE$@<}s1VJt-5zD_)c~(>^{mDfsYrud=h&Srx z&554(&;&*f#HymWbjC%B5LnF@H!VIxnP!Aq#+|a-iHv3+k>3!HRcH8Lo*~zUQD-RE zSq*u3liJdMBaeGy&ak{(r;@E!v|1adYG709ZX(bh$)1we2x_L z6QfWjw#kN@$&=oO677AG){y5iWO8f@p{UE|skrJZ=mk-qtS>@}`8z@+OPhoE(DIO9 zgaaLOTz~hbOBx*iaz>$XX4UzMhsoP zu=<6%z&u1c--KlS!t*KtEn_$wRQINTY>@X&B)y?CW^2T%(1{rkH07RJP28DB6b?6N z3cOK&Gozo`5xZ%HPO!@&nP&ZKx4hnAfNl#rsd2fdX;|1xrzxeSzpjdziUFOXMQ|N% z@_4F>VVmNN2)HPjguF>Ewk4sTovH;%3iCz?&fR`x>JDnjKt~qMx2UAZ4TjoGG{L@% zWHU>wL6URzxqMP#{vLY5WdHTZm;2ndn+Z#QSI;c24SPSZ)%kp!%UZIet;l*aDaF0N z_mP@DTV%8=O2QO3_1rjUrr-wtoL47OA%R7^q_4gbJQ(&s!bCdT6HdL`G*gW(#qiCI zzw9oi?SA|Fh+3?;2<|2*qnem}=}-v|i^>1CiT0!?HNW(BuUJ$;lV{s;!Iz*kG-!r@ z*>%$9!ak{mG{7-&;sEk?5-Tx=LuUWj*K2gB0#V{+9Zl7O@I6ySCJ&mDL+r7(Gt# z$YivS>KF2MqjJB$Y&vzs^-V3c6hbk}t|?yTIV1T{@H3|-M~)^yV96A>G9H7Y$jEUV z!TX~+<=AROMH=hhcK5$8cc_RjjbUwgDavov`lPzs>C&$Cm}TvX;=r%IS?NV*r zJo3$Urr#!*18*G<=Pbl#(v1U73(sWUTP2u&yh!gf6I|Ho4pqO74hZ^xJcO}o;!Xmi z#IAcBnu56ku_Zg!bwUEf4MDK+pfy}M3x%|HhzP7usjBYsW^iA!WOdbV)EW#KXE^psAMN+_A zyJh0u@~Tk&h5HfX>yyjOCp@xYsU>gv5pZ}X`e@VNgz~p(wl%9864+%)C)q@z5v}M~ zW>)n1B{6<-9zafVv1{>=>8UrgRj9Q}cK%Ur zhcySp5nScy37?t{Gk%e$@*5MQ5Usm6N$Id*{&M0f z!O3)yVBe{K8jY>DW7*Z4Obbf($G0UcGS|q~eE3D;MYafnO%P4o^f{p<=8}tk>=Luk z`ZsjMV`L;Zeeu;`?psc~${*aFhlXSEy?a@Z=)!Z;vf$ys#{Fk|LcbT6KF(d?XAvQ2 z2#r)hhSyYzDJQrd9o_48#bS{cO= zd>qVPbdikY$psbl6hBsSM@Xa_>$G-V)0vkMi+Xr~g0qQlTE06_XWa^)n0t9(L@QWZ#q*c%L08t_}QzoBL<0LVuNXamw+0q`j5z zJ$&!x(BEW05JjLkDov^@9`dItJ^79}xXoFA9Z#VJHcE5Y%n(m1;1I5vpGlRwaPCjd znI&3(m$A=GC81J!gym&*2tfPFyL(iXDbYKX`i+eV{w}s$yx4V7+YME$rywyk9O7}a zzeI*L`*ei|qJ{6#wY8wT(zJZsNnVQQ7!o4gdKEZt+7e8R(EXrMcQcqTO&~@%2@x!R z1|{1`F9&q^k@a_{DU0z?qHNe5E|bnT3^dHkQY$7-06nUNVNvUM#JHw^J zO4zoBdpR`R9s`LruP{WleL=Lwuzv%m-BjQyysZ^U&2pmJgu)c}6dWVkeAiR1>3Owa zN7VhP+EQ}(+hC-%oA0=Ip8WOwn4t^+oxhx^bLn(()_~hydk+fml)x(iSkbr4} zje+IX7M0k-)bMYl2Kp1iSDGzAQ=e&iH|pO>PK*J#JDeV>9`xo+vo2b|82|KtGx#bI zBR&wqvHVRfJAwrq$g}5~DD#$81a#lfMqJ&hVNIvW`0|-akn{be#&6T?hL;7&MA8pJ zTr*mbqT0)d2N6dk+q37S#Xiv;RvQ;)v50EX$s%kWNCMl&~tj3V!i8 ztD1}i$_9z${uoTCQ%8qYpY4o)wOmxd&axN!+6~wGW;HQb77mt6{K?@@BFhE<+I=?> zqPfsk1&+>*Oc4*c(LyfZFoyGU^4Q+EC`1QLG)hIY4~eBrNaSQJ-R&F)JT*+4t{ILK zEXuc0&lOwtd=ZuQ$nxBta+cz*#wp>-pnhk@qz`yHS6b6s*Bep5_iguokLE0EPyd;%!g#Bb?uUhc@C!jZA$lUTGclYBFW;w=P-B7=8CZEM)rbVQL>&iDcE#e zNKJ}lA3+gG*RM~1kt~B}?8=4_hdt)sJ=@WloD0~L1K$Ca%)SKq7nR<{frTd5}fU~b5o89fNBD2mvwr)*#Vv?9zynC%^2W{{6P!sR-@v$a)5 zF%TCLtzdI=V|T^;y5ZU(bKHvvag6(;rEJ23ibPpSiB{xz=rK{rwtF-bLIR2TWef04T|k@Nj8kcakx@w%A0hae{F@yOnm zS3NE;F+@UT8s{-&VqK*(B)puY+3+~AX$sEVq(V5)6Lh+PUdhLORL@!0&RI6^MxKekcJJ0 z5#w2z=WrAGL{Cn(GYq=f^$Ct9km$=aajz`UN{gpH-#ugFiumD>MUQmxHAO(Za;w7O zVuZtg0Q^;003=Iywv#GD-Z?aQt90WrU7STorC67Hx;5*s(LGjloo7b|^JuCP$XI^|u4C1^ zJKVQ`Dz}cA#S}=i&bk_d&HWB8t*>NuZCKNP*@){RKB>!Zen|tSJJ^f;|=`} zkfqb>R+BoRKb<%n8MTUp8_}v+V&w3C^4@H?a9bWI5{o?rNSrD3wJg3buxl_J#?+9B zd{KIl0JXXzmYct`n!4@GGilGf#sg7* zLUUtAd|q)zPSU8cOHFBBb{Y*S{3*4Kxz!Q`^bL*np6T|s%aR4~6jv=rhoNn&V-|=nlwV1TLg6(6aG^QhB zl^hu4_U&pBu({tq#sK%Ao;TRS?D`vj)6z!`o6-7`_J97r&;PWe>jh8pW#fSTB^#*@ z2&pm^$?}a&A4tKHbs0>$`E4?=0S>`Yvx4(j$BS3dnDPSH-gef%7JQA7vUz@0<^x6Q zI>Nil#$QBMt8vGFzNbf$6w_9I!=oYycvS~hq*xyjkm>ZM5N|T|@DK>(M@%GtK#uQC z@yM=Wa?ya{XF3rDkwsN~*0;Qk7>az`FT~I74qdTI2cy}1%4~?hbtK zvn-_Iu){Qo>TVtk_n_XJ>e?`~I<9Y2=mUk(N>&@`-syy2f63|@6Qgd({PZ;c1at1~ zg=LP9qVUf4x_TV-E%m)QU_dp0&hA)cEh?81QF9{@JFM@%#5wpRQs4|-o%Ko#ZFVP0 zHPGncCFCNc?k-*OI2>25wg!m6Q)We@D9 z7bSj)e@w!kKuQKnN>GfTnt3bD{!6)ts-2hwtoq_5M|IaR&}lZWR)C&=w=x_l9ot7^{;`F?sk~62|B##-;y?urd7%JH+#^^p zpo{b_(D+$DIe{N?Q+4vs>~Kh}siCA4e>1})1JbGZ@GQDkV=NuV_ed&paM9GUuoliO zl309FF>Q*Fl++3<+bURpAXZs|%6VciZ!1Plnb|-Z85fWcS36*U{%WpNp@gMNkm9<-`Q|~kEb)2=U9`By3I{a6QBc#dEL9ugy3(d$08>H*ip~Zu|X-P4_ zqgk^wLc7CJVp568%=|ktOuETG#9sG?x0^C@gU_*2wh=cLI z@a%inAR1b)_yfWE;J6b4A{ptN*OS{|r~98JVTFBMMhGB%NzF2X#IE$i|6{DTl6>U} zM?bX+5y~phYqOA`xfn`~k=BerChOY;;numEQ4o&T@M7*I5|u_>;KHZ+j zr#b+HjtxVTYpYmX-vlqME#cCU9t7_^lE=ud;rW^9+Toa8Alk#}fP|DKb?9;pT;AY9 z(l!IMv$7=Xqv~zPo}9ges|f$oNyv7#Y{$A@h*+;W;r3vECEFBc532Jl2-|?<_xfAO>gz1e3Fv+9;?JvY|X0i2!EfnIZ~G zjWD_Qux=L)c~YWWT?RKQMcP>7hfp0hWF-hmO{GMQZj;GIacUr5bnWI{nJYG6E2u^s zep3h?5Y8okr9Szj9lA4yw7t=tzJKpryyWzoJdm-QE@;8_fy3|DK^Hpk=v3~r*7N@G z@?)veKYJzyw(rg&N_r&hFG!~xW=@;j`$EiY{>g=jKU?DGsj`Lo$Agy+Z;w3@%a9}V zKGB(-48?Sdr{4Aa5aIEaV$4&W>uUK^xfv4Zl!M`aBl5r`7+BH1vKgZQmkK+C$C*6Q z1;a(cY`O#w1Rt1CeddqO* z&JV}nm=R$h{SFATJ})CB>9*R2kN;<~ON~F`reEzb;@!p$Qu1t6jce(n%Gg#faNZ<%FvI;}*dhlzjZEph2fzC7HlA~Fkk_UTA)IJ5#H`PL3Pr;% z&pDK~4KOLXF9k5COQDm;;8oorNFRDbX8=(PFr`TTe^>MwC}%T8`IdLauV06<66&%M zj0_t~Le@Ji^l*!C`+8pc{wYQ%XoX3(B%%a;6XPkT3U2a={f_L>*9F0euq7 z6^5~2mpvuFQ>Xh;;rNK4ai4Jru%un>O~HfQIE=;jBAaxOHuo0iPM#J5-y_pCF>nb? z^jdGWvi6;fVewuuJ{Xm@uZ~|P?M(?4My_Rtf00^HW!0Y9fycEOkH`2PK`l#v)4z)m zC_9_U9_@D7?7rcdYOP14u}(q|KywC1MFxEO-P2Z`95D~)Royb7dt1+clPul|o}3R@ zb;}B5Xl=t#FKFU2p&qH>m8v|QrHUa1P)pYi%2d4u9XDt=-~UZq6++~=wbqbNCe;(r ze=y=ypg=zuUp`ZClp7-Zl0v01&O)8OYWl{j)TwBenFbdIQ11rMw=Sm)7yKT?a5JqI z?Uwp!r%#!;{MlHU&gQHh!+j%tH0uEl>>Cc4kHtB;& zwmKx^=lL8B1kBL{MfEkUX{%lz7WCeke~3l=jx^wNRba?s?AY+_e^d6_CfUm1;hg>u zAW}Jmi{j-UVcO)y`Snk&o(!Yj%{ zSF}tuGG1Up=SG00rSuCL?yn^Tkt*+nqe>S zhyWe?OM1WWXcX~Fu4#1aTyDZYv92aiSGC?*MOg>=+~UH>Q<@Xr(ml@m6=DXy0iyPo z*uwshgHb<=q{y4lFk7G*0hpzol`kG&Ooh`aY4wi-`^uZJm${(M+5YsVZ&%i+HZ3go9KcGGnVM+o&`7-%#s` z(O$=npgFpKz(+eI&b3sBr>2Yp`e4=Jes!Q^M@v&@uGT!;5D<;rsjO-S8PW+n`^XcY zWu1vx*Glyg(GgGcByeWIf8SAf53q>4yG^e&E4Gd77@=e2T`XUp%?$&AX@M1Q^a9zT z%!GZ+q(8OhI z4DE^Vy)1N?dwG+Co~_#h<&}y+!ML{I1^L5t>KoKPVZ^G7Th;`%Ld5zheyOrWq~f5V zkZNdnF|c4n0UHa%Uq8!2wuQFDXnF08zGK(!(s!TsGb#EeamZB_~lhG%kk)0>_qiu$TEG-@)91vV` z3cLIq-Y=Kae<_kRa=30KXN_sEnmY`|He)stA~B-b0#M=;9^SaykAm<$UB+8t4vo3sk6p|`ePXtV^jCN8g7Y~PA3$M zug&cf+^tfmT1h*kdXVJKj!^ZYOOwX~w6<>6bfbFxhqGZwYCVK^nk^CGSV`(S_@dfwb(dGQW4lz9CJ9e zKVYSQ5{B*CXD}6;xG#XzmuEGYHoZq>GH|V{v}5H*fGbhW&m(o}L8*2cv>7Th-S|#2 z<_I1|f6zEA`aY-`Z_cDr9^j=Qg-JXlchq)tKJhr1dlVY~U*xmrTO2i$0{dNsVNfs@ zCC)vkL%?t-QKf>TblpeOV_hS6ke{21W5?9;cMqEtJ^@tZJ%z2jIkn>vNh5mzKZe<9 z7k;r%CEQLHN{#!kD57Ac`h!iK1)->gpf9LWfAEfK`XPYc9%#!(wjI8xiKbVv$A1%l z_4JkA3w+5{3&%%=n94qziC^BlH>-0FVn3J*6oN$g3}rL7m>(W@=20sN+_`zJWc(eM z)k%?_1D~^YZ#vdv-`Xb_wYkE8Tf2}~_9wvT2y%CsYpBfzPShKy8^C`Ts;Z~_h-2dg zf80GxJ9P-7wy>M#f=FI*k*4VzVwUEMO`s%GR8VN?bWXZ&&Vhye2c~D$s2*LBNkUa$ z(UyD<(C!H?9rTx9-y?QtX+OqtG6k@`qlyl}<7B8^uB;Z)d+W}|$?t!S*4qKvxX+Is z84o(HgMJtaiRfj{<8j&n-~atCf8; z{)ASrpNa@=r`Y3RWVHO3tnB+`h*k<0Q+vIx>L=v(J*rRKuI_}y_WC_Lf2Cz=>Xj;_ z5>OAkZ}A8(v;ghNmuhw zfBqf1q#6@*e6|% zvAWBl%oD@Bts`;v+(DB+wyUYRL2xO&y!As3WPG=cE#NtP3FfIe@oEEM|MmAPq>MCC zi-+C{murg7__-Kw1{ycBW zj|wF=s)y+)C1MXmd)sU{>;NS`M4FNnIa~?trvdW=#BVyS>krVwRj+8GT|_$@AJqqM zKYUuwOiR1sf0)`b3@Jp8$!dp^B8?JFqVLN!V;01(0Qknax7aqueylIOsnUAqT2pP$ zSy`x;ADV%kb@zR!4_AxG{*jXtD8=O+rV4@}C`hhMV(yhk{k<^9f_2djPoK8EkYTf| zHz&8QFHI>g6{l-t94_b=M?*}Xf5bI(wOFZj9|GGBggbxLIggK67#jWFfCWe|11v(DU5IK`S$uQM^S_=Y#MSL1)&L zgiVxdxC%OV^vDW&yws6(72CS3|J%p2>w#>!%D52$zwNQQF+^inb!)olhdn|gs$YsG zI(rEn))jeGB7Ipc_d@r?wC4-w%2|ArEC`H~$kK42S9nyzALPz_(? zf25GF)5(wp3$M+Ld}wUI-8K5QcEnt>9uq4 ze+cpnAUMcJPIjHR0;?jF?grF8QVr$W`lY|M&lx1yog@%{8n`YNl3Q_ZZ<@=!;bmO_@_ zq3AwVXH3hrXa*;d`9id_8cVcu{vQP_^O_1}Ze(+Ga%Ev{3T19&Z(?c+Ha3^Atpg$f zIG59{10*jpFfcJQFflYUFf}zRFfk`EFefPrFHLV`L}7GgASgsSGB7eQFflVQF*GwU zH8qzet^-&vI3OrgWmq6gX?A5GGB7bWFGOWxX<=?DAZu`8bZB#BVIX#8a&u{KZXh-; zGA=Wht*!$>0y8w1QMm&sf9+XqQyV!F{_bC)k9TzyYxFKvrBao^!m*oVIbJr96dxQj zfcK0|Y?BT9>-TB3Y|q$`gg|mvSGTok_q3!|_tP)ZFjiDT3#BSygz^^ugfW#+PFS6U zHo{{_YY{3uB@u%YI*JsmFqo{I?iei8P6-o*GF}T4gtA^?J(TGnf2bQrWA zzj&}g7*$1Kqc9FT+ayd1vEwRXt@pxd45dmq3l{4gL>BwHC|po5tb%Q@1zUQPynqVt zq1-Cr6HK*M1Z`a>;U~dH{90@uMQ~9Gcol+nB8U)u5?;g#I&~$Ya&RDuXe!LoBElHq zorq4G&eNwId2n-8e+#+WJFh!(V?3JGquEqAz_{0ud-ZgDJ?Ym|pqT})>eE5*#rTtW zS3%&C>*|2Ltm?*e(t(x%6KXfBH1r-kpLckyK$7O69%*%WnXp;quZ?xkdRsms8HCby$p}%()#FRDpdAT(n)qMe84f zOACyJr)>Zhf4HmzK;{2+0Pye57l1I;8W8cv195BgKM#Zzx)j>ZC6Hi!(>AW+QqbHlX=|PnBFpbW2 zZHqdUx@ImhRTsCmsJgh}BujFuyExyq>f%0=l!!h{e_evqR+jeg0etios0VdOemkEM zwWH-ubyeY`3SGJ%DiNRxH!ED~cw426BSC&(>Vw9@CJxNAoNaE7l3E)hSpv>gxStx| z7%NDSELMxPNqO*j#bPFp;}!>Ftuf@S4zO-H#`rLwDI$ieXO0}Mn$Sh7nBsc4pm`1& zxx!A&e>dgK2d|)&=NRY?h4P%%s3r@W+8#n#4^!TyNv+q|t4J~?J{iiF3fW=QaRICIrm0ya^VM zvSN#5Q!QSn)K#rH1&%CtNRm(_9Hg?gF`wtme*@+zbu-@_C5M<}n)jw+SDKvm52dV! zX$+Rqu0fs2mB)R@ndO5fysxF@9?3x!5Vbc?zww+5Cd zn~TsBq#;Xm$t%JmgxpgD1qD{a<3xdQF65A)rP`3=rU@pV5>=JM?sJdId`j6daz3~! zH}9B7ZH}9=g=Oj;O=s(y{;-_wZjQ2Ie;XQnq#84Nbq=p8a=(;BuE{*7IiKfHP0^ns z97Ro~9G#RKbg-1W+7l8ckYh|OvYB4>8>2XN^=o69jD+R7H4yt?SG=%98w7bfpO^YAZ)SoWuXe=bsO zHvMOwts4lg;K@}bojFF0g59SC-g3984Z%5((Yjq@yx_so zNH!E~a5`#Ux73x#jmvfHb0^L`#!edVar7d!Sx@_u!PRU$;TNmdy-SSj9~~WRZvA6_ z>&21MRfVBp?|dpO&v}tw>7Hn0+Y>`CUOpj{H7;TD`Ls{3bUtCtM(^sMfA!$}qCC=0 zH1JR^$W6H=x8;s}DPPea z*yN$?$-X?5wag3T+2CU>&+rB+&*g<2$f3NHBRLw3YB`o;&?|XWPX^;tIgwL2tv}Wy zIURhGGda7M)U}-bF_zczf1~_E-u#{Y+#0|*rRCI7xS3+5kWcAYBma`34f2*(Y(^O4ApO=c+ zk-y}Mc`bjHyQOY^LpmHIA>PaP*TZ2w0~r1Ba6AINyzDhgN}l2WK`E`_GJh^^t}akM z1Nr+Rk=lhuf7uzcUujr4fmY-~sAXT)U}k?36loM~@#ikNT^>Q)yU z1D`e~H|toW`(San_j>1eJ7b}%VDG}BA}r{0kw&9(`g>yWDkCvZy+)1=GXN!fX7GL0 zbAPWE{q}J0_<*wD;NUZ7TczQ-N0Ay!7xC2aT&b4l^tkX`e{21aT78+T^j~r>SL&O^ z33rBUIG@x#R7=T<49OgntKs#ubg+-@cI|Iz*FTN=w>5#>Q|Gmk_d*xRvC{+GNe-mW5=h2-2Z&85m=T@VeLztT#-dyA{uG+cfEdjk~^)G_+LjkeTa!$Sq zJ7s+7r6=oYhzz)XKg*9KM7q4_P3!zu>{~8ct-PgAtNAbKTZ74TMj3-!UPr#{l?SDv z?aknHb}^-|w0Y{>MEbmXYgv5Gp7s07iaqx0?J0F`qr%dj_z3o_ zpYSX8#8rEAXyK!m_V`DzXZ=WP+vBTMdrZ75Ug;6+SwB`*>{-uecSpQj^%(iH*6dg8 zSLPRu1MKU=;GC?>uH!(y$AUrTOHAOKsHa9gvH!wpsG(|>2L^MW4GC4vrK{z)z zF+@IH3NH#wWo~D5Xdp5%IhVnk0V#ha%dJwvQ4|F5-FyEah=B5;pdcy=kw)ejG&^5{+cEF(W~W6#SZjz`)&O`OTi)IRLOGqBtCoqHqEPvewnbnK%*0 z;*@?;x3xhm`XKK|c1FUJcT+nrL`|HNg~Pi`^;oqzkl2N*Eqqo&<~wC_3OELB@8B6{F|q2Kx=$ z=?jNym(Qnh@eX~%@?KWERv1B&0&CM<4r;dts;UlzSE9>5hhtAf(ape@3P7<6!dL{J z2=0Jy6r9ewzR`{08$MomIbNC3SO)fo_vAj}C~`^zFVmuTQZ+`KLY<`5!Pqxl6{bbB zxQscBn3#%)VbcJffBKBY_AKs5!VdrWSHxf9zhYgNtmA11r5H!JM2_7tt>wOA!)WHz zLN9n`Z7Dx+1&>4(;gwvvC$}KKYqZNc{UvcTHCS>#{(2**T~#j&i&dcCe%;VwqZodx z9ll~J>nDN!;x$x$?HJM*KTPt}x6o=>NW5Mu`ZdXJ8LzQ`7wl)RY6=$^bo8h2rS}DR zHKF(lsmYEB=DU5CoPJx^3TR*qBOy=;iVXy{#r1weZngUy7xm?OF3T9&ff-38nr=eJ zXj@QD#IPL}%&12v_zorW>w;I#*~O265xf#gV=p~{4p)Bxd=HB^R%#aTURe(q0vSUe(dOt$>lQ5Up5>yXokp;)GCji7O7JYI{k zM^vkcj;v)kgYupR2(mCZV>cd&KO3H?Q&k@P>Q0mlR2F{6$R6D!^M;D}iNUY)9jaSy zaqwPC!Xk+IZIX`Q+G1Z^H7B&06~sG}4P=sBN8t{RPpw zpfg)=UE^WYWyAPn6NWSft=ub^su}}Z12gcTg+vwU=?LK^Tdh)~@rl;QcN69tDnej< zw7v$lai{VyIrzJb?g;0F)`9MhG@Cn9`kxc$^LP)&9TQb13(9MjHJ*iF1wet+HL*C$|MLC_4VyFybF z?>o5y_q!OJucBKMb<8ydF=|Cu&DK^;(<%kYCL49JJLchNU8E-g>QenV<(-E=*5$+U ztqifnC9~2U72*||cMad@gjd~}Xm&sq^<%y8_>_}ad6B0(cb=fN^F_KoQ{8NhB#DhP z)K6JenF~9_@w-0XjmbVBaj(0RV@arXV7)I9!*J8U1oOfbJ)zQwWPq+9 znZl{tA$!Ri&ec_1K>M<(^IAO+fCszjb%1}!$k>b0O}U;x&r)6{kddsD=ro8d$U@J< zOZiEWkrTbdQbQXB{|umD-E3;!W+U?hwACqjr44HSA|FkLL$Qz$}?0$%FRu<7z)w9#s8+ z*%#-NDSd|c`Y;23L3}Eiapm@>(JZ;)M{SMUMJrK7L_H}GQl~=8l5iST|4H?&IIhh22TtB zlD#WsKlAs01nTEt)L^45t5@d%nhNcGAIeO zuM!JfQq%9%9ica5Y@&?u*uWjYLC>warGTVJK@=scKB&c+L?gL1z6@DDYUy^<-$&(D zt!zEAUd^-K?!e+>Iq5WewuLMNH2pv&Ic?Qa2%5v02hNsz!)VFVSdlPi9?Djg*`JOo zz1Gw=3ec9x4%z3u@30oxK<b%?yox(QEpQM;PA z4j;rG!vMUwy_^to_yfxYcFcMB`L7l$%!;e`rlLR65%+uWz7S7YUNOLnr?Up;3@-1) zm0?M1lz$^qX)UdwH!?V&VwM~-4NiM9Ud|=tK3YV5ciR2K!?V?xqHsz4Aq55IalthW z7F7HLz8sf+xHJDKcW?QW?4`+a4zhuTzO9{&flfk;0~9|xH#;9Pi==^xk+B^)HxGLP z#R3#X0=*;DOIU6mR*nQQM<^~BNS_2(M<^EHV8PNn_DZMiWJ$1vKSj73DnAywTS{N8 zIQSFyC{;)d<05YDw-oU_QBGguMSSkBSS5KaB4SA@s(m5SaNnAtES1dO$x8yO`M)?^{G5MbHyo&J_o@X#R2UH+xJ!=p!@ujC-|Y!p1^)cvC|FetFVaHgV^ zxo?*N)LEs!6YaV?<@AID(v^-5md%sah9b|id&ixkX@hbVP@AVj;rr_59;M*ZN)*$L z8{$fC!k`}px22YeEY$L7uGb<9^I#QFs$R-%Z$@9evFpR~O(_Xam@5{a&@9v2p6BgPNRIN0;s3mjz^4^_^QLA-i zn)jw1eNLg|y8W#(&{zY|UTpy_x`lwF9oTegL=_TzGz+?67GfTU-7~FMqX26^32I^C zY&va3PsCFm>lDYe0iLD%m~M#@nf;Tso~LgoQ9Mg-whnVmoWoBu`9^t1d)H|zOZN71 z9`}p!7k?J;@u`Ueq0+Zb3GcI3cs&# zU1`DqIkJ}9MwlV$%v9{U9yM>_-ny*&E8n3MV2ITn9Zd}xOF4d-`o>=@;h38)fURYw znL*g-HxH3;Uw(hUf^O)`jH8YDtCvG5)8;yj+NTX1O$qLH;6m#uprpGzf9dp+MtG&o zt6PfYje{G61|d4}Lo`g%1(PEvPilXDjZjQdNy2z>P z4RGT$f0GC}8?7AfwaZZuFH}GNnv8+8W&nIu1J|1-S6(%5(JddeIwlf~QG`>Rf-ruL zXzr;W0esqZ9f0dBa5!X| ze`;|df9aTO#3uxrqDw=^Wm*@NS4y&TNp8tYchb2Zdb(}zTyqp=zYJjFaA&z)c@Un* z7DG(oK6*j3*vO2raFj;NxT91s9uuJDy0v~@t(74SR7Vl)Tc5-XtM=i{J+_ zAjPBZNqo-h@DS!JO?N`i)TOh^8cZ8gkNsMA7>~!i39e23N_&=<$?fdpX~2}Ajs7Se zuiuq+ZU2Kzx_{{s8CqBC!OZc+UB|>-=>ozmnx>}o;5|~;l1Il?jsGj*$CD^lx>B&P z)WpN@SEUE@O$EklFytjXZkZ;BK_r8y0J>&+N$Ju3ouk%u$g3E#nKvgLm|G2Yb4|AQ zwjwEL>GNdW7M}0#VTba3Xs$Ax*yE%j8jCO&bhaA%RO;ICGPoIHDa0(DtHnEXk_O=D zFlb`0W`Ajj7rZNOer4bw3CF3$FJ(jnm3vs4*o4q9qsPOP#v|RK% zcoNo``?t3UH=oR85N}v_)a|q+b01y4Wa^GkuJM8)s*vA*nh}M8DiaCaJS*BgO4%4f ztuYUane4tOE){Hg(og83Z}SFDmNVS1cJebWZEub;{TDQE7N&&jcD^k3_&{wouk(ABm z=in%x-@VR2!u9I<$>GS@ltr5D@(2I?==h?hv7xI(-KMgo)8*wyzt$rQmcGZ>8a>yP za7`XGP=C?I-oeOlMRWOH{fWF??bEi^^rdWN42;OkxqYFlJ1P^2-WA=P;ma=nJc&J^ zL5q)jC+ctztWa7+){3$qQ1cKT@BdS&mTmm28B5dbw}+(Zu#*R4i#-VMCXJWWyTp!; zyP`=|UHD z9t_pk9Zt_-Q!n79jhA13C4&%Ho1RA9j7LXS_&%rd{Rek*D7vbiTYqyDzZ zn0l$~tI71pqZ@cjZ(wD*97F6(FHCdj=pbD;Rt(X8PrjP-Anop8fiB{~5P(s-#~Kna8=p6{1^rbzXu=I9oZb>3ewguxOEWJjFR#2@&YHfL$`%#ooD zH&kC{DTj4T+`$Wb#}=1{hh3Laj8KUEgj`x&gG0rK7g}-(nzM3qDl084?gU%3nMhoJ z+RDlGh`p8Rsq}+8P(Zf?YI0Y6%G?)9i0qLxL?@&bve8p%dvl{&EYGN;k-G*S|b+5Dm|9!y%*sQ4})ckVdx^*zi$rx zxz*pw+)~C}0=VO}9F=bj%Nw4YnW^8}<)&`taJtR8HR9*rLym}8+Fcl1tS{cH&ugAK zc(3y^AH8<|zPKyMwO(_GYvAy3y;D5`@@(JuX=ml&0ODjncS=geVpG13RAL_`XTn=rK>1-IYjXtho^6S@Hnx4wM#}o$r~_A?l83#(J3CYuY4o z@Tw@&>G03b@R%KvU<~($uOJ?6tHh^^JxFE!`1CozR)3?}8wgSXXU?0NeLj z_|H8m4)?OnyJ@lMO0ZBATim%|YboNfP%=xgsbc~NIwGiQEHl&|hzwh&bHh}X-v&Bak ztGV0c0mH6|51`CagEXpVN}@L6pp99uwY>&ty9iN=(X*v5LJxKrykh+g@?c$(QKa{# zi{=K-KEc@L90-hbE97sLidO9xzlftytsmcgSIQAk^npX+LY2VQ^IBXHZ{Z>FJjj5Yg~MUwgJl zdv`)()Ry{m@UcPKD6i~4aKD1VLJ?VSLH6u~R%CYPx*#$FK<->SGK`?y1@Kri8^SR7 zWizC0)}5=12=Ija;rA##f9&6}?W@L42DW$f1*44-Q zKZAl~AZki(p~CeXJuC`RhiG{smZ=;R>!2++`E2GqlT`laCM31zrt#1-MBsTYy1#~n zTgyX9HkVVAgYGR$C9JI01*?5#8IQ22MCE0-rH`5$7A~f~(TK2vr*$Q%- z%2Zl#xN{IP5B^vTamo6)YKGf81ij0N*O0NFlnvh^nv5}EmU_j00QG6TdsmTXp`3bA zRJSS(!Uwkk4)(q+$x7COAXydlO7jwTuB6pMP@Q}pJ4b#?@_XyAAX$@3cP_70WT-&M z1T-ZtJ%71#nXH;V-;Pn05Io<0pezSP-I)f9>q1dNSPtxj7C$U9!3=_f^m$2%g@RFE znkNRTqbhBE?EaXNk(^iRv49Vnj}9Pp0gk&8v{D}*%Q~?V7?5cZIBwlykT9*`66-_o zSO(AUY-K|N8AR4Eih7?PX05EOWZdg(v-75MyrV1umET|1T7JDfbc}g76B>kN4HvkP z6+n9LWBJ%_?jfAEg9S!uOGw!`0`r)xzJUr{dKLh~Gy8l3HrNa%lh&Op40x9IgT1{y z`&DtGEJO|BTCEUuP=Trroxl3%`;D>^ZZ;`l%P+~ z(YqS8!hd>7ZD9@fIkKguf*UgS;BNdptP%zTTw$sl2S^cb!9n;`NF(5kTMGq=ADUTk zT8j15KX1A=%y#AWcu^n{zo|1$>Lpo2hgdSCXf(HyC(r2>dYK3$QQ}op;@8jS*#x0v zmELrP$X=}?LlmG@IGB9ig#&R8O#xorT|6*k{c!=0(V##E2(<=dRb{%Pj2HOIo`Cbr zluW(&i%uNR>Ak6TAt?+nNSA=LepHw>R^xj8mCo~hZyrNDbBXlntDIBv5>RK{k2|&Z zuOTDqM%^>E#N;LfX4gI;I&XdLCUp^P(!mY{bO@jmEgojIn@3H}p?=I{>AT` z^PQ)l;5ulC^itG~tl{Enp&${Y3wr}OzcyZnXJ}cNjYHXS>f_*8MOL(NANb^M;6TRP(bpi-agSxHOwm^sptp-UgBd`#YO@6|!65gz&(@H5B*X8zikw-B#ZUqXGA1;N8c?`}EG^p;Q~WQ* zApX||4-bESfwm5L-sjb_I7u7K;MoFT@r6AP5=Z+6A<7WNK?j*sdi`@SgNUkXqeEB= zt{{YiFAvh|koi1Yu=pT%klyk?{_6emuc@A!Koq`J6ttuCxS%~S=s(4N)k7P3ZK$?e z9MCxqs82DEJ*O1(!2|C=4rcO8AyM@2;@JZIr~GeO3nX!Yl;=)BDTs9`&FSi)a?1rmP?wOD zfbZgjz#YyrF@EaP)%oQ!!Kw;}cfeC-3$%!=a@-7t*eoR55y!#lO>R)0ECpexKFm%) zIEb2_7AyBAVSPD|a{*%*Du{iQUw1+W9v*iM@2YE&M;@N|b&$D`! zU*janzK1-s(2nV|gBXcCFV3;_*C(}BXpv7IEwCW$kbkHeqVWGl+kaUF(%g2yC18^a ze38@!Aau+dbaz$@^{se~7(wJE`X9LUut5+=M1^`b(!WggkHOF5e;)497zwcWnSuzrKW+kcEH%=QAj9Ve0JR;XTwd=x$wYfke(* z@)!~b|4O78T7(fm*;ia~`eD!zvE^RUXH2L*{y$}^#V%~;&L#|-3vp2N%dQAY;|!~H?6 zx&JR!suJJ=(DT~Q%w*z-ERpGy?ucARAXsQ&hu(HJPp2o<+)4~PUvuY6bF*lgEqR%TDU%-Mo zH}YRSuWpgv-=7R2%K+lB|DJOES!qV%5MB4T6J%oodKAOyYY9 ziJ_~sDTrInPst=aV~1|vh7BI``7@@)%I8lN7fnI%C$ONf@DxGVcmh)W{|8$CK=?0E zzcdFS#6GwFWd?%2|9dk4e`DkS6Epmc>Hh!<5w=_ihKQe^O5|8JrB^6Li;?jU ziGXMFw$=J4ln{S{gzi7?_MfBeA9wpdIHYHV!$#kBl7jHF&zacSof~hNLHK5KzwEl1 z#c_mqiuk3))pJmzbUlw~&4n3KnnM0bS{wm$Sc!^8~Fp*qjN?ZrtC z8ILT;s_4(+&RpL(bN(l%v~LSOL6H1;Q}L(S6EXTVB=$a^Lf({lJOF!-VbKYm6HqiT z92}f~zaa<9Sgt|dkZ(cWkVA33YB{gNmL#K7W4u+<4z5Ay)+NrWSdUwO{dkqO5?K)& zhqsdz2!-04v|_cH648Hfd8O@KMP@N-OqM%>K6aIIFmTZP2@@<^C@VhKLyLF3#yDV5 zRh%uX*X~rYA|SVho>s8ykYTPL-*wTxe-L@!3_R>yrW;{y{TQF+lgtSN<;cc7aMOv; zXJJMV9eYLxqRJ7wnrXizoho}L5W2`ubEKW6(cPH0NJSa(l$BeOE0>#Y*(cK#?A@_x zF?QEbZdM-T9oK}YW-r6sL$l|1DEYI!rfwtXJ$fEZd)0*g$f#(EZ;Y8rp@8}M?~$6& za-cf!Q?Fg05vG@X)dyClHV+uT5A-?jkU#2|^NA&92Nv(p>9N-CX>{helbBEvw;$Z9 zuCy*KF6WtazM_Ep{fS`5n}aE5VP$g+mB9w_w#rCoBEG8zRa{7~x9b;EMxtk@qxcLksX=<4P0eI!BYKXf>dS44V$I4|h8)S%B5n7? z-%bhXV|}?9Lip$>$;**kLUtVmCk1k^Ka^$2U)W|Vn-enHdu0WC^M6{qCD>|+;UNMB zJB-m^^W-gLWVW+vQ-;;H=j^?~(%#LZC_t_6Zih(|`u_4oBdJaQT5ydcUHe8MX?U2Z z9$rwfz+-|Pj5$>PfF0@dd#9QkW31jRZ*im>fQI;k;fV;Vq}y=r<&ID8LctM>a|hB` zG<%*M`N7UyG@3zRkEC2dBABFlvIq@u?{_L#5|z^!4EjRA48qusUPs~23f7}3-78Ml z7}%cnux6{oq8eA`SPrAw7D_gn*0#l2D$dg~ATPw=w1XGL5(nJg`FU$x(#Fkfnk*S;13rc_OZ za>VS@kd4Bp>J@jr>7oYe%9_?;*7?xmEuG5TI(+z!GtF915OCAG`a~QSN1C8niTmN` z^(XC^2lzQAHA9BM(81OMVftT$BC5C$5N!4b_|g$6=(WjV{rA#h3}kc1sCLWh7J2I# zy2N9)qeP&+^Q8_KzV2Im^XN5th}LNpsceccG{{ut4pq<|QhF%m-v_ZA&m01m-_U&EJmInX5*T(@mUvkFNExqV z-?i$*)?gLG^se=pAT$Pf^52?xvX1f0pAu-tc~K`DT{BH1(_9h!VzNRC9V3GAu7pw2 z=Zclq9Kv2{OWu*8xzMm@#i!j9;~tN!beEccIY#zCZ4hP=9rG%0RpQP^MPim1gV_kL zAv3ib z*;sj4{~+-};+^`aB7RT7kET!9@T$~-7!*(_2#FO$ZzMf)-YT&cd!NMt2pi)7=jB6tm1ZjXQQ+zQbK38#6iw{h`c$0fBOrFs@G+CV+>QIlnIvEqr<8Rnb1eRB4Wiw# zO|$Z7UITi}raCo=>C$h_(^FC$e zj2bxf{?0qi_Ad?lIVcT}v{M#gBbosJLS*O&+ne`2+xQEB2%a_X`=5rk3xki@)43sw zD7GVD>Y{f?5dpVEv?+E`0cV><&KjiPj4|T~W^U>GMiMk5H+D(moZ1bIo(%u&h|T)z zZylKX>QOUA{QD_&;bDH1b$#=qZa?24vcK=})ac}^nuh8;AV2ReRy3z1c6|Y4b$G>M zg`m?sE^_^7c!e!LPlQ3GWHd};Gpd92dS3t&$yNb+)@xKO_MW@pF^oz}kHkd?z-S+*qDuDRk>f@p0~*x)VL``6T= z7PNLAN9VB}eYgmwNAX~u3e*O^rT!|M`Oz<5Zysh5P&L0yZdH4#6L6LlmlRuCm~BIQ zwDQg0W`12;Gjvd&!}0Q@o1biBN?C|sCKNP-Paw*x&LN`LI3!Da=N^$DdkRH{{5O=a zb8-CnJeVn1&=f}Wh2Ij=CaBOzM`z$0s}tL`MD4f+8v&16G)6{awk?(z% zf8xK4!571NN9_@vE+h!+s}vjrP4NLbSKN*d%ZrwABbNQUqDYH${SXo+j+o*Y=hrz0 zO`arKX}Wrru^l_^l!2|YF5PksW^mDjOLN{&z6N0HXD;hizeb?UrVzpdLdt-@Gro7- zDY=F{MkBn17ymNp_kQ+cm}6K0n9??WD_9{068G z0`&qe?5vqdFCx;L@G)N3!6qzYxfQmT%8oTT-)ydSP59wCg^9B@$P2p_qen?y$dc6v zNaW2V1Wf@u`*ja{i1l_p+UFkIaHX1i-)+o8!#R|qZeJ-7HrdR>5fnIm1lnIMpL(R&q_arD|HegH^&;LR@=;2y3?|iqeQ9V+M&PD#y3S{YwqqP4_2{7T|!y+`0?@4)*D^vLnMpb z8L3%*RW;b0v#haOc=P$ihO0HXUn{YP5&PW-$)ax!IOP&9k?C_p3BLmwKJ;Sla0llq z_UVQ+CRh4tVMO4Ij|uNtE28F%AKpLV=LU5HIPYnbQ00jv$I$1ie*RkCuPPbT`TqSa z)m|tmtN?WoIK0$8mNqDaM+$S|+!q!VOT$~n3W?Npy1uoM;q~?AWKH7o-c^l*!#mj4 z#uhs2>--E$3kAfc@3hj~!RNngaSWW7Zu4>{bWRm@5f7KU_~Nknpif8LyzcLQLOXch z0qbmR$EOF-*tgBi$EVD8Q2cEVr-}Hy4D!y(6QgElnc=z42098d0DIx1Ei+RtEdf(= z)iJ2;x8r51^J`=`gN$Br8K$EIivsfRx+*dTiq<->nZ6*gNtqQe#_%H4o=Sf2loGXt zqqL%DuWqy_R9pS^CeECbDK}C!Xzl_X8IWly6N3jiPFmmDQJ;uUS{IId;_8LJFED4d z8a0?Hc0sR8lgMr}AyWrUQZ*nvyvW|&mmQ7R(vaVBevLB!wGC4{av4j&;yCFq)f}rL zJV|?_z(3}GUnY}QPFN0X;7N0RBS%tA$<#p}fLEp-rAj;vkgsoj;$_bdham#G5GN)TbrVEFHwvC>#9Tdta8x>X7d{d)R_psNW-7puy6l#A`w4ygPZQ zBK*b5Iu7#ZhkQLn)Y0Dek%YKLVuYOAqSGADF73Q=re_2&1+L)-0a}Sep6NriJIiGnsH+LNYU!l2c z(%2)Alk;`WKa!W8UUeMGD8pM5Zm1jeJlT~99RAf(&-nO79$Jf_d)4v}U@FhMwUS56 zijNF}8Gkt!b32vOX}hqDWFX1?oG)y_E|!L|)h4=3zRvuMl@)#ty=8gevk*FyKWCdP zoKu4E58R*v>o;v_i%~V59Z7`wu=6YEW)ml&h+!!qogMtK3Li=GA6w>IxifG;^QQst z_^eO|>@4UCC>RIEMt}%g;PaysiopPjFfl@%ZKz^HZuSg{*7CxXwODu>mVlv^6K5gf z+x0NoH-mJLUu(Ro?m`F|ROep(?h+;VjlBIG6yAr4EV8FSP77!5r=g(Hx&aS}M`(D{ zP#b?UD}PZuo)K3MWSpvKWs$Wq-U(Do&~(Lp$H9wo!4>r&8ATM zN#(_Hcvc+xYpFCAaj2HcdXK3qss5u?Bp<5qU;=LMya^%B>xW|3J&*aN9&GqY>&S~9 z^WDfHaZpQRbM;Qg!&{B^B4tNL0TFS*d=I&VNF*KO>UKv*ho*WUl*#FGt$(-=|K=kd z0X7tGrmM{pwl(@XCQ4fAJY&aZTkGHp;XnT3)@@GXWMp|B6Y+@ATe?GSMZX;2d z+@1`%0QE@0Z2eWWM}SmoH5angSSCq`Y0&1yF4Si@1bF4id21_fi#G@fiS^j1!ebCg z-;(qM!PYLQ9$e_Yy|HcZT=Vr-Km3sfT@+=&bwynV*r0d9RLkOi8C5=f9Mf zhPHa8Q`|dd1#|oM(`9w3OJdoTItJBR-?fDKmP<+f?cqi&!`M6-q+qxBIrkYh@}K0T zS*{~XV>2FIjnI@WJEWt^NG%p#TyY;2)T#Fo)ta2a+eiwms~_dBKGqelrN%#!y>ikO zpfq)`9dxv(cDu9WcK=d%V75S+_fRLA0MIm^c%kfFaE^IcJi#2;u$lbV?1=q2);_06 z0s{ZcfY`a%|K7Gp^IJfRzPLb|9~yrz2F(YD#qbSIs~PVX+$G30xL%}?xXqrKjS5w+ zf%Bs{He%Md%%Jr|jJt<(^KAUhFWWw`N$eY`uP~pej?%3jT6EwS@S7jpbAe19ti-?PJv7A{JBf4xh;0ucWa zp`z~_b&t%Y9xX@e8(Ua%{E$pDTKAG@)Lp4QFU3%25fIo}ez3YixpywlN&tu~U;&`6 z@rk@rq|dmt8W}CZ>w{>XT`Y~W)pu{<&a47Qoox0GsY8v58`;d=HNsfveD7au-GsWn zN}nxR8`I?3k9<34^erHX+ac3l*URAUy1&+V$E-yKZGrWDqcFPg0w6gmlJ_CnaIl{j zF^03Rih@D;n`2h2HKUMlbqz32rNpUk5Fhk$c_6*yWaE5RW}P9Da?B6&VIWM<;x_;ahgeYJS}{Uej)wVUn&+@myI))idZso z>e$j`?o!u3>iRgw?B7v9GdiVQsWDpsi{YsxFs2@6lKAcRcf>|{u{+21NxS(cOi}#V`H zB6ho>NJhqPZ&J1&e{L%J?GAo+R8u-hhR7bOFgwi2EG$odC}u0arJ<67NZ_~<-e8z`+Yv?6k+H)}7_TU&# zTSzL!3~O*br}Ic6;KBQ&S!$0q#31q;eV?s`+#T-{gQ*ndAQg{9q9dk5%KkQbBO#F*WG z)2kb<=G51#0rG3)Flw}(!fNL}!}v*{2H$$Kyf;3oA*mA&LEw3Tdj1)|{wdAXCSr1v zt15l}bCrb1z9E9Axyj+qEa~F@UKU@_1`g+|009tm7n@lz_Ph(NyzWLOzH{lNF^&we zsdm6h#)kngXFaPj5%K%9R9KM@PBXJO0nG<>F24-WNdRt!oL6z$IvkB@>%RHlr#sF1 zJ+;I9GCXv^!xdWU<#^l=WqdAN8C0nWK|0u?gL$&nd+f9)K`5R2AtOqpZQ(}elLK}R zu3hGDP|T$X@9^m?aOu2Kh=96|)E<{)x9G89_)e3$W8I`1o?h*{N|ybPhB%yJq$9M= z4s2^W;{d8A+WS|QjOPK2b1~&Ilx;+Bwgf&*l8kVk(#QN%z?VnI|A|a5Eui>W%hj93 zG2UNYU)a3vcMhwp8M?n(=s|fqf{~8Q%i$F2%z7kVRcu4qUu#VIs=B}EAise5dT%U} zwU%LuVxd=Kks=Tpulh}n(D(iOH(QSK%!6&9V=`lys)qA~!Fi~6XuMqiI?m(a`I9_y zu#t0c{9E$K4T)xd{q*o)A=Iw`~-GHG=DzgOrhyBCodBKE?lD%7>_O}t50@L`M zo-oAAAOzk3@3Z`N-KDM*yL^VhdBcgvLyaK2UTbwolaLjuAixpYjA|yTeH~Hiw9 zIET}~Uh51@8HqW*^QhlI+M8@&h-b0~`vR z3wURv4z*$K0AMnuI32Y@wRjTsl?$B20FKS4q0KfZGz)==wagT3FA;JKMBD_S7B>Q9 zQtOpfiMEqqTQZF%Sds{*t$Da*r>?mpcl-vIcgA+E&9UVAuZyllbV5sbU#bcUCLx65 zq1{2tqo=OY68w&%UZfOI&(pIO!<3IHC@->@ApZaVYB{ z$)7~0c_*p#<9Dd2FLwT9tr`+lJzJpUO5g~B5NAiSVI?+Pso@6(K3&LEaSAZ`{D8a; zyTZ^~+fMMubZQn71hkUK|2kiQ8<<&e6Jv)NC6;&@_NR3y-?0=%+fEy%9-1x|tkoMC zv?F4i7;?`s5+i{C?j95gS#MCd;CBhmo;By@=gvS$eP2RGZT|vk`MSb`)u!X#`P>kc_3d{5 z*T)Xq2~PD1*7($LbJ-T_P$Awu#`=+;+9_F`<&|vZjNYaDjU#Y*# zP;HTLY}Cguq7Hg5mKLwy0eVsHX+5I89jP#>ZtuiZn{ZqpB;-paJn11;~=`PA# z9BUkLi$D$G|d@B_lYyT0>5g*+O)#sx7Om^ zYK&Swj}qGw1Cy>%@!xCTRo3`i8<_I~|&Q`7_fy7vf+|vNa&|{9rFx9$nv!|B<$Q!k7CwbHhlMI5w|De!&TnGCLrubQ2|ulC_%3S}yel9dam zIDrMt;`_W2dW<{s2`@b~8>dx`%J2fTfM08$bI{L6ecXdmBQ|+`pNRE-#1Egz2fya8 z!3nTlJBF!$df~?_4kiDoG!n^be5MmI03?wsXKsaPH9p%33%RM5W3-Zd0mFUD3(H%E zO-0D>Rxoa>D8c6c+Atbo%#ni*P$&$}sn{jMh&?=oex=NZs*jz^N zX}97f2EyLUjfM8C_3E>y$s1J?lso+%5Y+*96gCPaPYr?oU7qq+EmzP2s<#_@}BWuEzZms z)$XJe?x+??MFO~|J}4LO|OAqn#%{r%X;|4Ob=xl%1#9JA z#1NW8doLbiNf?z5d}Bm~*xCQv@-sDI{vS0!q7HXvGgrrqiL?M&(V7R-; z#(k?P+^r{Kt_wD4-;*;zf-*`n9t-`Xh@Kl3ZDOLsz%9@#B^ZFuHlGkeKl}7CUS_6n z(yP`+Mbt!qvFIy~^uc)Ytcs3URq;<>V|BmQ3CY)3L7a*d?VlOfaB$h%Eggk?Kwc9W z)V74)F}>chdWMly-AbbOzU7>1_0Vb*QKzR@6_`AvxY&_R)6n!q#=rAbeA>f|LL$m3 zZuHSES=hhTLB8q~Zu5$SP^LS_et$v>kX%&$(x;B3h*%vgmz3+IeSJ(j`r+FNdlb5+ zr1&(8zNA3NY)qRp^(Z0+t0SY}`Uml5B|DEu$)})n9TWUhXqj_>-*lkot4oTS86B#x-H z=&`E{_TVO(c#Mw4jihC2j--P`Q zC`8<6=lpjtVEy|)%5Vh>O2b0Hp!MZB)SE-|FQZZn>9*&px6ry@3`fiTNi$z1b&8k<+AeY#zaxb!!I&2k7kklpogik1Oy?_3{5DysO(*mlHi^GZU=Gz% z@B7N${%+%s6+rUV45N{P3L}_-Y03kB%L)l>h03GYZ(5`7B=0HV5Cy14SP zWtj-J_;YD}yqXz<9G+vLrs=!pn#qK;_~vAnnD`uS{{N4ycMh+-Sr&z3+qP}nnq*>U z;)!jo*tTukwr$(iBop1d`|N$b`<;9GuU~hsr=RLxU9Rfds#(um>{8yi=63?@_?+4; z3RnARIp4ooegKt+xoV_bfBSqvnV8xCOB7F1`>zft&FNLXfe^KK*##9#(QU@xd5x8XK?l~(NBYQzjk!FJoARcS3WQm)xImm$cA1JqNU zBkTMEzk>W;!Sq)2#ynaCU!*7ij5e6yTLm?~3fM9=D$&#hS)*fPO9yQ&i?rU$jke9W z2w<{qB!#(cG^kTBS}+NVBU6I7^5U8fQ8chPL3EP9W|GHSu968}ryM=~GlyIme7|8= zTITX2^NC{gsYx|_&iPQXbvkQ@Nh&PyaG zz_=lsMkl=QXkOw&brH!gYut9!*0vjEwz&aQHxQid4DCZT=~@&6LAj5K7UJc59}$aB zbGbWfpK1%tN_xRk5lGZ{7B`nao8FKpnaYuSFjGa+O=V;paxi?q2wo5R;H83;z|lMf zH6SIX1G3QQ9g>H*reFO5GOqVw2y?Yjexf%|^#=9&DsE;$Y(ACQS5tM#kvO^eT5unb zmI`i|lX;9X#l3;db=6aIK|VOY#(n~k8ol?X%d!y_q^tD}Q3ltBOE*~6n z@C^LGxUd!YMXJxef_@lc!LZGeX;VvI9s=IbY3QrX?_;CCyJhPFz_V8yY}5LZ4Dx}Mq)PK;zx+y%)^&*+50fn^C5i|!Dvb*RG)UvVAizq{HZYAl|=HRra&Xc<`P zsxs`pCE1%FtE1Va1`9O_Q#Rvkkwhm8j^y6f53f>5fy z#|Tz{$D+3+IKYBp>ARyq6VNPcB*8ulA?>HEf#5ubL9TnaZ`Rpl;0rON=?tmTFz z<%`zs!JQqBS_mSB&pn2R4AJ<*S&(WetctzEWg(+WB7;c==(fAfi4eqU2C{$U3B~jQ z4PE&FMsi%$52C91q(w%qc2OT432w-( zB>xh)eOj_=>B3 z7A6P)eg=!)T-df`@_5NB;KHd{GAsSIZTs7R?B57j4%$A|2JKCC6t8mD80^;@d>)!@j>x3&GrRh?q{h;loVoH4 z4sz*S9GYd2>hn#s$Oq_@ppM2*(edeNYLY2FKx&q{XghC$s#v?DAg|<0Q0- z+y(THbi%U4IkY&p*F!Z%dtzv5DG`+T=`^a6sJ*oL6@f5$kimqmquga>x%jI&DpG4@ zz&geq#*=dgpERLY1!ZiK{6;DM5-O#zWUq2tnQ5D)S~`n^!)En8C3zu^E0k*Nc*o-i zW*8Z@C0KlHAQ>6)821TA%@KOs;!$BVnED3mK194u{B2~Q9~n30wFeZaG&FV9L{3R3 zRX#;TqMvOeu{4%cE6z7y>d8(D$)6+u{$%n?D6;Q?l%Pg7@z95Oo+C11*oilj;%LSJ1mu(g z+v95`@C0LNC832(UFt-gf83_#+jaQ~$Ui&{;emQ6v6QCUD9}HuxT-y+MCP@M$nC8w ztN8%WY~@l!(DNNl>a>i%#MGeXkN>WpXROSjXFmEoTn&5RffIcI*Dv6<{$G6m-!W^w!JbqqC7ZZsV~Q&# z7yaojFK@5jXufK%zIiji8n$oD&a@HDE+r$9o0&7V-UX zcQIN)K@>C32;4xj{V;dY-9XiL@n3)h{A`7M(LxXKL?fAl$kY*0(nuo;iSU&72RreM zxn)q~NhUO1Al-FLTA;t2%>gQ=-s^y|GdfDeyXNuYSIbvmu;c*Ll)WQh)RezqAk2s? z9RD9FU}56^w@r_gh>hj{PYPIA*g5}g)60qiEQn!^4A@zOkf_uml&gaM5-P-qt7hcn zh~+#oSx_}W7em9YAz?{0z}Ek?y=l{#FT5gedu((0k#q8JR)0LdnP8jULDr*}W2BCP zE1RaPDQza^FNFk6!aPiNz1rMGz_pq&qiz(N+OZU>yJ3P`dG@R5Z)?Lg?NV70KmobNl??H*Q;U`VAjoHXDH!>*>;`7&9Kr z{T~V_e77}Idb*}odo4x}F;^k7jxE)KI_K`bovX*VJh0t{&*g44B*cG~Q#+m(4)iBj zMEBQpv9YVZu0uYUL{$eZq70<^?h#Tet20+fi@YrV zYV^D>Yk8t#z*b*=3Soh@U4(>OQdGU$I~_SvP@Xpd3Yo_SL!VLtxNh28Ix^tU6Ahv8 zmdf|O6*V^0&Q*A_C_y^JoIYgd3(2a+OVF10Qp5FP6{R;csx5#SE^*s|@%2T?1@U2; z4O9IN2N`LV`ujn3hwHNwEG{?%63U1dSdIzItScp%e4e-f!DOx{@-?m(+KKX-#0@fw znj}kJ)66TS4F$AH!?#?6I6rI331AfYoxMsK+ZfH!C6+c0=xux5z2pEWa0nn;Kqsx zOuWOGYBf$4u5-lMHC@@0<}Ei1cV(`#8XTqS)V@=D0}TRuQQIls1iM8m;Ge0_$&l-bmABJl>#-n&}M< zX&+1C!ESVZZO5OdhT7}mzjauX2$P*cNB)CY|AyxqI5_{n)&qh;YtGY9A}FV=(*k!U z60&ks@y`>-mf|~d#gMyM0gwPnVy6qkzWTyU%}Q6eIhPMRa2sXfJvfglZot7{i#&m! z#YKlAe<%@fJNpj6q+VwNZLb6mU$l{5kVRsMm)TTL4Km-L3Np-xKQufH#gew!U)V0x z>U`h&@FV|k0C6YcwJ;VxxRWM75)$Ewd^ohI%J)6=yD&h6WrYNgRHi| zMB%h`WkIRNc2hyXza{}fG0;1g-_yw}?q!Y{osr=lhg|kwO&}AXg`Sgpmg(M}Lf?na z?}z+%BHnBY9Bbb*;-&sD6u(e@B0&;R-C%j zQ)JP-f#Zq6v?6T2nVGM5w%H)JTwTkZnoETNk+hGahIe*H#1`I?3q(mnIh49Ca+5 zv(E8ou-^h#kJcUJkI4bu^gRf?W#kgqD)#?eDgY4*ZoJs8dCk6ZP9441CPy%2C|RJ4 zzM0jJ!B%THL?&r{OO(%0sFiQHp(v3RHca)F<6BrvQ4++=H?RoAVnd6p-|CaG!o#Sn zaR&lQQ$q{>>8Fw)=Y7MSE1RFvj4vl@)1Gr$^xa3w2-Mmzt;}i~Tx=rM*^sy+0{jEs z)En~M@~f_2o{D_lI!8F9Q;hWg11J#+sfY+4G=}$sbh-x}B4Nw-@%rcEVtt)aq=`eI zR9hFg`3jNzEWt)W{$~lObq)Y+Qf8KoMJ!JJFn-?m^lVM@l?v5TS3d>k8;65jp!tRd z!6Tr?S`?UWbMTU!Q54EUj;hfb4-u*HN@SWV49XgJ2o%hEqii|q2Ps+p@IU`UO*8xx zdb9VLaly`67P3>6c9pe}yRSzK_j{Y#+bvL%*!JcN^aDX|obSfo-n86S3FIT#Hztdb zLI0gX{BLw-)<8j?>2@niNm>VRT%>QZ7)*U{uFCq2qU92=HB$nGc)i)yK{kPGKYAnB zoeWf*NGRnl-XO$m<7$ll5BIvwJliG~xAY{I8$73kJj(GT z=^5ia;KM%_j#q5sI(3u99mggzlT2=!^o%y1toC~)^NqeS`h=1_3BaiI{v$#x5Gc=G z?_`46Snbk!Gr&QX5c(q>*&$wo+m&FfQ~fYrNOq)ZvDrI88{*LFDqZo0IqAy&8~%fp zNa_Boy^$<2Z!LcKyVfBv{s@$RBMKHHuh;uw+5=|Wzfi|cTI?*RI@+Hntw=Q#nIw_m z8`BQ#s&-D+s+I-;hM`Fn6`n=hFo{Vzy?|06lJp%q@-qJv3oCC!gKw0h#6mlCG~Ot8 zzM~x&NdzG9VcPwt9olFoC)>0nOds!JHAZPxiH7G6TNI)X6Bb;ED4}TR_6QeF)bPQb zF@PmazNBHz>fbRv(tcgUEDXM~U4fO^BNVz~t~=x?$qe82F~=Co7q3q?RwGX#5&vP_w6r82 zp|!XqyrR8j3x9<6!_3@n&!iCO6#P&a2$lOfq|1lavtFH?ojTAIh@l#_Ig|_w~ zc?j7WDwahprzym z87GoU0i1R~itHX+E+`CG;8xhC)mTrU2az}!lb5ZMv{vU_pxX4m(N`6hcv^uOe9M$4 zOz-@WdodUhBDIFNtOz*FyM|IadQsx9cOjhc0CoCD{Z#s8C2EoTuh@;Lpf7#%PlD5{ z;6XB$-L*2(jx>>8SQ;9|#fq#ou@9&5>1_$PyV2&xVXC<^>9qkoHcS)nE_@vOObSe^ zdYn&SxW|w8f%MrokPywLYLUAd&&%DTkHjQo|7vVB)Z|+?QAVS;kLgU~oAMr$+W^13 ztWyOWzS=UH;gOsx&8^x`xGS*=?J@h_^}1BbO2z^9{LW*rw^zIhfMfB5XsF0dp@_~D z3J5Rd$B3#LUGQCdG^97tf;HTCuCoDIqFl(aK5ms4LB+|U9~DZ2I4b(N75n2 z5OyMl2CvP{Criya-)abTPo+(j6`&PGm}W}*eUvIgIvWWKY&qP4n(l4(Od~vm`4NN` zvwOX-yYtT6(d2`)38Vw(uZg~br8#dU0o?Lc!}CZTozW?^oQx{2TCKwTDcBDCZ`e{g z(8RxO6Ui|<)h$Vmh3W5Xx4uPiT|-W1!RVK$FvIi8Y_3IpXD^nR4MIG`d;nr5D7r4J z={3HbJ)VJ5HvMr6l6p=@ATmrG&HtQQDoR5x4%J%Y zGd()4+6hNkV{@(aFauax#$Ilb$_c+HA;M^~JIaXV(-GD>>0U!@!~xD4BsI$hS3Eun z!9r(N;npv|#vT$jQJU zHk;pqzF#f5IA<+wU=2%vh(Z^r;NIr|l|6iZG%JM_-|v#ry<*)8LjNtadW&bxPCm*l zaCsEyHpv+DW`H<`|HG)ZM>`hU;!#@}6*3A63Qoax!FHE7=fmHn2?6q`UthpKLhLU7 z7uxv0dDs4fy!7G3Hek$f;@BzbjylV=86N`7fBwAMdnSN>rAWC=uMXwlgBT1 zCOu9ZCaXeTPvdM!Zb))Sev#Nr#7xP88w$9? zz*&aV@OI-af}f&+X_g@waI0|{6m%$AB)j!q;`*+ljo~*DE)g$Ld4c7oDUbc64+(xh zLF%{Xc>XV2|0j#>KWyPYnQY8#TtxqBFpLr@I8VTYfUIxB`{s9Y@lDOFq6ldkqGAjI zOrg1ME0zE7YGX(-q0;r zO$3V#0EHk1f38@XEan%=n4$H_;mp+xXG>=&*NjC`rw2w6hzdq{q;P zn*Bzk7@KK!=-G*47Zl}jqkE|I zjjs~I1U|i)WJ4s~^^mNkAQi&9Y;2hN6a?~&aE3e)2bTtQPM4~I4pU9&abqkAV(4=9 zf)`goVZH1*{k_F-t(4$Hu!)}KqV=6pXCc*5YVy8_NY9~3Xl2I2qOTS=cLs_MHZgth zswG{5EWUbPRkVRdus-a5OJwVlmbGof?T!t|Oc{3Lt+74Z?+XM=WRo0_;&jr$zpl!v zEt0+x;1>DK;$|o4gBO>Gg5-3FW`^z3HNszZmkNRTP zBfZhtgTPCvvwlL3XhF`&yHkswl`q>V1eRY7h@~?w&gKKHH{?OXbtk{Lrg=DK10K>} zoUh!`42XbQ^S5eMzDv)mB`CcrK(!5%i}<5NB=M8vXuP9s!x7_y$y%Uyrkow#Vga?w zM>VSjuaah{LM{|(U;CgDKf@WJ67?XI8;6~E9yAy}0i~~-u^56^`^{>-jSS zamC|TeI?jA*K1d3EHWc&pK3G-HKPGP8v0}=Plfo8d=xp>(nrsaNMEI&0L>D_uU4)I zITeyg%t4Q8<98-((c8SWD7vlIAq%`Ui!HR?ZXM9x^E$!K#Xf|DAPS^VZI2U9ASizL zVI=2E$WFMo0PJVsJcRlIshF+v?NVG%_-I7fcDHCosUALA!OKIC{$owxu!k7|=xK&+ z9V>(Eq*^^u>gy-aOK_-3z@OrguHvpar3NRSOY+cRl;@aw3^knxccy@XI3WJFV1k)x z2Kv8*YB67bPElEqyQ&U=M~SM}B7`o^dQR`8(uL*H|5V6)F|%+prT8g>V1lxLztnwa4N3{H zZZ-LtrHeuz$=iqD-?#PMvh*QW0y=oXTwPr$!6;k*`D(ezO5=6BQ1fp3YOJi*>vB=& z?;wCdk%sidbXJfgf(3;oWn~olp`?-#l$3_uJ2@IGBuoqeg43bFy&8er0pt#>CB*8B zGmG5Y5Ay=q?=ST2FR^14>6|MzB#UP6qPf@L|yxb&IS0@dqS48~feMiqj)d%9m#I@K=M}=kE_j*!!25q0rub5T*teXW&#I z`pQe>)X$=f$gVa}-v>bhR`rpu;!onkcSJ#;CqbNfph@53uUuVgYxJlqUmy!+NM1>G zOd_b#Fyb~S@1RdY=nXi?`=aS_Y-xu>^hVSHHaYc20f>Geh)0Icy@Q=@+gQhyJ0 z%FOy{DV_S|{Ar2({wuMxG$4c%l$I9P*DopvwYPt40AbhQ==K9}n%?d&B;=U_nE0Hb z`+EB7k{8N_oJBKm9_veF9OS8Duk2UIH!DU-w=o@;3a|+S_j0d)lR=!an4P~I=>z|) z;_>O`MVWKT4eOl-yf#l-!qCFF1y;`Y*SI{W7VQ=h_urz(pw3LI zAfMCR50e{NvrDD9`18~LX;fP-lLPt@PCi`P*?@@SOzUIvxvdvI>o3Jy$N!;(xKz%LA>>ZH~C*Wqg74^*tki{N2jbOD(9R8!Efz-2J zrB(*yoz_s>=eIK{VzLl>W_$pdvkUpX;X`#71miExEHT2I=VP*Vr|F-!fjW}P-_9{x z|8BmTH-b-;wd71m;5YZ+2dP$zk}~et;Kg!|AX$q=DaNVt-dSo+U*))mlEcwAWUjxL z0~d_&7w9eq01{M_B|bg>X_g4%2A3*NOzkWDx~0-~&UpN3GmJ%;#uN=QkV~bBq+)6! za*;LZIaAENZND?}8nKzo?8VvehlkGs2W5eE0$o?1W@7|I#m{<$Ez4)e=+ zzoRPhGshQ^!-$FCIq_NasqM58b7q$WnScEiC;NFB2vF|=oYpfij6xKd_{nIq zFy8aZ>5^%seh7u<^xMclG51U`Yzy3Y{{1r}W-740IgX_ce%O_?w*Kv?YtskC5t#9( z)fi{!$RS*lHCBTU4y3m!)^cJTcx=FahxnQN>aE>OY;>a$+$Wm9g@=>(#&q9-y<%?Y zxx~A@2|(vEH;38fo-FP{M&@YqYSnqmfUR8lp$G$Cy=oP5X!BI*vTHd($DUhs;T6a^ z^vNm4hL3uEpu}j#-ks}4o?o$xW>C-H^2RVh5);aS9)u01bN4IO8`H+J?rx52hY6S7 z4XQyn-*~h%a&4)!IzJ@v$320UT9IWFZlXr2n}ax`o_8SiE=CDcQfo>4kn%jDj&T+LK}oJx z97vka_Dz#O_IrS#8C#$_H=X2o%6MvY4X3;~X|*cpHClb0M4+R0;N10o1`qIBBCeK} z5&+?*qWfe?<ZqCJ&N;$$CVyofu)Es>G@6}a_mZ{!*Kxg}<2N+X*QU@^nl#;1hqYvc;RNy#hy z95!qk?v2nIm&@*>8q1G*g)e8<+UT5i3|FSGQXS{buiY6ubzySV8ZNl>1Ce>W0gUC3 zQFR8^c5=Yno(&&a(fT~+Yv2Yy+d^>tT~`9GK_Ch8)wy1F@4TODfoeML*~};T#1A|^ z0aq>}GZ@F-E&uc?GkPhWy+j*}LvJhOi1E|4l%&<#r8Dt)^^-|gnq`2qPNH|ii2+K7rF{mW7*esv#S-S8H>o06s$Ntz;l z1RV`+z~T7CrPn(zJvuVl2DNhrg00B7|HvJ<&>MMyTH=tyP9F|Y)j-rza5~NBWU@xH z#~o4)rt+q*#u8s7Wa7M|Q@F@Eh$ zw2munvAUEq4dcrH=gV`S*L*9uT5($93B6S@Q#U$d(Hy$Q9Uvw7KFg<7nESH;0bW3p zqxu+%Aazni+5JyH*Ya1@=q}?O=jkbQgLYym5uapHUHU z2^yEEEh#F(13=kBbqI&< z)bWv@$;=Vel4d1qMwxXs=S?lS_UY0Mi_^ZSg^fr_@M}XIVOD4;bUhr z`D4<7uoDsjc1aVC^DnZZ29USF_{BPaKT#7 z%VMR@K0s}%f(m(tk+N20Uj1D6Pxm~)>C>78#o)t9_$VjW2Zbu#*OZ!%D>5z|zs`~C zA8#(#^p~RfdLydU%MS`jiX>ed-o9$Ik0g2obb%>BnuS&MO zRVfExDsqa0oSukN_ynz;kUAPRCi_<{d6-UR@&L@$FtI>t-lKNqmO#OdCd)9NOU`s? z{O-rn#XEW;5vN5Owy@Zpp~gAHiuZbW(#e?csJLtJ+>L_dFC|$&rYqj=OMKezAQhn%$dG0hJ23xNMsdB zMF5;d6kVXmw~s$V8V`)0&UB)6U)ZNNsmy#9kK}d!h`E>5i9TF_v5>h}s7hq{@JG!0 zfr7f`9vlp$ISyY`$W&e|%3hahBt%v0T01xN;d~W{k9c=BJ#1`tC8SKB5e*Msy+mH3 zu;WNI2A^IcrV}-dvVlo*Z)4Jx1RCB`x(7HFR$VGarxtKl&VN@FOjgtml zqW`qWWM0N-Cw#Jokk9(thJ^j@8|Dx0Tg9b8j0UFF6aRZMk2;d{LGWdvHs_<97F za*AuhM8hr}67K0B?12pv{qye?;v?Ypum=yR5)!RuQSDan(IC6)y z(D%F2onK)HJw-pH!O>T;t-?cnx@G??RsN(5$%TE+cvm5-NY$8y8ZhH9R>iR(;F~9t)~uWcj{IvO$9dL7yqA7nnjm=BV%IXviVi> z7Z{c|O{h0iSYoW4?kheQ-P(Y94A4c138yCkZsxPgl*x#2*UwTDbLf-Z)w9G)o!-3R zU*%|V-Q6!1o4*$3%YLR+rZ%^?21=2*H3+0ju{Oc>gYu4}RyVn-*!%zlQ5zyA_K5uL zj=uSuFBg=U(Ie^k{0u9&zu3pK%>e@#2x4^Cj#Io5K6^`I5d0udsN7-MV3q1>DgXw3 z_H9E}Lx{tbzErjAK;zXpG?PKrpDJk6JINjxVBeyw(leiZ^K)R{9n(tQM6Y@{0oMAE z>4BX1`*JSkLA3}Uy~_^ZUUX!mQjfm8ocz&0Y~d(3+Xl*ADwbb)JCPaprG#;jQ^Tzh zx0-K`f06NRHATh-dr0(!GHh&hgBgtaEN73m@{3%#=D-%DA)}LKOXjG4r$33XoT`o* z!mBop-e1fnauMP$L@lGc^D<7AF&EN=!s#B*Ja0w-kPWD zQHaQ|rD} z3GvV5I=HwNngTQzHJjYNIpGcZJ&&A12327(E;E%?@g+K)03L#CLJ_B(G>|mZVgbbU zz-#OoQ8&4YbhhXgxwp|wGGq{I;R)O79oNofalHUl#u_ldKG{34`nmHpR7X8>^Vngk zBq-A8>@~3HCkpgtc~8r4YQTXycTp^zN<__zuc-|18ix5=Y|w08lKA#L_||+(^L_FH zlKZ~of}Gc}AJdt2;K&?b>{hMF{rI<}?TF_2qhxCsw%YXBP9$g1+dERWDsf*r^cF8M zh`kNz#Fh{6!KbaQPyt6`fFR&KnJ(Q0B=M^V?u_$shY(6jCt!|m^pjZB1c$H_$A5Q2 zO|_6HPg6`Q>ui3A<#@{=i!0HmiZBg7R96C)Wl{(;!i!DpnmNa+F)ip=yY-#&?69ap!3z(*nb_O3k?r+pv zC_qK@`0URq3PkAiignMYOy^A$TjuL<*-&QYiRt!O3g;5?9@C$$iQr9C;ZMTmK?Tbo zA-2K@dz96}wF3T&s8s`*BIJbB6*BF$uYSd7`$CCgA%V><;`6nOblX$h$MF_aQB`w; zLB8~W<@{|e+)V}nR`Of8eU|z>?emnrNshssTeHOEW!H|s-Llgp=_rk&sBx6)D4rVS zirV1b6Q7m_quyMyM=0UoVt>T*mb0!s-Gz87K1W~b7TbKBTho?qO5}#S^~gnT{XU(E z&)zAGs9n_);FWY7K@2NZ?XKpuMWGaxIhLmZL+ms1bN-VHwPR61Mh^i_pM%XOr6Mrv z{hBUu{;)1h>6X}8NjT4;bY6GpAWuQd*>(dS6;k?%@9*wl<9+c2Enttc2f^3Bp~kDy zxo63AE8FeC$fuZhtsoZVaVzQ|6Q1}T{qp%Eq{uxlQqey~s^;&w$IflNDKkp+;+s+d zlBc#QtW*WvCuJvy?d{^*;0>fL;9^|!6o-9LbZkfp$_Q- zF`~#I;$dB&hoLis_J3fUn0U0GzUvpx>$gHA02<2z5$|_FC{7Nu(Cia)1l>69eDte& z|Dd_1jyDM84x#^gSl3#42YM3=()N-7*mQDbf-iA2g@q_k@oq2MJjG$A;_68Dj@R;I z9?i?t?qv37(JgBRcZ0{JNg?KUA@4P9eY3iR1Z?}L+x9Ska%KAK{e93C)mb)YtMT=C zS;M)id)OFH-I_O^@G+o^BKMNxh*k+I3$}ED6Mi%e{z0l=xEoJ2D>>w~pidiM#P|pD zeI0$-iumEZy{5ouXvr>^)o=d1%f&z@FB{C(uAy2NsF2>Y2ATEPZ(UyNq;g@*puT6` zm!^lcksX(4E8U7(L=o*i?#N7%hMIo#UU=2{Y+*PXGm75`yEI4ZVN*n{VGo$Y8Uc93 z=UY|m-RW5r(oAsoxD_?@zL z#d?@E&-N?zQQLR)DL4p#xa4PJgF$Yr0=!qW@;2Nts=|${1YtZUpuAbsy^(gw;Nkvl zAz_LIz+F~Bs^|jBp2|&DpIk9I*ZSQ}+FK&a$(KC{cvYlSUGi_bf zyGYW(bhbPUu{=58qDWIm@2oFTiOEoWtY_r$9Rd}11xsW)b8b| zAxOlOFm^3#b>-+U@mGWky!0d#o>bQ0v8GbkS>)jyX)ZoHt@;#tLqrOgZe>?4om_wr zw1(dp^sXlA;r^Me=uC27$H@6#>SAIfpdw7=yL7=>ye)J$(Gn zlH=iTrYb6}lvE)g8HSQ^*K&bdO}!bO;&yDRh?Ihtj);iqcwFj|?FOOR!|2c*HqT2{ zdVwj#b0Zzv_tx{+MhuQG+0tuaDBa*4UAdnFKRn~|#tBz(9R@E779s>cyR4~e-U^W) zCJ_muDx25=dvuAGO+DyGp?IFA-Lbb}P@F!%#FLib)OD1N=JQd4J2MM{HYUUEm?M5t z{@b2E;yBJwY-d1SxsOgR=tr?6di&|RjW>59%j_Pj+WUf_)UnhmF#;@p@35`*yt(W` z*Szagq5ZZ8>9n)5ti}l!k!7?fk`PGOj}9%v2tm}W8C)049y60-ZUPMkKChpa3tAnh2wkf44p)OpLSZ0eQ{2WD<{{B z6WQ{Vfi-e-6E@_E_l(+tY0>fISM;MQ<*`KE-m7Ccux_TYzSR&(RC(Mpdll8!`wat5 zqFF;g#Muz;Q3*n0bxPn@n>EFd?QpNfmilc|>^6S5{zFg$@`YD@?uS%1Gzr73n}jM= zGcEa{!q;>g5T~K=etw+-%e+faoE$&Ccl0F5U!$lcYuhQvz*dwiu6V*8u%b&tay#^` zNXe-ko*vBCLAcY94ijbxL2RKcFE6cB>Z}_;Pp~{H*_Jq~s%ob&5)>6WQjs1l&$eLB zQd(hWWsEwh~`V)kKA1p&s=JJ;b-<0R?tPUT%cOP|y?yAz!gr-6B%b3V}knM+o zVV+dQa#r61rod^P_PI;kpGtH}kfb_&*41fu(50DG>er=ccFqo8yxo;;yR#A;7-`<=Z&>j}132hE5b(v=D z^UUCGGKU`i3E$8=Se!GHxVIbI6zV1Noh+?s#>JfK=L^U7&w>3x95%RfX!XMuKha}@ z#Hlx7(=a675pbqJXT<$E~~&CCrB z*<7)wcs>W>uUP${aSiu!!Os!WLN zfH{sd@epJaPt}g3U`y(**tm^O90ItOT=%f;9ez$`NPZ3jJH5X18F$TtzgehV;Og*+ z>pLul^Q-#2a0)&M&eqLo0yVY~yLBv|T1ymKCBUxvGqK7$G^SWJ1>WW%44%QGYnLSZ z_5&_hc(HIDqjPtL#4FZxF4_d}C^p3y2-^uqqn%&n4}FlMAy|mHtbzLN&bZdQdh5m4B{&#?1PrDwbq?61a(UG(T9=rr_N6x6!=K>kPBq~jbx)bC0 zHU1B2v=2wghx ztIhsff*@zvAAtscUDyv*_EPAm14+P#oD;K;L53Ot`fI2g%+0CDNFJkC)lUkXEQQ*&^_; z$NMlN%f(qe2fj5(V9zgXb)-|)g-^1tu8FxZdv$5;+5qYn{| z8f^cZpKn-4?Pq-evrtIPP_Gzoktz6Nnb$ZoqN&HEdU2(SK2p?+FyS6m%1*;YYc`DL zM}s6wKdvH0=|5|wg@w#6ln$ke5)QXO*r$A{n|~@QrYQb8rV2~QuPI)0qC*vq?NRBT z3>-w`>unxwy$q90y29{!Yy;w=Ot;josG2g0o(D#{&%ZtZ8<41QG^9ahn1aZzTGb=5 zEJvv`BH9Q<8k)$}Qdwat)34{BdUiPDdgjOuWXjou1?V&nM_xVZ&?nDvt>gLJK9Esd zK%-1W&LBhH_-$v-2b!{3zAI*;uTumU5IR7>A9GMvkHZuo0jCcG;bLJRTT1e`(OYGL z$8|j?4etzqPTTSUn@uP+$FALH?Bv603bEH z%RerQfoYU@`x!rYLVt_u6^T7!nl=6iv%_`*zq0|#w}7~y{{0RC8=AFhz7Y9>oHdMZ zhP_&534(roIk}5!p}!9W5;Uksyzt>oL42Z^@gl@xhAv8(AyQ4I3&5|g9&FbHr1{}< zl*Qu#q^KmEWT^@iw{u#6v{L8(sy~6Z7EPU_-5@q9+;TS6r{8S*pjjp(qknSeIU_M~ zwXI1@B?ezbQmrsjiP&Vj6suo;VnmOyieAA*BQ!_2g;gBbS2nbAmYezUh|J}jA_3cD zMa+_!Jn~JnML$PqF0NO3IWJhL{UtBsFGXJhl+wU{zv+)wp)Q)C*pLLT_R-*ZaZG-p zq+8LRp&z)sTEp%t;S|~{W|ehiAMYqD0Pk#9X;f?MC4~Wc@VAd70>h}ev&T?>u;z{# zdfgVL$`aZTcAxpW+~S6f{ejJinn$BUqDq|r#ot8V=q9Ad=3;TDSIpG>LI#nr$v9LH z&_I6hYkdXIg=v5R!aZ0z^W0VhS`d$2zC2t*iK1E(C8vN$-`_U$SrmB{3Om_75;I<~ z+5ucJ0mB6k!{V{jU~SI!$pp%3C@Uf< zO>i}sDNKK9m7qx-h#ay@R;C=$JhM68ZbF!=xatT~a1933dkO8T(G!a}`6=UZKz1VV z6;1!{h@cV5;u`8A@PC!j$#To4=b$3J2R>6oFu>S zoy6-sGNF$rm}hS>?pPv)>IdbAiScz#G0?^DPME{FMCaWn`9uLLr5zeb&cyoo=FUOw{wPw>OgLmLJ>5W4ZDU)d&&NMT6&9c&T z13RFq!{lhdx#5_dagkJ4a{J6ctY}s`V@hi zsV2IH6f>c_a;#blD1*{`%s?qTP|H!*z0#Y$YYY)TdX&ALO!QX1R6S~Ut^`!`zvK7| zyHRA(BW>6-`1}|mQWji&0k^zOc$-mfb0L4(;=IAm+4U}k8j+OKf4ZgqC;*>76vIN9 zZrFMB%dj4$E@&a|baAva6bGdn_yM7Kzp`tjx_q{dLZYRjR05rYKm)jJKqdB|cCb~m zP21xPT1q_PYeU$HGaxr=^$a(+0|-QxD5A|2R4L~iZxLEPRSGuj0JyjI$d*?Lst1Bf zNI}>749HLYy+h8q(>vqw!X%5u6isha-b5i6ll%q=VQz`!xN5?T6c&IiZARV{_$%b- za_CkF@orV$KiJ%xC6H=65yoXQ4PR2(@ye68Sftjjh7I(#K&pFrYF~hA1LPJRl7dC~ z3G(`6%l3n%J{TUF0eigV7qdp`(IN?c8Fp;aV zpE(tvi(4`96VUg%-HXZ*Rer=Mu;?W+d&e)PJpHjf3q3(~TyG0XXmen?8#StjPKeL1 z;!qVOBX_kwt&)2Gk}ECFLZR{HFYnDzjN$w8bJ^O1!Rsy0P(Q0yxpVe$Rz&%6%h#?| z=lyl&K6t4yINjSIL~Okji%$Wa5QT9$ocwn^5B9)%7XVb5Owk5@|F?qPPDR4!M>A_cZ7d{v}O(OYA;6lug`o@Lk(a^ABae zeJ(-zgK~5)8`KfD2Dr&V^PgFkD;dY8@xA^gQYXLmVPE0>dhxd zWGPO@mxWd#d+sfN-RR%Q;69Rw7|awc9OSWzPQOH7NhTSfQ(zO;TXv#&Zr;sstTzB7 zaXK!k7tJnlC|7$2wtoUV*4moR;M@hQ@LEt$Ru39tIFnI={kT%IPuK|aU}SN8?X+y^A4?lNZR~xv>9RT6v)7<4TfOEt~Wr&h!Tkt6H10?O+;IH*XewZm&&&@ROHrx zy_+G}ihGb~B4rFAy%58@@NW(IUYVW$kdufjPuHRILWSaui+92{=_^3*)xY?AokIE# zyZE|A(>x0$cX*yG>e+LK_#RTH+WLUGWGLhglcfqp4YY!L%;qkC^-WL`3AUb<``2CD{7E*5Nu1rL?0*>!H24-*fNyGnZP z$MV~MP{!P@VFd|`@80EufPAR4=K{BlFEa;RcG*0JuHc1kn7*(Qq{ALWWcJtgwv>_` z!hu+y>_xbi&*Zv@`v=mkKMbL(s#O>5p95hMhonYLVHl$gb8Ras_$tH%$ZSY={usjs%`YKDJ=^c4JR0Cx!mQYT z&I0Y|gs1b#Z_-vn)JrUldV0azZB-t{Sj;Tz6kB2VFzkrR^{@6>=B1qLC~9x}ZX1E9 zPYj9nq_J?|eC}}FENi065i+(o84J&z^K?xO(+qz_G)WH$szVaF*$yG{V}d{55%)_2Z&icE7lFB6dyjb zaCT_jyuzd1zz=uf*ii_8~ivnZ8Lge*6>cWd8 z)kQWc>zm(_No;mh?DZ_kG*n)HP{1lQ^-@1fSjhVES#8bicedj3yV{;a*`x1Zo2aG# zIO@I3uT&Vx)EwixEqY}z%>GYs>_(>ecY4AMTW@tmANMtkM*`j#A|<-$>OgVRwd3{! zjbpA{vt--;t*BC2w$=l|C7UxRF+kH8*rE2CoIAjI6+ga`!+_Tq^ctghn zVM8V`&nz`jpEfT3c~r1}3$f|Hsy5~{ku%PzY|H*qmE(iYENh321G_+5@ZVAVoC<;$ zRtIrG_>qWN$6Wn-_bg0e+L!3|I&^7T>~aX>R~bUa7`CqdX3Y3^a*?B~-RlR<;~9cQ zHn)FMl(!C{ry&~TH%P9lhIIEvW&hmzrECl57|Qe#n%zXDd_kOl7w};fp|}u%rO156 z*(M8mfdd%%Lh^BfK!J6yEc5LJ@~x*Iu1>wIvfWah7DBD$aA||g zf@x$pQDmG3$(nq4>E$M_QZSH&Q2d2XlYf;Nj^%3X_yxugaAe{ea|hv!PA_3QFDx!X z-(g=O7T;+46Nw~$s<3MRWQFmI59Z{8Ez|9%VrUI>CKM${{2_T0L~LXecMLIBzO!-Z zE4IKpYY?d|x6Di90cAw^1ZaZJzdmB&|GGIpg&Q%3`{sGCmrR(zV0*#f-znSLSE3+= zpPjsY?`F;RhueFCavLz!JGZX!id4* zK_dy4V`5vXXIakW3<%s@LLyURxSM94K?dNJA`FuOcp)>a4T&|by&k<%P?QRjaprW( zkgi*!mpO}ni>4-;Kdm9Ye%QcP6BW_Wt-XLiIM+$wxGHw&l(mX92fKN$BEtn~qP!P5 z<@*{uJQ;%IT_{;FpHk9z+Ygw?olFh1V(wY&{({}EMy-ap?7{>fdR@jj-}Lz#jpq)b z{8{MV#7vMnI%;Pmm9|wxO&)S8#XLK#%g#2Oe@w=IoZ8bL5a{%j*A^oQ7yb7rrmvd} z`_r&tYh|mM+!hNxg~NC2#}=6Au1%crGJayn=8N4luSWA-`(8@?S}0}!Gvr1IGS0w~ zxF;NMA7@+t$$+9JaG;yuLcl^va8`mY+zVcl8Y`j6JrObdm<>T;MH8Z&O$&c2G;Zt! z5+U|~q#!e|eSpO=HhHLvS(8w1!&LpuTZj(q^G%M%Lkz?4JzAUIO8!}ZUjt&NOO4yz z`f=+&SX`b9QAA`CZ)uE~e-`FH%W+M()Cj+q*R6k&?%8osDip%;)n7N1I5Qo} zw7CEgNShPi90v`t3Bz>DQwYAa?)`@-_puOvhR*Tzq>TF$$SQ^;vy5adNIoJq7;fHR ziApAn*`Biw6{iD@%jByC!^N!dHjk9g3B(%~G<5=>&B)W2OEAjkHveg+l=UFc!f<(P ztfFPezyeMbbVqs;Uw~1x`JOH8a@vM}yM3(WO6nehZge7{(0Q1-{}(st8|zp)->~6- zgKEH-cFMQz;yRXdn68db9E!~AC&cnb>Es-QkFA^?CasCH(GeM6u}rcO-%7|IkJi{f z@972*dh$A4g%#RPTrATlR-U=uk3%+X+#@q@#z3rWH1uBj<~Bor72BdGn{0xP@v_@& z4jRil(d@e*)hD0fJG#?SdOJ0pfG|gYCbUJJ6Vp;*N{I2NCJ8W zUSZzZ;gKhrs~xa`L` zT<}BJTQc!*S$Kxx>T=s%9f4GDJPi@h267+yb3`1F1M~Mpu0v4}Z}9jic)<&QKR^r7 z{bEzM_{*(E#q9|b%Ogd%LjWS<` z$J3Wf_q))9uJ+v%RIpLVxBWnW8&&%(eYeW^a$|X!kR0miRd`UA{x)COU*PGb%8le_ zwVjEkT9;%YN#NdM#6DP&NT*`Wa%M_mU}Wnh!%rjMHVi5MpUM8ml?mfpJ2D*clwysY z?q#A4YJs#*99_SumcSH%X?`0TmqI-cyAIq}ausX7zNpL!O~lJ2k;Nl_ze3;XAY3w| zj@A;WuU3|J{Y*++xo|3WzF$y2`XVTUy>75NFZV?;V)eBJAm$N2Fu}aaKb-b9{d%)p zDRd9fsenWemJPfEQ$~KM+o9LBKofeaCg|`Bx2A_Lybz+^emGo&2w;cV5h}@80RZ`d z-s2@M5~%}Q>VMl1%lhnpciPaS^k?@TR1w@^V}+CrJ2Aknc;NYWgDuP?DJ#D1H0(7P zr&_5&1oV~?;yjeXnA{)~52+uDFtmmAn2Y4@E4Az1GqXqYYO+M>gCcvwg&s zHHf8f!-=5x1^04x;J#x2z}QqeNAJ3LRpdc@@%w_xWJ2U zWqBD!X{>#jNmk-QNaQ5Zd2*vbYTPf`yeIwjL|hguOebwOz3r|slE1U$9tRdCEOhHO z_n@X$vNd;k`iT%0vq)IF7GWq^GEGa`ad__>mR!2L-qvIzOFFvZT<~$wo+v=!47vF+ zRi-eQw@=PSPH%U~#Wo>hI|bSg_rj>`b;za9y*<(3DS^M~m{qMm6v0Y?V23TkpGXYe6J>Ioe zP;5jg7pnIE<>2aHdU4P{yMK_w)cLBZ%faYVG0eqv8wTU~L1K}|NgungElfSWJjLa;Ez?06RBRCzpSKnK{|p0%S#11jXd#Q~;uX!t^S_07E+yfQ-aH z;dU<0T>p5R8XI~1t2!Eh%l{-B!~aP}|C9b_b@KR+ME8r45ny6z>;f<{HMg|;MgK3} zB<;-X0c`(Ko47js*Ypn{=YQ}4DE{G)5@2F#_K&x#jg6e4tto&)*xuH`)y32aAZu@8 z>SPBHvbQk-h(ALt%^Z(cX|9D8c82-bDpq=?Y3^M#jW$7$t>0xT3 zVCnJ?bS+{}l7@bo7Ff@=|I_)c+fU zf15?^jO|SdI<^HdwA0_F>(NCnHkvtjBKn-08U0$-~Sg}V^=39Q#+S`)BaB_|2_YE zoJ>tUOpSl7uh<)NhghYzg;n~A7SC0IQ_sy9s8X*m0_WeP*klT!wgnoq`!wV~wqcKQ#B9*W z<~tTrQLkhC^}#_IZpcxZud!|#!tIcSAU|KL60Y5~I}Tc|YL=3?eja3$iIc_xB^O71 zWcLc*gf$;~sI`+7+tps}hH28*R^+EGgv&H@q?Sgq&Je}aLiYKta~Z)R!pXB*8lSUF z)aAT??~=4#-M$AyZ++yiq1XPk`NMqQdMu_C?&ymafT;bLlmmTbgnN?)aV5D5jtzvA ztanOL^d;UmbqAY#qmqc=KJX`usB;oISIk_jZ@)oPDwJT$GxE+3BP{f=JNg0##LWWU z_=R$G{yV%`sC+#q_Nbe2;j>HfHlErb60Mwn;a!Uu6&?0!nqJ$}r;z&9Oiu^CGGRFs z?GV*4zk`X9ugavUuFxWQ(DD;3i;y?_dEXvP&){iMkxI--Ez6-Tvb>rK2*jm_1L{>Y zLm1SBc7)p5`JMv;`b;5&U4RI~CnW(wJF4M0P^_yeY2OthSV~v_u3X@z5qKbXHh=+t z4P({lqa?h9N%->}dHlQNP?R+me8Dp##ZSC3o0)BvKF4}%<4qM>g%`xa?`ykTp!DT8 zaj+D;bJF5{0tcw|q>Vj$^kKxHC7vLMg;=A|iekm-oqk&9DEMbmrPgj!W;SBLNm$QW z$;xM}X2f5xbEnq7vR1B9{>HXUjbMI%TJ9Nn{+_Agfhv&QSSI-%>ck%$Wt&$L7fVP~ z$Cek&4>GH6jGswE)@E*e+FPM=@8A$V+ysFXH4jo9H}R5s)!>l|LO>8Re3=LjRgaDc z^krK~DUc8j-o`5f90Grmx(omM;zguGqYCXupt-StP9nqitS0$dtHxuXxZ1sc4bW1A zu`YwE8fxut1PUXhrxiQ+6aR(^gl?Yc%Zj^#YH~oWkk=%c8cN-z@Ia4663*tmPh)58 zYDWP|=@=zaMo{ZK_vqSm9%!#$MaP&FO*@Z{;p^tB&3C zCl~wzGp1dJ?rFpWVnrCg7O#+&Z~)tm(~*BcjniA3jFQO;m0qAA`$BJfgx4j8WvskX zrmI(;G8fo<$)mMvAxli{$iH!k5=@wd*WDdB*oR0S5(jzXBSUTycMXt#CULkk@!}Eu z;^7!+vVZYb_SAQsL9iNdS0i}m+n8qs8~p7=KFH%*7(%b#kCfNxTz|3lQV{SEQ~UT4 z3GW$c+6)X>bWzQ0FGM&tE|7TGiNg5CtPx#29TBu|*!|}HB`ysGSJsfJuj#m)5G7MS zM=J9>3b8OUkVyyP0rymYIhWw<(KrtB?@q=I%aE&>Y?4}XDoX(dV`k&tlNp;-RCYHt zs)CgZnC%3c)PZCqG$I#NMp4Eq)>8{%Am@chvPqP4JbxB%OzvruQP))ZXaj#a9@xf? zF2h}On(uDW@`7L6)>|PG;Tu=35~{)l-2tLUI1>ybpu%Smb2L`w{y(>yZ$*EYx@E) zO@L;d>fOt#g+O_Kb<6(I?^%1@OP(0{*+Y4kDSz-J3O@DWjPQXKdiB@AUmhLD%)A6M z-Jy*f@z!Il9-An%EJdl@7*mFlBvTDN&vEJy<1aD$f<%>$tI&KJE;@5)CqU zdUBk)Y&zHy<)XzNhu_-I+f1Qq5XYd=<6miD00<9^EM|#+3f%M`QtPVrw)dZ6cFjom5m45DsOkf7XXXoJCSGyg9mbJXWm>jsrs^S<(- zp@%-Ve1;sOCW>orA{Q(rr`j_kOHt#65WJhgR;tb^wtl>agqO4r8yX zM_vT)Qj7q9EWKMNlM`er^ks~*F(pX(25st427J3)r{k0)wq&T^3weKE3T)@2zC0XJ z067wd9a0|GK}vy#JPrIw;j&^Qi>$5$^)#Bd~iYgtoWJAZa?4HT08BH*%rb7b9)K=)J#{L&)8y0X#CItt~~ zN*1;7eZ$-Fj9SL=)2Ztu%mMmmu{ly{ABo){{G{*eU=m570Rs(}XYZ4Q|5EAN3PH{= zwCm)Q1c|ctA?DeIg2neJw)@P*uJ>MXwas;xyF550cXl_efTxzX ztn*=iutDn+VLnkwE!Cn{*XGa%jSFw=&GnOWRJ^FLwi^)HA$v>&K6?4?yDQ)tX{DXs zQlVtp)#(qOO|ovpl=NO?djEr@h*=;T_U)~_Mm6^3K_tiL0={9~pf8FIT$$Wvf(8yL z0Gqjlqa!6y8X6!KU4nV>FOwK&xz2UkPj!Gh!+g;IvQr%MF|`2=yH-xIWovy9(3zvTckI%<$Ai7<139 z@VHGW-@di?i3aBL2AQ!7fp;Vapcdw|IkuNaGXED-bu7z3+9l#+3-DtB8g| zBDuF3X4~C`{Eeer$MdJUi(2J9_6cpqDsIs8Ju(4j<%UgoD{v8QyEjA+=KD0#h+s1 zy3?R{JC*o#}B!T=N!>ud)YA+K|UKPG9N_deUXGmo94UhGA41~?p#u;4YdK_pv}M%LMa_>rDm8)q2oC9Bg_ufzNSgw_ z`t0um8p$_>>ZG+l12D|mA_0mkL z%p>(k4kB}A&-qp8mo2ZpUI{{fGr!K`Jxe}8%Xv5zQF`z`*^)Zd%f=G)(8HzSX}Nek z!pGlUmTfQ4teUT^dO0X zW$#nm^viqd1$7ZM(+D_;!k^&gA8k#n9&i|vU$rw0ZI@#NwmN9Q1p9%1AK>#ZJd9%E zLaG#4CaEG1*>gz03$ufNFuRVM#8-JF8FL%NqZF*P4Tmp79jHZ2=M_T)D|27%tmjY| ziIpKRWVa{R+t_=p4r>@^e8R|8D7LFqzjR)nsSBwaN6ACnf8&AvtYTfcKsg}Lk!~tJ z0IsG;q~o{Z!8}>JWQRIUOf%>U#Dckt@dbp_|3;UO0QoKa9>1uU`8adu8V?~TMSa=TA;Ci$(wGp^H9JwD+EMI zERAmBGlO;3;qUuE@dWYa4zGBX0U8@!l{!>AR|IAEdXvAOpf~F-Bl`9zQT%7?GuCL&#& zf8AV@eSRM`zH;hrk;`by%L+nr7zGU^ZjDc~)>HQT(#9$5E{0>t{m+taG1;N%_OY9j z6$ap0?@DF4-O!Agsi-vcmnB&b`~KK4Pv-{V zD{V52W7SoEbj1DhR@W3wclPW>Y(14*N|>}cjw55)OIi{dQLeW1Wu$Bk3p;z~`N^Ez zUybjVC6guRKWRGdop}=O?3j!;uYE)kM5EEs$z zx}CdXc$M*ldxJ(~^2~@)L+Bc#!xvoW=s9VBy7Dxl9>LKH#}jkQzZc7(uv@`}q;b}y z@#FQ${6aRzjn(cH{CW0Ixh0Uh`H_q6rbKW$cV6@xagQ z>Qfh|sUiI^=>7^!T>9nn?MsOeHgn^kK$fugMxfa9exoj2c-$onjUqfM|6t>Pk>c&|WEX7gz=w#iu z$pY$Z4{|5%ZK%+3M%EF_Tjk?38<*hNmWpKMTy=M^O|Fe&BD}2N zug0Ymhi`MI63&OILLA5ysyqLGz6gUhiuNi~DI1qlAu__oGxj^hk{e-Q;I8t6@<#U?`R zy>mu>X~S6MdY2$9&h8Cik`kQg6ZDVe=t#onS^AM~pj#QP(pBc)xucbTpdH8I2HC`7 zNPG}R91Yl~6)F=MV_Ss~50V_WxFy)9TjUQae5-&{5>Vr2hZx5Wn@%uS7t7%v;N(Jh zo`l0X=s4`b8W8qn_4etP`bsmzi|fG=62x&llN6m+(8D<%WcrZGxWwiIM%Isy!5`xT zQzqJvCKWPd>8(+R+VhWpqGrfHSKTSei}WF$C_a-H%O!;Pv{`8y{oh&v@_ub5kE$+_ z#1;W{EXW`=pVt+shX@6;7<*pnWO<5&Q=T-ub#UmC%GA_HGcG9Y7McJOL@ zFY`48&{S$|d?t(181lYZJZ(8RaZVt`#{F|+>>v}a9x2cOB8NoYZi?i7r@J(CM3#np zk(OELo-GUGDut@1fcba_52>$w##GMd8mX8WJCTwaFDEeJIv&ay`K55j1gQ;GHbfGb zGJp&j4m-l{>=$y6viCRz6<=|iAl|W8>kVSj? zw%QBLP^WS5;~5!-2{D2L62?%T|0!=2?!EEvA?r7P%5(*G5)ILtED%=U^oZGgR^Cff zFz~n!c4>iZ_9avcHkC4vAV8QL^>9luw z@RR0;!(^>`{;sEQDk{@-0?EyOWE9cLbK@g_iF*u(dsYPPY!Y; ziCitpv-F=<5`*wAJ(x_^{!!hJK|1vz+c)$J)4CmQ$-80{iz8h~f9q^*iQnMXv0Nj+ zh?ZZd^Qm%zjIYxFh-~>TS~K_XLGb&buBxI_x9Q}pR%ZQ@%x?gmX@z%7U&3Fk5J!i9 z@9;k~l+kB`1T?;NZzk)0TwB=96wk{Q@c=>HYh1 zD4Vhzw8bZ1-)NO*W0#6VvU*=1OWRlM#zNtNzJ1YU$JwSNDKsX;Q_qzhT^=-lyjl4k zU~>5ZGL1Q7xV;;yHDDp}OrdLM`+J{slCiutM3bxfOM`)11W!m*zlVGoBXAtDSfc>5 zoiXe!=yE7x^B^MzXc!@7kO!)Y@KjGUdvL*N8QiSauBn-Q!ZHnR54f<62|Sk9T(A2wC5MoamGbvQ2`u{7jT@X?2z6|< zDJ}DzFpmAe*icT=v(6GoAAVURg$!28H_XFPA_*DM7rn>})eBEivv9-rkYW6_q(zG? zj+Bp3BE|8*u~D4wfp@%cxutU9cB)Ybx5#Xql?`F=rQ~I445$7&rCGv%)EL*wg$IkL zky1X2`pGRwAZSnPZk{i{lzeE9{y9>Na`}jT-D|R;j)-O`l*X^-84DAdlYWngjsz^L zSy2`i>OM9aVjG4+z?ufK8&G7zAgSGssN0_&U@S%1j1r>>B6()5+cekElOi&SwV4mg zU}BuNs5;W?Neh;pVsVXsJ)!Jp{=b;c=+;cyv0r4jW&s03FFmWlh#Jl+@$ zr++&Vn!TDk7xgJOW+Az-@O$3P;x>DxS3+q&kEU0jX)y=f)__MS(r{I_cwb_G-{2{&=w+O{we zx1uG{j-n78rp`s4yhua>$>TMg zsKY9P;J3P#sbe^ClALO}R=~9Jc(6@*vo5J630}p`ax98fur)6x->HVF!?$Q?RI>3H z@z(z^>BU|1pjc3|Z(@)qxHjDwsU3|ZBMG$(K*(+#BxbaKMdRbbN1hEE;h~4vM0;6` zczFcpN$2&Y#=U%(J`06KB>CLfn3*xwVQk8J5(Jf?zg{PhYF1{}|0Y*}tnFnw0=Vc( zKdQVy19c421)M#g$4(hkk$A+=F40NANo?jv7@j~^@`bKw7u}J>O zSk+rX-7fflTm%7r*u2~5cw@KOni|ejm|ehn9jJ~V-%u!}<5JP-@Sg$AIrpNIOe#Zpt`OO3yR4V{WIjJ*|?D~C?0LX z`x2(1&lAe$mz>Dy^W^>;RSwNW^2eW^#6zNP|HGceO@PMXCvlFjC%CI6Mr(uJ+2PhZ&P9u8t}JQ+Z^_rY^oYb(0A@hs)mm#C@Z zC|<%Wz|2)p2&Do<GdRt1fL1OVby zddK-uvMb35%rhE)Z$GlwGh}A|;^stW^?;O9MQzB4YHPU5!=|%}-i$P@Av4pr5-E3E zrp0(Uo3Jz9H&%!gmDwWUTmEL$O2X_A#l<~U{_}VKkDc(_5IhUsnu6HcK<3m?5ZVlr z1n9|y#SF+ef!6|ispd!ZsWxQu?}}}IgyCPoei)NpUTxvPA)irla#^h%SA0l#VcI=e z$ZHu?F-%``m(cW)gQZUkF2Y| zr^66eMV3eqn2J*n4hseK;m#3jfA$_Uh`ke|Ve_{k#qZ(|na#VUqF41fbBvm%Q|KHVsJ$>~tA+fQMA4EE zg`sE1(g2pgrJeph=~2A$R_?riBuciHyF^;${6L$TF`*gm(tF3J%$R`1mc0 zpG{s#`qpG17ApO|6x0_?kGPs*PKuE(kv*JrarW6|3+5lDeV!K_LKGPYr@^=`ECezS zBGF}M9OTVt8N>oEOiy8d%4EyVw{cUnO8(5;QFEG%l3>tt6zY1d%OTyCVZ(6yU#B)w ze$KYZ3#`v|V||Uy1{mN845~IN9qFn%qGX7`+F7rKhy^yLsZ{AJ^o7i?%d=ytE)E)j1C*gQdr zZ9Y@wv!`8T=iEhUIw_&R0%B3ag~d%UyNC$MTkxwp-*GIw9h_PtJfjkLtkh z=BL(gO)F^UL>BOJHf^4Lm&IJ8{tv%BPZI=>4laX9xMuo)!yU@4D4H{W#3OC)gNY4L z&{K}LWs=0-KD;%{f73qgr~q$?eG$du@hZ@`(a;TRcW}~*A#~pTtlGNNk;^$G;Cj1p6r0}mlr^#akD}xkqq)-J)YPca=7N8YB|^N0DK8eQO3;FpbZv9;xr1QJh1J&E zXPoJ2j|#GX<&8n-I5s}1Tm*MVT2q8M;x-dsOD$&)$FL3f=H=}dYRWnoxECFN;r~uc z@)m_LuMGJ+W3QAIDFJ*jbHnkBbwou8$|0lP_oH(9(ToGtJ2N;#=PAI=H-zTw(&rP$ z!4D#za_`ml9DNT(ZDO1ZbLV=6bIu(`)29U~C||38PmwC`NNyDgV60JF_B$kCS=LzGM^nSLB!&Bir^`0=aNGTBe)!y?s@Ic~L^2~Z-S2On zW36z1^P0`ZJI`E_MQ8Rd2zqRVF5%sY|e~zDDiw$c+c);9u?=(z- zlX3UX$f9u!2Z9_Z#q~Cj%e^@z(rG?rJ4~%Mlo2m0ME7S{d2p>oK0X;E)AeJ4Trxu# z17fEf76_pqk5y@fHBtjXCI^7-dEm{@qs^L_UR)oV8?hY3}*VUhLg%L){nyO3e~Cd#g4WF5StG#a9ONLU!|f(%Q6*t z9gn6A(!>_C-A?zJ5*>gt!DEd>{&iSHZ6v}>18GdHm>?ggN2Dfm^5!D>dWE`UzO^I< zF@P&}sm%bdfH>}-Qe6v=e`RVgYos`Thu<*);NcJTcXDlJ85}=w!jmSQ?`2Z>y+8{~ z&hoNn)OaXeJ29#xn=ToW3_GL<;*47#2g$MJ_~^ia0`RTChYlB4N&EWZ0~Y3|x6E0* zP~wFXvHPtGqrZx+`dL_79f+^@h(B#%MJ^M0Ad~CLZW87jA_Y$M_@I_hx)9TU&)5lS z*07S9hyuq-!i8#=Coap>UJe0-fM*cRGYg?R6>_iuas)T9WM{*h0F~V0M^LyB-FN@9 zFcl=BIGEszvhFxW-yO1x>Z(=wQdx zfHJ$tmf>_oj?(Yun@FEG9N{#7?tn`+l_{#kB&u^+zt4r<=cC91lcVm=|KS*&$y|C2 z#ZJ;XFaj0D3CWU@i-osgdK_+Q9`So!k0W4Usra9YNGpVgR!^Z=L%@O`!^RBP5W%3;-#b<#&wOm()(=Aq6IikRS@|HSCEovbK z&ccAqg`5k;P?@tuF0V+h@Ah?kpx)d}4xjVZeo*oxEE=jX!58JRP=MRX2;Y9TPIC%( zE|6NJP&IAnK9TIqdBix4b=ARpSabVgK@wfvDDL3Re5X}^UgJ>Y7B!!l&g0()r?N|qXjg0jz0zW$HTVr&00Y}*gm5?~ z>xDr@Xy5~0%h%+JPE0vU-Ir zMDAZgSGV%?nADVa~ci-zoaNw4v|Rj{b6=t=Bq!qs1|Q;`mG={a?@JWaANj zBQ0l09?{@Z6>2iDin#L=9U(#=+rbLFh>`CNY_A8E8)6saJtM?(yl!|HWN4=y9{jb! z3|e3&tdDT`JIvH)n5j&BRI|rY!|Dq}dk#!zAonjh78efCO;EV9ClSqv1bCi&yEz)= zCIGx`KTKJ^gI1=0XvamtE&r_j>d}-1ZO0%GWH8OUXC&mRp0;T+)$BH|=N8!OeQ4Vi z;vtdF_r0=YUU*%gA1t{OLWLHK{QjT#8bPRWlrHNp+^X<(KH9x>GQEA_pn8C{d;Xb| zv<@}(TL9YuGyJXbN+9uT<~_Q6HBtF;KW3ajiY$eqNEm{D1TW1b(h^5ElV>i%1u+iL zt~MM(Hrt}DPgKhI;#FJU?#JYD+N=sWqIT60>9HXFaJdqYg?Q^iAF;YJoG(nm z4XM_)@%^Q&Vg#rewm2EIMz86lAvmbS&e;cN4_vU1#5hL_kr-C1AV0%;CHB7ZHaY3; zOBi;4lI{wSC)ereyuY_i0z&jt4TK>W}aZI zt3S_w8eSIMHBapf^`a(hXD@>ZQ;RXc-C&_T*DL3n1fc7h7gW^G0%@EUw$MhL~3Tg6#JgSdgcFfE8cxYIO^pglNSVq z{Nv*8x;%Zxm`NkgxZeA-O#uOg#{e5uaNySrD6Pb1#GBplAZ( z1%jVMiR4?gimD@7D25JRxmB<{05)?##(&Ob+{eDOB_AJ z*Qo6_TNBv%p-K802>iTRi#XwUDO>`740e&W*twiG9)-+1TxWN#%ds}0tCB9dibY+;W8&O$=R(f(U<=Bje#B40c z53nK3QLZo>++UkVd~aFu&v#cz4avifx*`R`Hov}pQ9;Cl7fu#Pz9Tw#SS1^O;k@f(9;C9g1fnLqr5njsmGTFAuD7pVeeR=P*LM)! ziYJlS>(i!rT{QRArKMw@v=MHtg8=^pB<9J)yDSFzG8nzF$C)fWgeaum#Gk}z!>@;h z<UQ#$NNggEbSiq7XfHqLZNN*o39uFc0s(LK^R?9YaOkqunu+)w9# ze|`hlYUOR2pX}_sk^2kGuT?gB-}QVTLEBdumCUe{T~eWZu@la(AG^xq3iHvj?`khN zPZY*wG0nvNy1+W!izzCWKDeN7i`~r z5Ch9z_MR5rVq9H2E?2WUeFTA)L?Trr8R!QEsHJngP@*jmJ$Z&wB+^pp9;){ z&=~~UrZEtTgOv#KBuh(k2?R}Fl4j}wsVd)mFF;je9~?+z^slnhmVv%~d)o@V8%LbE z_D#UU*(_Fp_ygd7=UMEQNXk3PK7)L&oeufzx@+d5B;ubnl$iAn+s8bN?CIZws6Sn$ zz={$?6oHHMZN&nR^3Ll+lyRA?5cbn2t_Feme?XQcV2II|N#b1|v~}6Fp{cli%;|ES z<^)ND=hXUS4fC{41ciP{^VNm(NfOzBaXYr*lYxLN<=8-fDcy-xL~b*Y_LQs0Zyr!; zG4R+D$fW{5?AVAK5dxu^99+KyV;5;8C(V_k*!H+-?C7EV4ZY_vsTF=%E?2Jv&8Vy) z!Gd^3V*l8zo@zV6{%krFc@W2zQvy>?^*BDhYh=>V59*)cp$Qo~rk2nyFuTblHRT3V zD~%3+v6A2FF|;^+eOOirQ|SA8l6Ux>=H^1#wF}|Mu0((r3)yx}19r zo{iqC30X?n{K)G(@Km39DS8{qjZEPnN=nz=gGU{Ia4mW6iUJt$tCXSLBfIbWzQQg@!6&^S{d3=e~v=+EK7*%iyO6>05iWOB<}4^y`Qr8Y1d)SHN00 zdR(E7f0bMN3&MR7P=Gxj=;3J)s(AAKsf78oF(SOs87{QMS~?N!6oqlPTMX!Mo>e2ysliU|KACaS>t~TX zaUOxp>fN#0*ek&q9#laJWa_q9Duo`EQwyoz?^-t9%%WZ-F;r+FkdH)~+nnIG^wa=Y zf0I|VwLIw4#clmiYQSki+{<#Aw@%5p88L;{Oip;cxw2f8WQp9{Y+0J;y4|vx* z5NXDUxkFDz`YqF&Bk|woH6YEuOhA-A{#-$o+;tfq&X&U1f_o|=D)!`OS7Zg^9aXm# zZ>%8Cu4(GMh8={rRi7nAbI#={c!R>rjr`_yT+6n{io>FGd}tnazCq4^rHUNtIc1h=ju0xLE+8Yd%(2~#l>g&N(K+ru)XXAX6b%3ZzAj|E$v4vv9*qg zTZ!gYe9g(p2I}qg#f6bPw37(uf5OrYYQ;l#bouv46ZH72zF@AX{_HPmV`lvwU5c>o zxUsue7Isx^LoGc!W&=eO9dhzkmACKxQkfT=65SPovPt_N#;&r_g~3|zqr;d<-Ct#u z!7r;Kd^8Tbu6sWUB41k(!k5VT19G1~>{9a_y%|*C0lp(Tn*)Fpje(d ze{Qomsig3qx)>WcVI3|NL%(v3zNn9TO#0kogvFAnaR++eKM)YY^KnXZXA0z-@}w-H z&Ft1sf>L>rYUsJT?sd`Vf0kj3u~vD}`!<6FE`26});*)vJf^ps!?kACf8Su8Q>N}NE~NKTYmq>o*1 zor@Qy)iJgePv3Gue;v8D(WZ20Rp=*Ii47+8cH_}yr`;pSLfNL2tnX((iO6YurFp3? z1M7N+oHUd_>uv`}cq%BzvOJ07r2Ehkr%(&Mj|Z!k7gz)aV)OllIe@Yveys(KQvnx? za-?*3U0}Kw2IhPPK^g|JUohwS0nM4N)_ItUhV+fh2_vrtfAU;&U`6v?d;+Uq{#%&D zcpQwy0Ej``mRI|ieMl&0vw0;h8I((IeyvE0Kyk6Un{^{H>(@2;E>Lv2Wg>swQO!Qc zolA#gee6oW`n*}u5ShAjJg%v4-(RDnqs#;a`?Vs$$^gHP_7dC42~&K=3dBv9n)?P3 zFU-tK#g_^@CQ{FzPbzpcfIb{iwZ$ zsqq}sy5H1SPE@LS3!-Im+iT$24L~D*BU7;?EDOFfe|2*=mENkH;9Sf`0-)BY_F@>- zPQ*9@a&G5R5;43OwBBS}{f_U;8g#B?ywfHNbUHqk<~o#9q+_DjQAz0vWZU*i!;`Yw z$|3OOLzUS%FM#p~V`eo~RK!4~PEYp5>x^!GK4n)`N_Uu_EpRh1%!+-r)jQLvV z8(=L84EWP1*JIs|G ze8SfPLN!7?4RXQIDaJ&S`@;FUfPpEc125yK48(cbCF>G7V`!Cs^oXHA@vY^-gZ$#1Hv* zh5Ro0LZML0C*LXg^rb1qAdVjpboL8S2wuOmt3llu0voa9ZE*%%J}GSI@_<1zLGijQ zB)5z+%E43NmlZX~7GA#q;>=lgs%+r(f5gE)w{%Q++98N9I}{R;T>2G}VLhn@7hI*h zL>Rb=4VHD)9@k?!Ih)5O7;k;_Ei4}o<#Sn35;oQC!MT|+)Y7EA0B2tNuKkMs`P!`| z>Wc%(;=vch;yNQ{rX~$#!^hCeR|(T!{H&1*4@yhDpE0(tUvu5J3MJuBw;z|Pf7Yqu z!UAFObcL+RAO7elB z5!_Gs9n^%LN#G@;T3cLIglltKe~i135|fJ+;z&5X7ku|xzj@*87dQIh7LZSqY9jle z!vkQ1FPcg#lf)wFUTX_!BCs2S7E;b!&oxJ?|D;oONTWPtH>z#_p2c=befr|cYQA}& z;bAT<6D@?w3k^m$tL7(P{$okHK|f<3$y=^HB$dmv5S5-jT#Fg6$1ldGf2f8-^p`O} ztI`_o+7!zE%ryxu*j0`ST#%ImB$Ns07b=#f9afMrW=R8r|7A{v#Ixe}2^*mxghlXk zdEavgj{vTV0-6rk9}k6-46@!j4asSUgZtANB)}gRhUsPdC8nMD34H)W?68GV1<&|c z7ItP1@Lve;y8jbir<@JXQL3B_;oXATQbKQ%UwbUdy~ z=Ii=y`GuT)d_}mOTE)Tqqotc19vy>7XSulQaoZ&6h(R-90;2=who*F??p^$k#Ck`9BB{8R3;cfBSgMDz=Th5h$`= zvx77HmCS?{1XdO1s1xhjuvlueWW$u1F(C%*H{b?uE_M2iq4zfJDMW~$fz8%!OpV*` zM)L{y2`x5G))il&aVHWdyduGeLyHzT&e}=5~D4A&hd)XYThPREY zq-jVk$I`K62kmXujnMoK|PS0Zm(OKwVO!R>_Q*a6gdVE&zB*R1JZ^&xHvd)g} zme~9Atx#0D=&kUfV)--sF4|L1jmO(u&?KWS&yl0f%|*9rDtuYx$V(GghoP1@`OO}s z$OsRljys3-r)U)>k~YDE54#iBzOeun2@99P1@ zpN{Jby@TcTby#aPO4in0{bM6!OQzW<3#xQ34!z2<@9)4u04IDu)%rmNciJ~fzq_R; zRFXK>wvIK3NuLyx;U=j_rOJ@2%8HhR2zh{o63#;vf397vE_rA~d;TK|Db$Ob>vnDL z2VjMeSL-*pe40UlWH?ZULLAH?56Lp^D=qSn9xQ_>v>u-mP#Xv{w@X=D{>-x)FXm2u zqN8yV)^a9x4W=4BRulklzmwG}e||C0=!do)D8SsIH%VO`d3h0eTf&EEJZMQ4BD?sL zp6h-ke}uGH58=wOsC>rHmO!GzSJ~Y8JEHsX;0#3{8!lsPCwQ@;ew&FPz=-osl>!m^ zJR4=OfAfyMFHmzFut8Bt8(ksB04`t`1o~F`c}qQD^QW?vRx5c#DagcD$+6FWz%x)A z6Dsi(0ghlyFF%R%d5eUI;kWRfH)TuO(BI+xfAYEsP6Fxi>EbN$MBi~?)k5?2QVVan zl3-p#nmXO%1=mA#=wb4lPYZDQhm{>b*o~a2P{$Ek(w^F78Q3P$kxx_)N`=ICWDLGz0IOOnnlO^`7Pmk&{DLGlY)fC)%pI-whIzf4dl2aO$e; z=UHK$g_ZVTLO#ukL|+cY2vx(N)K#9se?Pk-5seUuGO{}Sxu@*P){{ks^?#`W(*9l| z6AKs8K8G91lmeO?e5rhCS*O=qXdM$k`r1pr{%JvFypc%?or>y7QVrHH#R4~s7oNpi z@(2Kp(ggX)-1ae;D3W<4qYNx2HGHyD34#zlCa|BoTxa_JnW7BD{ju*%?*ON!f85dg ze1gq$IjN>~#l4S206<(cl>el*x11t6q|LOZUL@+--Ti8Nj!R@yhB}yrIOZ z@~k|vL8tpFuP$J92mpwK!i=qwe@lA3 zXQ7^nb+@u$YfL4l^{v-|KWoMZFjH=-+-LqL|3^UD+`g%}k#oJ{6maF6f8Ry}QW*8G zk7bM;K;}|$QV<4UC(h4U_AP9^l(MSx+m={)=|*qa8R3?wa141k7P2282BOLQ4dT7I z8kJ55zE6&^gD)IAW#%w6TFNh^9}w(^_pfwaOs;`zMs<(_beD4NWD_lmI2G&Ed{b5` za3DkXt2A%X;PIaViu~V4}8BZae{r0zSmMETZ8p-`!NOLv{$Vhn%Z~(mYkY~>5 z@g2l*=EJf_R?G;DyGGHFi_AIAy2N4f*nt!v+E3z@k6ln)WImnXPy&?NV?_f2Ei9d<4D)?SKgqvq=9- z2s4E`k**Eo5lN)crO+7_S1G}BNgpOZ@?)1%L%JeR_aYj~K72GTQ>H+@&phfCnNTVn za^hHC-)mQ(6)%3?cp-T$mSPw!Ugn}!FPdQ3u8~5kBBEfSm-V`I@KLgjc~;!RQ$^d6 ztr?P#Y<(-5e@;y>^usbrw%0-cc6=M}h8S>wh=!hR4upcu7Pom0A3bM0rJ#vs`~&=R zjB~|3!#M$0!$3$5o7TJ)B1i2=MnlV#3{-lF?ZlGB6d2kBbvsL=glzebGKTBqEiK6=_qp7;7vGU}T1wT$mYWjn zCl0JQwM_30oj4s|ZJUbgH>P<*$lb-X1sfrI+L>BVLnd-$T(C^%NMwvI?Vxj8ToLf? zHL1X#;GiPrTfo9Ec-@;;I#bg++PV{zKi$YQm!E9|DGxUaFHB`_XLM*XATcsGG?#%> z0v7`_G%%O(Z38ENZMkJoC0!CNin}!KaBz2bcXxLV?i`%P9U2;Uch^Rn#@*fB-5ZDZ z&CH#-aU)*TpOlr6E7#7bii%B1D&^z|((rZ$vNEzVvG4)ZrNnetx!HICEKKYOl$7GG zKvR&7lcR(w2*?M}23i2rfzAL{HUJw73o8O8K-|gM+ttQ@${GZqF{k}^5TIpmYGLDG z;|kDnvUl>ZF}DT?czAe-c(}PUxw;E6{Zph41Oh>c09`@<5VLf3 zasVhwYKTgIDJy9JB*mFE!~v#`761jAf65&}ZhZfsf#zmj|C){g0Q#S0Z~8yW?0?q( zvaVkLv6v88SpgO{<{*F>(8|UUf%#v$$vRp(0l5AXws3d;Z|WaHZvXHD(EOtzEx-b3 z`48IN-d@Sn0SKTGcXDuc2LW9HicS_lS4V)Dlf4ChK++2YbhH3k{1To|mJ+4^-x~ZoE$L|PWMSiI1yBe5qo}E?#s32TPOF&O{AY*$ zOXa_RI|X30Pvo~ieV1l*&q`8H!6R(NG5{Jgsg5s@FVgLF-aXKYZ9EkA|j90(`-cOf3XI2u4Db5x+u16PXNhU2uLOYBh$ewsGSr9~5w0>$gGndO>yF z7R*9-SQCem%5-FSj&8yV%2!IW)Q94KlgNG~uo@pZeD20UpwTq_!ow%ki&XVaOIFX> zqjFiLUyg7*32Rc;3;HEGfUW8NQ!+YMUc9vD8C3+ti7F(S-R&!iY@`^gcQW_GG)&>^ zU8*1=!h76}jK}}YuDqA8@H4d$>{VxA(K;69;m7Mu5g*F)r-8}*Ql3upAGjxfW4x$YNq)fRMVT^j1M z^25f%C6~VX!Ki;YBg}yhXvOq@MwMjsr360lSR9B~E`KI$e4*0Yzd2^+%tlycHu!1r z$W$yWMx~r_!K?O4@VnE&BB#4P*X2F!Zul(8r3E;B=j^P(HeQvspyFH(n|$WwRKu-N zFN6DRiC|t1N-b5>+N6o$3uvIdA=_Sx+XJ7Z%{@+VDl$1#3O9@w%Dvr1hHAfr#6cgWlV6lDjR36U|t$aI}xi7xvCePeG z=;gy_i~zttzneF7hG8S|EGKa-_$ZiZ*~2Y^DZ*uL7KHE~!OHgG?wB{F%xgTZo)yO! zjGR6NoO7orG+;$0+SS5;`wDXzNvV&J&^;4U6Pfb7{Sl;LzWTb~ZPHcpSF%k+s6R$F zvq+mI{av5nu_FHy~wC>{hpH98LDCKMN6Y7a8W~Ki% zI+mS9M?3YUDob-bvWkOU;14L03>-1q1<c0!r%FJ{Ny zORtJ*F}pkIeOK-39Mapd9JGxJC>@q`_Vi3t3E!=h=5$HZNz&g_XawQ|;9?Y`$BR$G znH_)VYHUa!6)FUaR?5kH*k2UpHVU0XRpq^|jELxebn@>gKr5NTHSH6HKD-WWs}X!4 zaE2S?;VuF1MOQ*kzLPb!9Ym!m%vHb~ofD&%w&i#;+JFr_2wKy83vb_SBr*}vDzj~) zi7%=`{$?w;ze6L=-O5T}G}of#OOAOt-U{71rh}74OYFo0dU;sYt5RDe_|r~z?LCpdvKlVo237pB_&fT9S|LT&J_M zC^T~zgsHU}WY*NM0o5H46^8gLEU|BSxAu;KK|`dSZ_ zX#R4zt>z0%c;q^BUDiTa9C+|xSF;j-`{vWKvpY+=(Z5D4qCIA%8-7zZ$ONEkT zNZ%jG_ZdX$aldxq0k7FN`vZXFAMPEXlAWNV3cdEShPOr~{(hAS>pjy~*v)De#>OLm zsemRwpH!Ayh*exY^x+eJw_fB8CRxWAlQwn5l7tUp^HbrHKt~65DD+E<)}QWwHn@)W zEtcn`YDKw19c%219&|4A)*W!8H>t(ErwJ7ow;-vP5$8Ej+>1|UbMsDTqostNjPrTS ze41th1SM^tb+a<|@*noM!{0f;;$21M_=bZd;}&P^5@-?dz?8mohALpBGJm=yB=LUx z@chuXzMn|8vg-jd%P1+d7b81=0%B@}S)8WMr$GMmqWsUh7jn@GneyjNPTb&`Ph5NL zX|<|(zI~dN_91>9yx+KWCE0~gC(^DI@%ux>n|96yx!T*k(k3ks>W28C>c!Z!Hz^8} zUT`~9#lM!*;nz~u2$e~5KMawWA3E2W{iIbl%>+4#)s??BB8N^QoSjF1?fZkhBPJnF z%cQNmVaSoH%k?*H{w*Q_w?GA0&g^ew2o5(FT>f4(EiSY*RMkVP3f25wFC>s33q*ji zrKbxx{awjVaT@BS6u~#@N@aVr)&irbj=u5R@1L*B^uC%t--SHB$I5J0~i{91<;5L}({1%h#w-)?Huk{l^o z>F!e9icrEMnX8%OW1=V~~f9yb)vhA72ZH=3yMSD?@nw^TYk} zpl-FGh04%%iAdeJ2iqcsDg+cPgrktXmLfTG>M{e<)J&r+aNS36lYdE}a%<1o(Ky_F zwPEh&?+H4KAK4BIH&SzljC!O^> z6-F&)oT2|#juJ9>V?D%9^A7zsn@;2Y@mO$Nvw1Ir4O}X)I;olfew=P>Clk1TgVyWg95(F zKCe%LN&*9KEdvsfv3-M0(ZslB@=(j z4OVVSnxav-8VD_p*Iot#!Q@srM%~-ElUL=7euoo9bY^nYt9@ z0zu@|RNN}3EA3%iNMz@Y+$UB{l`GVH969-j8yTH{nNtUI>%as3+x6FO(fCi~49LoM z>{A+=`c?6SP%|P#@a(0r>|@dkw4e~fW&zKj>~p&OZARGUq1xon=Ar0@W1N8GT1A_* zaw}W*2M=$`EKJEY>n^^7Be2@7p_OnIRGQjvr3kMK@Ey7^by~eDChn-9c?hMX5xFf_J}H<`j8<^(nGSF`hlWkBS`YRCF8vlc^SGb&9HI zL{u(w1Ow`qH$O=8x74fEyPAFcX!=;veXcxd=};@1-2U7`$nx=Vu2D&M5)rz=B-3UF z_W6BTJ~paihd?fBL|}$NV$X0srRJ>NYXjN5T+RaTyAht~`<;JUBI(PXL^8F$ZlX4S zp2|x7UjJGryHP_ABwT^1c(!3{x*uAa9~r7Z9C)Q_1qp8-+@?o3bF+Motcijd#_3Iax1M+cR?Gln>A6T8vEoM@yQ2$7xe1P%ZbDn*V zydO`^(kWMV$(9hOU%fCP^siD!`Qtc$w~cfk@5PWrXcY@jg7uA@!~a;xHrT0($-;tu zI+(*QCBRP?jI`21-WwxBxyh5J^UsqyK&RyrEh{z}w@tU83`EsDVfe0R#cUA8zBHx1 zyWBae$+-uHNtc=!vctOC=zAGRu&xPtQ8LCYZ&@AC4v#@&O*f|=dCuYXa}$|=`!?`s zP@fj=q*dIeiHv2gEd0&~P<7>?nlMehvJkv=->$}B{Bv5yg;FQT^0#CyR-g6vt2PTr z)^D3wu2YnF>61twtiqL(jb}qsB>YgD`Vi!@AELdkS?wmrXaunkdvw(%oG z-co+jyIljixZAXIP8IpZ93ZJm#B1$E(E^i|fUo!eukX-tY z7?_@q!-l?Q&Ls>!mBm;gYK9KkdHlhMW#TH7Z-;p5oRZm& z(S7_X1@CjY+xD!e-TMe}W)Rct;8Ks&y++!@;3Xx>`haOZY3ds~@KW8DI1G5xWDoRe z$V2#pBbl!t8|T7#J;kn0s>^z*AgCF}WRwC~`@$}d?r@@MrZM|}Pe$LGS!9X&k7K>z zmg(keqdLqmlM!BiPW8o332#EeW7*ZUtLyOQtZUzi^$^QYt~N&t_JV7p0iThnZka zX}Y5Q%e;o_Wvn+MjS(s$Fqk;gDVNZ#)?aI*ofM)GK(pk3f(GBWM3Z>4S=`hgUeLuV zQBjmDKo&Yh!lqoo$hqTX?hab{LHWr{)@?rUy$4s%hshK5#t$2%%s7U!r8wW z_ICx+DRVG1fa56UOohD&()Jv6lyy z{R$23?ouPPh!WP6j0A;{KsxXd3viPBj-yGX8$-nd%VLTxc|W`KQ=kx(ts%xE^V=<3 z+V0COO(B?~jQCY$hKZ>?rKozUV~44{?Ek8|J$?Uw&|ad~qQG|9l5zU34YJl7_NJ(Y z&CT-Ob{SGOvuN{0h_>xbp8G~;}DU zTx+)O&i^59@3}-4a;hmb7~etvYXKIi!^uDkUL5ctK+hSUKI`<)YlR@g*3WXMao4z; zwPU4r4x+0%;E4vT+4*l0%_6GuAt?p!8%XDW6>VgVExrR~f?1j%}%z@U0mEcL;yofG4#m4k5;|W(J;2{Lb z_yc#%+~&+c>0&VE$Qyp`YIBgQy!M7p4tP;Q9L zZ=uC<=>-cKi(QOBPABv>&p3yS1>^ZcsE$V*YW(Y$cZoUcIEIX7qs&{l?T)u8hhXrE zh517sI|c(VA#0672u*doxmGQIllwImU;IcAuPrHEQ>V7t#&`PT4?oZ~n|p9p#n!wW z7rks@R&3^E#k+3E@_|RX{|otp_C8Hi@Wn3P9U>(&DW04}9ha}CWq}JKdN_Yji9|Qj zw%>r-A{gd5>F?d>(bi(H(Ngp~WMgA&YjuuE?>vr0v)Ii6a`HQI30M+;ig#)1M@ckf z{b2P4q&U59CY{xHFg}JbGjWo-QP- z@*gli#UHw~uFT6XyP!AgVSQs|V1_WoUWPW+t#w%y7(s|f7zBM)jYY?0RWSu>$0nLKZwZ%ei6iEhW-KDc@(TV; z+`qMwQt=cIZ`LPjsVl}bhCDHt7Y4^8^f_=GH-_baKcWFe$`h1?+N4ZJjUbY6DYY-?k6R0U8vD5}KyS zH#!L%7>DjE#Gh3d5SlTnNJs$ny+=uR<0t(pwXa?1f*b3(pQ7UA;P3_p&x#~Qloj~iXWEqEu&Bs&x?cMQS16> z+X~52-+dou-RiA6TL#f*Fp+hCI%4Kv@!uc;EXoT`I!S4y_U)$`U0-uoTeC?UEd8nF z{w#^MrdpQ#iDcz&@7$qp!&P*UG(yY&3Kj4he_rN)$AI%&ZePP(&ZW`sX55vB_doE1 z{uyVm@6M9kri0_h@Tm2|+0Oaq`FurwwlFTI zuESP;T1CVYR^X35^;s<{jSPw%+F+y`ze!5DI9~iM`#L`J;UfpG#{zu-tdCcV!!p-; zB}YIc(gVjS!ywvzxM-KOu;)$E_0uW$-YMsf7xTK9#{m8Fs`>|p_3}48c^>#S7 z5ea-DV-FSUmzm7n)qKS%$hGoOnpC5g!Z!s_r%?8$k?_G zdP1fX?HX`pedpP31ASs==Zvv`${Jls#B>h=2JyBrEy$=o6CBRuCTbpWnS3zM8bEG; zf1ky&((5#r9rH0@`>m2Ht2$jcX?IMMR6^ZzSFJ_BE4}nWFre$_6cfb-_v(h#?g}c)f0`3c27(LCi36L+}Qk= z{?M>HHJiW)iQTs>KjPm3^DmnsVA8XHm3tNg(NTdn(Jz6P)_E_}>BsjAQ0$2tA+zfj zX7>#n@8DhQ;MP6{vt5V*GF%m1?P8?YKtbO2GV((Bg9wtjg7DUI_m`y1yNU#bLFSfK$)C5<7*vPa%!kTT@`*>&frc$N4lDq2rnh;xA$ErV-*#MW5NJ>)hFoP z?1;bCwOyy(sXLWe5g8*k{5;=(@wEuOv?oRWVBR$kcw8iDl6t%Tk?|A)UC};eWi+&DzTy6bIVECCdPgbC!LDja~D9PhMrKu`&)k z!Dn)GR8oHf)tYDoD6lB%ihj@{uB0qav9^VlwNd0&y<0Mu=$LK#qY6!wJi9~3Iq>$L zKO&i~7OpRX({C<~wii%>pZ@csvK@F5HJ%q~1Cc@5vDCz1R9YwkS;_ojJ*bgY>5r

=D+lm)Y&H*yF=x?KJrtjScz?>7y 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�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 a|M^2HBj@0lKiJv0xwzmcC?pgm;r;{7IAq!Y diff --git a/docs/Manual/manual.tex b/docs/Manual/manual.tex index 75b0767..d243e1d 100644 --- a/docs/Manual/manual.tex +++ b/docs/Manual/manual.tex @@ -10,7 +10,7 @@ \usepackage{graphicx} \usepackage{svg} -\title{intelliPhoto 0.31 - Manual} +\title{intelliPhoto 0.8 - Manual} \author{Paul Norberger \& the intelliPhoto team} \begin{document} @@ -18,17 +18,16 @@ \maketitle \thispagestyle{empty} \begin{center} -\includegraphics[width=0.35\linewidth,keepaspectratio]{assets/icon} +\includegraphics[width=0.18\linewidth,keepaspectratio]{assets/icon} \end{center} \tableofcontents \end{titlepage} \section{Introduction} -intelliPhoto is a software for creating and editing graphics of various kinds. While it allows for work with a full color space, it will also allow export in a more restriced format, which uses 1 byte per pixel. Currently its in its early stages of development and has a very limited array of tools as well as a functional, but barebones interface. This will change in future versions. -Currently the following features are implemented, which will be described in further detail on the following pages: +intelliPhoto is a software for creating and editing graphics of various kinds. It uses 1 byte per pixel and is ideal for cases where this sort of limitation is required, because of various reasons, we will not go into. It has an extensive feature set, which includes, but is not limited to: \begin{itemize} -\item A barebones user interface +\item An advanced, highly usable user interface \item Loading and Saving images from and to standardized formats (such as .png, .bmp or .jpg) -\item Drawing with a pen with adjustable width and color, clearing the whole canvas with one color and drawing lines, rectangles, circles and polygons as well as flood filling adjacent pixels +\item Drawing with a pen with adjustable width and color, clearing the whole canvas with one color and drawing lines, flood-filling similiar pixels, creating rectangles, circles and polygons \item A layer structure, that allows for creating, deleting, moving and changing the order of layers \end{itemize} @@ -38,15 +37,13 @@ After startup the following window opens: \includegraphics[width=0.55\linewidth,keepaspectratio]{assets/startup} \end{center} -\subsection{Loading images} +\subsection{Image setup} +\subsubsection{Loading images} To load a preexisting image, click on \texttt{File} in the top menu bar and then on \texttt{Open...} in the appearing context menu. -\begin{center} -\includegraphics[width=0.3\linewidth,keepaspectratio]{assets/file-open} -\end{center} A file explorer window opens. Navigate to the image you want to open and click on \texttt{Open} or the equivalent in your system language. The image will now be imported and displayed. -\subsection{Saving images} +\subsubsection{Saving images} To save the current canvas as an image, click on \texttt{File} in the top menu bar then hover over \texttt{Save As} and click on your preferred file format in the appearing context menu. \begin{center} \includegraphics[width=0.3\linewidth,keepaspectratio]{assets/file-save} @@ -54,57 +51,69 @@ To save the current canvas as an image, click on \texttt{File} in the top menu b A file explorer window opens. Navigate to your preferred save location, input a file name and click on \texttt{Save} or the equivalent in your system language. The image will be saved at that location in the selected file format. -\subsection{Setting the active layer} -The active layer is the layer you are currently editing. To change it, you currently have to specify the index of the layer under \texttt{Layer > select Active...}. +\subsection{Working with layers} +\subsubsection{Creating a new layer} +To create a new layer, simply navigate to \texttt{Layer > Create Layer} and select the type of layer you want. Afterwards popups will appear, which will allow you to specify width and height of this new layer. +For Shaped Layers you afterwards have the option to specify the bounding polygon. To do this simply navigate to \texttt{Layer > Select Polygon Data} and create the polygon by clicking on the edge points on the canvas. The description of the usage under "Using the polygon tool" might help you. -\subsection{Setting the main and secondary color} -The main and secondary color are a concept used by all the drawing tools. You select them independendly of other tool parameters under \texttt{Tools > Color}. -\begin{center} -\includegraphics[width=0.3\linewidth,keepaspectratio]{assets/change-colors} -\end{center} -The appearing popup will allow you to specify a new color. +\subsubsection{Setting the active layer} +The active layer is the layer you are currently editing. To change it, you currently have to specify the index of the layer under \texttt{Layer > Set Active}. -\subsection{Switching main and secondary color} -An often desired use case is to switch the main and secondary color. So that you don't have to this manually, which would be time consuming there is an easy command to do it under \texttt{Tools > Color}. -It is also bound to the keyboard shortcut \texttt{Ctrl+Shift+S}. - -\subsection{Drawing with the pen tool} -To activate the pen tool simply select it under \texttt{Tools > Pen}. You will be prompted to input the pen width, just put in the width you desire. -\begin{center} -\includegraphics[width=0.2\linewidth,keepaspectratio]{assets/tool-pen} -\end{center} -To edit the active layer with the pen tool simply click and hold the left mouse button while hovering the layer on the canvas. When you click within the boundaries of the active layer, the pixels in the radius you selected will change their color to the main color which you selected under the section above. - -\subsection{Drawing straight lines} -To activate the line tool select it under \texttt{Tools > Line}. You will be prompted to input the line width. -To draw a line you now have to left click on the starting point on the canvas, hold it pressed and move to the end point and release the mouse button. - -You can cancel this operation at any time by clicking the right mouse button while holding the left and then releasing both. - -\subsection{Fill the active layer in one color} -To fill the whole layer with the main color, you first specify the color on the right side of the picture. - -\begin{center} -\includegraphics[width=0.3\linewidth,keepaspectratio]{assets/tool-plain} -\end{center} - -\subsection{Moving layers} -The layers are flexible and can be moved to a different position on the canvas, their order can be changed at will. For this you can use the movement options under \texttt{Layer}. Keep in mind that the changes always only effect the active layer you have chosen in the section "Setting the active layer". +\subsubsection{Moving layers} +The layers are flexible and can be moved to a different position on the canvas, their order can be changed at will. For this you can use the movement options under \texttt{Layer}. Keep in mind that the changes always only effect the active layer you have chosen in the section "Setting the active layer". You can also alternatively use the shortcuts displayed unter this subsection. \begin{center} \includegraphics[width=0.3\linewidth,keepaspectratio]{assets/layer-options} \end{center} -\subsection{Creating and deleting layers} -Raster Layers can be created at will under \texttt{Layer > New Layer...} You will be prompted to input the width and height of the new layer. Afterwards it will be created. -\begin{center} -\includegraphics[width=0.3\linewidth,keepaspectratio]{assets/create-layer} -\end{center} -To delete the active layer you have to click on \texttt{Delete Layer...} in the same submenu. - -\subsection{Transparency and layers} +\subsubsection{Transparency and layers} Layers can also be made more or less transparent under \texttt{Layer > set Alpha}. Values between 0 and 255 are valid. There is currently no error handling and this can lead to memory leaks, so be careful. This also only effects the active layer. +\subsection{Color Management} +\subsubsection{Setting the main and secondary color} +\begin{center} +\includegraphics[width=0.3\linewidth,keepaspectratio]{assets/change-colors} +\end{center} +The main and secondary color are a concept used by all the drawing tools. You can set them individually, by clicking on the corresponding color icon on the right-hand-side toolbar, besides the canvas. The left color icon is for the main color, the right color icon for the secondary color. +After the click, a popup will appear. The popup will allow you to specify a new color. + +\subsubsection{Switching main and secondary color} +An often desired use case is to switch the main and secondary color. So that you don't have to this manually, which would be time consuming there is an easy command to do it under the color icons on the right-hand-side toolbar, besides the canvas. +It is also bound to the keyboard shortcut \texttt{Ctrl+Shift+S}. + +\subsubsection{Drawing with the pen tool} +To activate the pen tool simply click on the pen tool icon on the right-hand-side toolbar. +To edit the active layer with the pen tool simply click and hold the left mouse button while hovering the layer on the canvas. When you click within the boundaries of the active layer, the pixels in the radius you selected will change their color to the main color which you selected under the section above. + +\subsubsection{Drawing straight lines} +To activate the line tool just click on the line tool icon on the right-hand-side toolbar. +To draw a line you now have to left click on the starting point on the canvas, hold it pressed and move to the end point and release the mouse button. The width of the edge can be specified under \texttt{Width} in the right-hand-side toolbar. + +\subsubsection{Drawing circles} +To activate the circle tool just click on the circle tool icon on the right-hand-side toolbar. +To create a circle you now have to left click and drag from the wanted center point, to some point on the edge of the circle you want, the circle will be previewed. You can release the mouse button after you are satisfied. Otherwise you can also click on the right mouse button while still holding the left one to cancel the operation. +The main color dictates the color of the edge, while the secondary color is used for the inside of the circle. If you want the inside to be transparent you can set the transparency on the side under \texttt{Inner Alpha} in the range between 0 (completely transparent) to 255 (completely opaque). The width of the edge can be specified under \texttt{Width}. + +\subsubsection{Drawing rectangles} +To activate the rectangle tool click on the rectangle tool icon on the right-hand-side toolbar. +To create the a rectangle you now have to left click and drag form one wanted corner point to the other corner point diagonal from the starting point, the rectangle will be previewed. You can release the mouse button after you are satisfied. +Otherwise you can also click on the right mouse button while still holding the left one to cancel the operation. +The main color the color of the edge, while the secondary color is used for the inside of the recangle. If you want the inside to be transparent you can set the transparency on the side under \texttt{Inner Alpha} in the range between 0 (completely transparent) to 255 (completely opaque). The width of the edge can be specified under \texttt{Width}. + +\subsubsection{Drawing polygons} +To activate the polygon tool click on the polygon tool icon on the right-hand-side toolbar. +To create the polygon you now have to left click on each of the corner points you want for your polygon in the order you want them to connect. +After you've all the points added, click close to the starting point you chose (You can see it in the preview.) to close up the polygon. You can end this process at any point by clicking the right mouse button. +The main color dictates the color of the edge, while the secondary color is used for the inside of the polygon. If you want the inside to be transparent you can set the transparency on the side under \texttt{Inner Alpha} in the range between 0 (completely transparent) to 255 (completely opaque). The width of the edge can be specified under \texttt{Width}. + +\subsubsection{Using gradients} +To activate the gradient tool just click on the gradient tool icon on the right-hand-side toolbar. The gradient interpolates linearly from the main color to the second hand color. To change them refer to the section "Setting the main and secondary color". +The use of this tool is very similiar to the line tool: Simply click and hold on the starting point of the gradient, move to the end location and release the mouse button. The pixels on the active layer will change accordingly. + +\subsubsection{Fill the active layer in one color} +To activate the plain tool just click on the plain tool icon on the right-hand-side toolbar. +Afterwards you simply click inside of the canvas to fill the active layer with the main color. + \subsection{Closing the program} To close the program you have to execute the exit program routine, which heavily depends on your operating system. Usually you can find a red cross symbol at the top right, though it may be different depending on your setup. For Windows 10, the desired symbol looks like this when hovered: @@ -113,11 +122,4 @@ For Windows 10, the desired symbol looks like this when hovered: \end{center} Alternatively you can press \texttt{CTR+Q}. -\section{Next steps} -The following features are currently high priority and will be implimented in the near future: -\begin{itemize} -\item Refactoring the code, improving readability, structure and the dev documentation -\item Improving the UI and integrating all the tools in it -\end{itemize} - \end{document} \ No newline at end of file From 00a7046bcd4fdd046ce29e9b403212b31f96cb23 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 30 Jan 2020 17:43:26 +0100 Subject: [PATCH 31/37] hotfixed wrong slot --- src/GUI/IntelliPhotoGui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 39e3a20..f09df2a 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -533,7 +533,7 @@ void IntelliPhotoGui::createActions(){ actionCreateGradientTool = new QAction(tr("&Gradient"),this); actionCreateGradientTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_G)); - connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools())); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); // Create about action and tie to IntelliPhotoGui::about() @@ -553,7 +553,7 @@ void IntelliPhotoGui::createActions(){ connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool())); - connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetTools())); + connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool())); connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); From 370955de85981dcf322572f6a073fcb794ca3100 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 30 Jan 2020 18:03:55 +0100 Subject: [PATCH 32/37] added to unit test --- src/IntelliUnitTest.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/IntelliUnitTest.pro b/src/IntelliUnitTest.pro index d389a8e..ae7efc7 100755 --- a/src/IntelliUnitTest.pro +++ b/src/IntelliUnitTest.pro @@ -24,6 +24,7 @@ SOURCES += tst_unittest.cpp \ Tool/IntelliTool.cpp \ Tool/IntelliToolCircle.cpp \ Tool/IntelliToolFloodFill.cpp \ + Tool/IntelliToolGradient.cpp \ Tool/IntelliToolLine.cpp \ Tool/IntelliToolPen.cpp \ Tool/IntelliToolPlain.cpp \ @@ -35,6 +36,7 @@ DISTFILES += \ icons/circle-tool.svg \ icons/eraser-tool.svg \ icons/flood-fill-tool.svg \ + icons/gradient-tool.svg \ icons/icon.png \ icons/line-tool.svg \ icons/pen-tool.svg \ @@ -57,6 +59,7 @@ HEADERS += \ Tool/IntelliTool.h \ Tool/IntelliToolCircle.h \ Tool/IntelliToolFloodFill.h \ + Tool/IntelliToolGradient.h \ Tool/IntelliToolLine.h \ Tool/IntelliToolPen.h \ Tool/IntelliToolPlain.h \ From 3bac3d85c433147e1edbe097b777ec24444ebf50 Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 30 Jan 2020 18:24:07 +0100 Subject: [PATCH 33/37] hotfix for transparence --- src/Image/IntelliImage.cpp | 12 ++++++------ src/Image/IntelliRasterImage.cpp | 2 +- src/Image/IntelliShapedImage.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Image/IntelliImage.cpp b/src/Image/IntelliImage.cpp index 3ff8b13..b37ee29 100644 --- a/src/Image/IntelliImage.cpp +++ b/src/Image/IntelliImage.cpp @@ -115,13 +115,13 @@ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& co } void IntelliImage::drawPlain(const QColor& color){ - if(fastRenderering) { - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } + 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_Indexed8); + } } QColor IntelliImage::getPixelColor(QPoint& point){ diff --git a/src/Image/IntelliRasterImage.cpp b/src/Image/IntelliRasterImage.cpp index 7fa51d8..a806616 100644 --- a/src/Image/IntelliRasterImage.cpp +++ b/src/Image/IntelliRasterImage.cpp @@ -23,7 +23,7 @@ IntelliRasterImage::~IntelliRasterImage(){ } IntelliImage* IntelliRasterImage::getDeepCopy(){ - IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), this->fastRenderering); + IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), false); raster->imageData.fill(Qt::transparent); raster->TypeOfImage = ImageType::RASTERIMAGE; return raster; diff --git a/src/Image/IntelliShapedImage.cpp b/src/Image/IntelliShapedImage.cpp index fa869e3..69013b9 100644 --- a/src/Image/IntelliShapedImage.cpp +++ b/src/Image/IntelliShapedImage.cpp @@ -12,7 +12,7 @@ IntelliShapedImage::IntelliShapedImage(int width, int height, bool fastRendererO IntelliShapedImage* IntelliShapedImage::copy(const IntelliShapedImage& image){ this->TypeOfImage = ImageType::SHAPEDIMAGE; - IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), this->fastRenderering); + IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), this->fastRenderering); shaped->imageData.copy(0,0,image.getWidth(),image.getWidth()); return shaped; } @@ -26,7 +26,7 @@ QImage IntelliShapedImage::getDisplayable(int alpha){ } IntelliImage* IntelliShapedImage::getDeepCopy(){ - IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), this->fastRenderering); + IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), false); shaped->setPolygon(this->polygonData); shaped->imageData.fill(Qt::transparent); shaped->TypeOfImage = ImageType::SHAPEDIMAGE; From e0d014b678fa2a140864c60dbf863268e50b379f Mon Sep 17 00:00:00 2001 From: Jonas Mucke Date: Thu, 30 Jan 2020 18:30:01 +0100 Subject: [PATCH 34/37] commented hisotry tool --- src/Layer/PaintingArea.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 9126000..91f8d20 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -285,7 +285,14 @@ IntelliToolsettings Toolsettings; */ IntelliColorPicker colorPicker; +/*! + * \brief historyadd adds an hisotry step + */ void historyadd(); + +/*! + * \brief historyGoBack go back in hisotry + */ void historyGoBack(); /*! From 95f4b680c4500abd5ca69f3f1aa48fadc7b34399 Mon Sep 17 00:00:00 2001 From: Jan Schuffenhauer Date: Thu, 30 Jan 2020 18:32:00 +0100 Subject: [PATCH 35/37] Update knownBugs.txt seb there is more to do. --- knownBugs.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/knownBugs.txt b/knownBugs.txt index 791709e..e17842e 100644 --- a/knownBugs.txt +++ b/knownBugs.txt @@ -1,4 +1,8 @@ history tool doesnt load polygon data on undo iff project was loaded -history tool doesnt save delete Layer - done +history tool doesnt save delete Layer +history tool creates to many layers +history tool resets polygon data to late and on the wrong possition + + Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720) Heap block at 0000000025422990 modified at 0000000025422A28 past requested size of 88 \ No newline at end of file From 817953d05818b90ea286bdad6ed8e19f80fa9979 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 30 Jan 2020 20:24:45 +0100 Subject: [PATCH 36/37] Moved Save Project Button to Menu --- src/GUI/IntelliPhotoGui.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index b10da50..08f53bd 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -389,8 +389,8 @@ void IntelliPhotoGui::createActions(){ actionSaveAs.append(action); } - //set exporter to actions - QAction*pngSaveAction = new QAction("PNG-8", this); + // Set exporter to actions + QAction*pngSaveAction = new QAction("PNG-8...", this); pngSaveAction->setData("PNG"); // When clicked call IntelliPhotoGui::save() connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); @@ -398,14 +398,6 @@ void IntelliPhotoGui::createActions(){ actionSaveAs.append(pngSaveAction); pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S)); - QAction*projectSaveAction = new QAction("Projekt", this); - projectSaveAction->setData("idf"); - // When clicked call IntelliPhotoGui::save() - connect(projectSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); - // Attach each PNG in save Menu - actionSaveAs.append(projectSaveAction); - projectSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); - // Create exit action and tie to IntelliPhotoGui::close() actionExit = new QAction(tr("&Exit"), this); actionExit->setShortcuts(QKeySequence::Quit); @@ -472,7 +464,7 @@ 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 + // Create Update RenderSettings Actions here actionUpdateFastRenderSettingsOn = new QAction(tr("&On"), this); actionUpdateFastRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A)); connect(actionUpdateFastRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOn())); @@ -481,7 +473,7 @@ void IntelliPhotoGui::createActions(){ actionUpdateFastRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D)); connect(actionUpdateFastRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOff())); - //Create Color Actions here + // Create Color Actions here actionColorPickerFirstColor = new QAction(tr("&Main"), this); actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor())); @@ -497,7 +489,7 @@ void IntelliPhotoGui::createActions(){ connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor())); connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor())); - //Create Tool actions down here + // Create Tool actions down here actionCreatePlainTool = new QAction(tr("&Plain"), this); actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P)); connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); @@ -594,17 +586,24 @@ void IntelliPhotoGui::createActions(){ // Create the menubar void IntelliPhotoGui::createMenus(){ // Create Save As option and the list of file types - saveAsMenu = new QMenu(tr("&Save As"), this); + saveAsMenu = new QMenu(tr("&Export As"), this); foreach (QAction * action, actionSaveAs) saveAsMenu->addAction(action); - // Attach all actions to File + // Attach all actions to file menu fileMenu = new QMenu(tr("&File"), this); fileMenu->addAction(actionOpen); fileMenu->addMenu(saveAsMenu); fileMenu->addSeparator(); fileMenu->addAction(actionExit); + // Attach the save project option to file menu + QAction*projectSaveAction = new QAction("Save Project", this); + projectSaveAction->setData("idf"); + connect(projectSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); + projectSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); + fileMenu->addAction(projectSaveAction); + // Attach all actions to Render Settings renderMenu = new QMenu(tr("&Fast Renderer"), this); renderMenu->addAction(actionUpdateFastRenderSettingsOn); @@ -623,7 +622,7 @@ void IntelliPhotoGui::createMenus(){ layerMenu->addAction(actionSetActiveLayer); layerMenu->addAction(actionSetPolygon); layerMenu->addSeparator(); - layerMenu->addAction(actionMovePositionUp); + layerMenu->addAction(actionMovePositionUp); layerMenu->addAction(actionMovePositionDown); layerMenu->addAction(actionMovePositionLeft); layerMenu->addAction(actionMovePositionRight); From 8577e6b132bf0559c58422b72ab687eded2a9038 Mon Sep 17 00:00:00 2001 From: Conrad Date: Thu, 30 Jan 2020 20:42:31 +0100 Subject: [PATCH 37/37] Automated Release Preparation --- cppcheck_config.txt | 6 + cppcheck_errors.txt | 20 +- docs/html/_intelli_color_picker_8cpp.html | 2 +- .../_intelli_color_picker_8cpp_source.html | 2 +- docs/html/_intelli_color_picker_8h.html | 2 +- .../html/_intelli_color_picker_8h_source.html | 2 +- docs/html/_intelli_datamanager_8cpp.html | 2 +- .../_intelli_datamanager_8cpp_source.html | 36 +- docs/html/_intelli_datamanager_8h.html | 4 +- docs/html/_intelli_datamanager_8h_source.html | 19 +- docs/html/_intelli_image_8cpp.html | 2 +- docs/html/_intelli_image_8cpp_source.html | 8 +- docs/html/_intelli_image_8h.html | 2 +- docs/html/_intelli_image_8h_source.html | 24 +- docs/html/_intelli_input_dialog_8cpp.html | 2 +- .../_intelli_input_dialog_8cpp_source.html | 12 +- docs/html/_intelli_input_dialog_8h.html | 3 +- .../html/_intelli_input_dialog_8h_source.html | 85 +- docs/html/_intelli_photo_gui_8cpp.html | 4 +- docs/html/_intelli_photo_gui_8cpp_source.html | 1887 +++++++++-------- docs/html/_intelli_photo_gui_8h.html | 2 +- docs/html/_intelli_photo_gui_8h_source.html | 426 ++-- docs/html/_intelli_raster_image_8cpp.html | 2 +- .../_intelli_raster_image_8cpp_source.html | 6 +- docs/html/_intelli_raster_image_8h.html | 2 +- .../html/_intelli_raster_image_8h_source.html | 2 +- docs/html/_intelli_render_settings_8cpp.html | 2 +- .../_intelli_render_settings_8cpp_source.html | 2 +- docs/html/_intelli_render_settings_8h.html | 3 +- .../_intelli_render_settings_8h_source.html | 33 +- docs/html/_intelli_shaped_image_8cpp.html | 2 +- .../_intelli_shaped_image_8cpp_source.html | 6 +- docs/html/_intelli_shaped_image_8h.html | 2 +- .../html/_intelli_shaped_image_8h_source.html | 2 +- docs/html/_intelli_tool_8cpp.html | 2 +- docs/html/_intelli_tool_8cpp_source.html | 35 +- docs/html/_intelli_tool_8h.html | 2 +- docs/html/_intelli_tool_8h_source.html | 126 +- docs/html/_intelli_tool_circle_8cpp.html | 2 +- .../_intelli_tool_circle_8cpp_source.html | 20 +- docs/html/_intelli_tool_circle_8h.html | 2 +- docs/html/_intelli_tool_circle_8h_source.html | 10 +- docs/html/_intelli_tool_flood_fill_8cpp.html | 2 +- .../_intelli_tool_flood_fill_8cpp_source.html | 12 +- docs/html/_intelli_tool_flood_fill_8h.html | 2 +- .../_intelli_tool_flood_fill_8h_source.html | 10 +- docs/html/_intelli_tool_gradient_8cpp.html | 107 + .../_intelli_tool_gradient_8cpp_source.html | 268 +++ docs/html/_intelli_tool_gradient_8h.html | 113 + .../_intelli_tool_gradient_8h_source.html | 167 ++ docs/html/_intelli_tool_line_8cpp.html | 2 +- docs/html/_intelli_tool_line_8cpp_source.html | 18 +- docs/html/_intelli_tool_line_8h.html | 2 +- docs/html/_intelli_tool_line_8h_source.html | 10 +- docs/html/_intelli_tool_pen_8cpp.html | 2 +- docs/html/_intelli_tool_pen_8cpp_source.html | 18 +- docs/html/_intelli_tool_pen_8h.html | 2 +- docs/html/_intelli_tool_pen_8h_source.html | 10 +- docs/html/_intelli_tool_plain_8cpp.html | 2 +- .../html/_intelli_tool_plain_8cpp_source.html | 10 +- docs/html/_intelli_tool_plain_8h.html | 2 +- docs/html/_intelli_tool_plain_8h_source.html | 10 +- docs/html/_intelli_tool_polygon_8cpp.html | 2 +- .../_intelli_tool_polygon_8cpp_source.html | 38 +- docs/html/_intelli_tool_polygon_8h.html | 2 +- .../html/_intelli_tool_polygon_8h_source.html | 10 +- docs/html/_intelli_tool_rectangle_8cpp.html | 2 +- .../_intelli_tool_rectangle_8cpp_source.html | 20 +- docs/html/_intelli_tool_rectangle_8h.html | 2 +- .../_intelli_tool_rectangle_8h_source.html | 10 +- docs/html/_intelli_toolsettings_8cpp.html | 2 +- .../_intelli_toolsettings_8cpp_source.html | 14 +- docs/html/_intelli_toolsettings_8h.html | 3 +- .../html/_intelli_toolsettings_8h_source.html | 58 +- docs/html/_intelli_triangulation_8cpp.html | 2 +- .../_intelli_triangulation_8cpp_source.html | 2 +- docs/html/_intelli_triangulation_8h.html | 2 +- .../_intelli_triangulation_8h_source.html | 2 +- docs/html/_painting_area_8cpp.html | 3 +- docs/html/_painting_area_8cpp_source.html | 992 ++++----- docs/html/_painting_area_8h.html | 2 +- docs/html/_painting_area_8h_source.html | 295 +-- docs/html/annotated.html | 27 +- docs/html/annotated_dup.js | 1 + .../class_intelli_color_picker-members.html | 2 +- docs/html/class_intelli_color_picker.html | 2 +- docs/html/class_intelli_image-members.html | 2 +- docs/html/class_intelli_image.html | 14 +- .../class_intelli_input_dialog-members.html | 2 +- docs/html/class_intelli_input_dialog.html | 47 +- .../html/class_intelli_photo_gui-members.html | 2 +- docs/html/class_intelli_photo_gui.html | 22 +- .../class_intelli_raster_image-members.html | 2 +- docs/html/class_intelli_raster_image.html | 5 +- ...class_intelli_render_settings-members.html | 2 +- docs/html/class_intelli_render_settings.html | 10 +- .../class_intelli_shaped_image-members.html | 2 +- docs/html/class_intelli_shaped_image.html | 5 +- docs/html/class_intelli_tool-members.html | 2 +- docs/html/class_intelli_tool.html | 71 +- docs/html/class_intelli_tool.js | 1 + docs/html/class_intelli_tool.png | Bin 1396 -> 2298 bytes .../class_intelli_tool_circle-members.html | 2 +- docs/html/class_intelli_tool_circle.html | 15 +- ...class_intelli_tool_flood_fill-members.html | 2 +- docs/html/class_intelli_tool_flood_fill.html | 15 +- .../class_intelli_tool_gradient-members.html | 123 ++ docs/html/class_intelli_tool_gradient.html | 569 +++++ docs/html/class_intelli_tool_gradient.js | 11 + docs/html/class_intelli_tool_gradient.png | Bin 0 -> 451 bytes .../html/class_intelli_tool_line-members.html | 2 +- docs/html/class_intelli_tool_line.html | 15 +- docs/html/class_intelli_tool_pen-members.html | 2 +- docs/html/class_intelli_tool_pen.html | 15 +- ...class_intelli_tool_plain_tool-members.html | 2 +- docs/html/class_intelli_tool_plain_tool.html | 15 +- .../class_intelli_tool_polygon-members.html | 2 +- docs/html/class_intelli_tool_polygon.html | 15 +- .../class_intelli_tool_rectangle-members.html | 2 +- docs/html/class_intelli_tool_rectangle.html | 15 +- .../class_intelli_toolsettings-members.html | 2 +- docs/html/class_intelli_toolsettings.html | 42 +- docs/html/class_painting_area-members.html | 56 +- docs/html/class_painting_area.html | 451 ++-- docs/html/class_painting_area.js | 12 +- docs/html/class_unit_test-members.html | 2 +- docs/html/class_unit_test.html | 2 +- docs/html/classes.html | 60 +- .../dir_13830bfc3dd6736fe878600c9081919f.html | 2 +- .../dir_4e4e2e75df7fa6971448b424c011c8b5.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- .../dir_858355f3357c73763e566ff49d1e6a7a.html | 6 +- .../dir_858355f3357c73763e566ff49d1e6a7a.js | 4 + .../dir_8de6078cba2a961961818cf80b28fd4f.html | 2 +- .../dir_fdbdd9841f9a730f284bb666ff3d8cfe.html | 2 +- docs/html/files.html | 24 +- docs/html/functions.html | 2 +- docs/html/functions_b.html | 2 +- docs/html/functions_c.html | 5 +- docs/html/functions_d.html | 5 +- docs/html/functions_enum.html | 2 +- docs/html/functions_f.html | 2 +- docs/html/functions_func.html | 46 +- docs/html/functions_g.html | 16 +- docs/html/functions_h.html | 5 +- docs/html/functions_i.html | 5 +- docs/html/functions_l.html | 2 +- docs/html/functions_m.html | 2 +- docs/html/functions_o.html | 8 +- docs/html/functions_p.html | 2 +- docs/html/functions_r.html | 2 +- docs/html/functions_s.html | 11 +- docs/html/functions_t.html | 2 +- docs/html/functions_u.html | 2 +- docs/html/functions_vars.html | 2 +- docs/html/functions_w.html | 2 +- docs/html/functions_~.html | 5 +- docs/html/globals.html | 2 +- docs/html/globals_defs.html | 2 +- docs/html/globals_enum.html | 2 +- docs/html/globals_func.html | 2 +- docs/html/hierarchy.html | 37 +- docs/html/hierarchy.js | 1 + docs/html/index.html | 2 +- docs/html/main_8cpp.html | 2 +- docs/html/main_8cpp_source.html | 2 +- docs/html/main_unit_test_8cpp.html | 2 +- docs/html/main_unit_test_8cpp_source.html | 2 +- docs/html/namespace_intelli_datamanager.html | 24 +- .../html/namespace_intelli_triangulation.html | 2 +- docs/html/namespacemembers.html | 2 +- docs/html/namespacemembers_func.html | 2 +- docs/html/namespaces.html | 2 +- docs/html/navtreedata.js | 2 +- docs/html/navtreeindex0.js | 152 +- docs/html/navtreeindex1.js | 158 +- docs/html/search/all_10.js | 6 +- docs/html/search/all_11.js | 6 +- docs/html/search/all_12.js | 31 +- docs/html/search/all_2.js | 11 +- docs/html/search/all_3.js | 13 +- docs/html/search/all_4.js | 4 +- docs/html/search/all_5.js | 55 +- docs/html/search/all_6.js | 9 +- docs/html/search/all_7.js | 127 +- docs/html/search/all_8.js | 8 +- docs/html/search/all_9.js | 16 +- docs/html/search/all_a.js | 2 +- docs/html/search/all_b.js | 14 +- docs/html/search/all_c.js | 18 +- docs/html/search/all_d.js | 6 +- docs/html/search/all_e.js | 45 +- docs/html/search/all_f.js | 10 +- docs/html/search/classes_0.js | 33 +- 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.js | 2 +- 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 | 2 +- docs/html/search/enumvalues_4.js | 4 +- docs/html/search/enumvalues_5.js | 5 +- docs/html/search/enumvalues_6.js | 3 +- docs/html/search/enumvalues_7.html | 30 + docs/html/search/enumvalues_7.js | 4 + docs/html/search/files_0.js | 74 +- docs/html/search/files_1.js | 4 +- docs/html/search/files_2.js | 4 +- docs/html/search/files_3.js | 2 +- docs/html/search/functions_0.js | 4 +- docs/html/search/functions_1.js | 29 +- docs/html/search/functions_2.js | 13 +- docs/html/search/functions_3.js | 54 +- docs/html/search/functions_4.js | 5 +- docs/html/search/functions_5.js | 41 +- docs/html/search/functions_6.js | 6 +- docs/html/search/functions_7.js | 12 +- docs/html/search/functions_8.js | 14 +- docs/html/search/functions_9.js | 4 +- docs/html/search/functions_a.js | 2 +- docs/html/search/functions_b.js | 43 +- docs/html/search/functions_c.js | 6 +- docs/html/search/functions_d.js | 2 +- docs/html/search/functions_e.js | 31 +- docs/html/search/namespaces_0.js | 4 +- docs/html/search/searchdata.js | 2 +- 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-members.html | 2 +- docs/html/struct_layer_object.html | 6 +- docs/html/struct_triangle-members.html | 2 +- docs/html/struct_triangle.html | 2 +- docs/html/tst__unittest_8cpp.html | 2 +- docs/html/tst__unittest_8cpp_source.html | 26 +- src/GUI/IntelliInputDialog.h | 2 +- src/GUI/IntelliPhotoGui.cpp | 174 +- src/Image/IntelliImage.cpp | 12 +- src/Image/IntelliRasterImage.cpp | 2 +- src/Image/IntelliShapedImage.cpp | 4 +- src/IntelliHelper/IntelliDatamanager.cpp | 2 +- src/Layer/PaintingArea.cpp | 48 +- src/Layer/PaintingArea.h | 4 +- src/Tool/IntelliTool.h | 2 +- src/Tool/IntelliToolGradient.cpp | 182 +- src/Tool/IntelliToolGradient.h | 202 +- 257 files changed, 5444 insertions(+), 3399 deletions(-) create mode 100644 docs/html/_intelli_tool_gradient_8cpp.html create mode 100644 docs/html/_intelli_tool_gradient_8cpp_source.html create mode 100644 docs/html/_intelli_tool_gradient_8h.html create mode 100644 docs/html/_intelli_tool_gradient_8h_source.html create mode 100644 docs/html/class_intelli_tool_gradient-members.html create mode 100644 docs/html/class_intelli_tool_gradient.html create mode 100644 docs/html/class_intelli_tool_gradient.js create mode 100644 docs/html/class_intelli_tool_gradient.png create mode 100644 docs/html/search/enumvalues_7.html create mode 100644 docs/html/search/enumvalues_7.js diff --git a/cppcheck_config.txt b/cppcheck_config.txt index 450c488..5722ced 100644 --- a/cppcheck_config.txt +++ b/cppcheck_config.txt @@ -78,6 +78,12 @@ src/GUI/IntelliPhotoGui.cpp:8:0: information: Include file: not found. ^ src/GUI/IntelliPhotoGui.cpp:9:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] +^ +src/GUI/IntelliPhotoGui.cpp:10:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + +^ +src/GUI/IntelliPhotoGui.cpp:11:0: information: Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results. [missingIncludeSystem] + ^ src/Image/IntelliImage.cpp:1:0: information: Include file: "Image/IntelliImage.h" not found. [missingInclude] diff --git a/cppcheck_errors.txt b/cppcheck_errors.txt index dc71700..9e96fd5 100644 --- a/cppcheck_errors.txt +++ b/cppcheck_errors.txt @@ -22,10 +22,10 @@ LayerObject::LayerObject(){ src/Layer/PaintingArea.cpp:23:14: warning: Member variable 'LayerObject::heightOffset' is not initialized in the constructor. [uninitMemberVar] LayerObject::LayerObject(){ ^ -src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::doubleA' is not initialized in the constructor. [uninitMemberVar] +src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::doubleStartPoint' is not initialized in the constructor. [uninitMemberVar] IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) ^ -src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::VectorAB' is not initialized in the constructor. [uninitMemberVar] +src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::VectorStartEnd' is not initialized in the constructor. [uninitMemberVar] IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) ^ src/Tool/IntelliToolGradient.cpp:6:22: warning: Member variable 'IntelliToolGradient::NormalVector' is not initialized in the constructor. [uninitMemberVar] @@ -154,28 +154,28 @@ src/tst_unittest.cpp:1138:0: style: The function 'bench_setPolygon' is never use src/mainUnitTest.cpp:118:0: style: The function 'cleanupTestCase' is never used. [unusedFunction] ^ -src/GUI/IntelliPhotoGui.cpp:28:0: style: The function 'closeEvent' is never used. [unusedFunction] +src/GUI/IntelliPhotoGui.cpp:30:0: style: The function 'closeEvent' is never used. [unusedFunction] ^ src/mainUnitTest.cpp:113:0: style: The function 'initTestCase' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:329:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:328:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:310:0: style: The function 'mousePressEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:309:0: style: The function 'mousePressEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:342:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:341:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:372:0: style: The function 'paintEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:371:0: style: The function 'paintEvent' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:223:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:222:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:129:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:128:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] ^ src/mainUnitTest.cpp:211:0: style: The function 'test_Circle_fullDraw' is never used. [unusedFunction] @@ -328,7 +328,7 @@ src/mainUnitTest.cpp:146:0: style: The function 'test_setLayerUp' is never used. src/mainUnitTest.cpp:144:0: style: The function 'test_setPolygon' is never used. [unusedFunction] ^ -src/Layer/PaintingArea.cpp:357:0: style: The function 'wheelEvent' is never used. [unusedFunction] +src/Layer/PaintingArea.cpp:356: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/docs/html/_intelli_color_picker_8cpp.html b/docs/html/_intelli_color_picker_8cpp.html index 849addb..97d3c27 100644 --- a/docs/html/_intelli_color_picker_8cpp.html +++ b/docs/html/_intelli_color_picker_8cpp.html @@ -26,7 +26,7 @@

diff --git a/docs/html/_intelli_color_picker_8cpp_source.html b/docs/html/_intelli_color_picker_8cpp_source.html index 02695a7..6aaf19c 100644 --- a/docs/html/_intelli_color_picker_8cpp_source.html +++ b/docs/html/_intelli_color_picker_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_color_picker_8h.html b/docs/html/_intelli_color_picker_8h.html index 3baf920..95956d4 100644 --- a/docs/html/_intelli_color_picker_8h.html +++ b/docs/html/_intelli_color_picker_8h.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_color_picker_8h_source.html b/docs/html/_intelli_color_picker_8h_source.html index b9fbf6a..42b2f3a 100644 --- a/docs/html/_intelli_color_picker_8h_source.html +++ b/docs/html/_intelli_color_picker_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_datamanager_8cpp.html b/docs/html/_intelli_datamanager_8cpp.html index cc74d66..9bb5dcd 100644 --- a/docs/html/_intelli_datamanager_8cpp.html +++ b/docs/html/_intelli_datamanager_8cpp.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_datamanager_8cpp_source.html b/docs/html/_intelli_datamanager_8cpp_source.html index 4eddbd7..4f709d4 100644 --- a/docs/html/_intelli_datamanager_8cpp_source.html +++ b/docs/html/_intelli_datamanager_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -149,7 +149,7 @@ $(document).ready(function(){initNavTree('_intelli_datamanager_8cpp_source.html'
61  in >> widthCanvas >> heightCanvas;
62  in >> numberOffLayers;
63 
-
64  Canvas->setLayerDimensions(widthCanvas, heightCanvas);
+
64  Canvas->setCanvasDimensions(widthCanvas, heightCanvas);
65  for(int i = 0; i<numberOffLayers; i++) {
66  int width, height, widthOffset, heightOffset, alpha;
67  in >> width >> height >> widthOffset >> heightOffset >> alpha;
@@ -176,35 +176,37 @@ $(document).ready(function(){initNavTree('_intelli_datamanager_8cpp_source.html'
88  for(int k = 0; k<width; k++) {
89  int red, green, blue, alpha;
90  in >> red >> green >> blue >> alpha;
-
91  Canvas->setPixelToActive(QColor(red, green, blue, alpha), QPoint(j, k));
+
91  Canvas->drawPixelOntoActive(QColor(red, green, blue, alpha), QPoint(j, k));
92  }
93  }
94  }
95  Canvas->setRenderSettings(static_cast<bool>(rendersetting));
96  openFile.close();
-
97  return true;
-
98  }
-
99 
-
100  return false;
-
101 }
+
97  Canvas->historyadd();
+
98  return true;
+
99  }
+
100 
+
101  return false;
+
102 }
void setRenderSettings(bool isFastRenderingOn)
setRenderSettings updates all Images to the new Rendersetting.
- -
bool loadProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
- +
int getMaxWidth()
getMaxWidth gets the max width of the Canvas.
+
bool loadProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
loadProject loads a project from a file, closes current project.
+
int getMaxHeight()
getMaxHeight gets the max height of the Canvas.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
-
std::vector< LayerObject > * getLayerBundle()
getLayerBundle returns the real active layerbundle (care!)
+
void drawPixelOntoActive(QColor color, QPoint point)
drawPixelOntoActive draws a pixel onto the image data of the active Layer.
+
std::vector< LayerObject > * getLayerBundle()
getLayerBundle returns the real active layerbundle (care!)
-
void setPixelToActive(QColor color, QPoint point)
-
void deleteAllLayers()
deleteAllLayers deletes all layers
-
void setLayerDimensions(int maxWidth, int maxHeight)
-
bool saveProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
+
void deleteAllLayers()
deleteAllLayers deletes all layers
+
void setCanvasDimensions(int maxWidth, int maxHeight)
setCanvasDimensions sets the dimension of the Canvas
+
bool saveProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
saveProject saves the current project to a file.
bool getRenderSettings()
getRenderSettings updates all Images to the new Rendersetting.
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, int alpha=255, ImageType type=ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
-
void setPolygonDataToActive(std::vector< QPoint > points)
+
void historyadd()
historyadd adds an hisotry step
+
void setPolygonDataToActive(std::vector< QPoint > points)
setPolygonDataToActive sets polygondata to the active Layer.
diff --git a/docs/html/_intelli_datamanager_8h_source.html b/docs/html/_intelli_datamanager_8h_source.html index fdc18a4..287bb6d 100644 --- a/docs/html/_intelli_datamanager_8h_source.html +++ b/docs/html/_intelli_datamanager_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -96,18 +96,19 @@ $(document).ready(function(){initNavTree('_intelli_datamanager_8h_source.html','
8 
9 namespace IntelliDatamanager {
10 
-
11 bool loadProject(PaintingArea* Canvas, QString filePath = "unnamed.idf");
-
12 bool saveProject(PaintingArea* Canvas, QString filePath = "unnamed.idf");
-
13 
-
14 }
-
15 
-
16 #endif // INTELLIDATAMANAGER_H
+
17 bool loadProject(PaintingArea* Canvas, QString filePath = "unnamed.idf");
+
18 
+
25 bool saveProject(PaintingArea* Canvas, QString filePath = "unnamed.idf");
+
26 
+
27 }
+
28 
+
29 #endif // INTELLIDATAMANAGER_H
-
bool loadProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
+
bool loadProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
loadProject loads a project from a file, closes current project.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
-
bool saveProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
+
bool saveProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
saveProject saves the current project to a file.
@@ -184,7 +184,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html',''); in
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 bool isFastRendering() const
+
virtual bool isFastRendering() const
isFastRendering returns if the Image is in fast rendering mode.
virtual ImageType getTypeOfImage()
Definition: IntelliImage.h:139
virtual std::vector< QPoint > getPolygonData()
A function that returns the Polygondata if existent.
Definition: IntelliImage.h:135
IntelliImage(int width, int height, bool fastRendererOn)
The Construcor of the IntelliImage. Given the Image dimensions.
Definition: IntelliImage.cpp:5
@@ -198,7 +198,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html',''); in
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.
-
virtual int getHeight() const
+
virtual int getHeight() const
getHeight returns the height of the Image.
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.
@@ -206,7 +206,7 @@ $(document).ready(function(){initNavTree('_intelli_image_8h_source.html',''); in
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.
-
virtual int getWidth() const
+
virtual int getWidth() const
getWidth returns the width of the Image.
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 index 1025033..4d14f5a 100644 --- a/docs/html/_intelli_input_dialog_8cpp.html +++ b/docs/html/_intelli_input_dialog_8cpp.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_input_dialog_8cpp_source.html b/docs/html/_intelli_input_dialog_8cpp_source.html index c7f0d28..af3b732 100644 --- a/docs/html/_intelli_input_dialog_8cpp_source.html +++ b/docs/html/_intelli_input_dialog_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -172,12 +172,12 @@ $(document).ready(function(){initNavTree('_intelli_input_dialog_8cpp_source.html
84 }
- +
void slotCloseEvent()
slotCloseEvent is a slot for catching the close Event.
- -
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)
- +
The IntelliInputDialog class is a customized Input Dialog to get Integers.
+
IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
IntelliInputDialog is the baisc constructor to for the InputDialog.
+
static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
getInt is a static funktion ยด, which creates an Input Dialog and gets an Integer.
+
void slotEingabe()
slotEingabe is a slot for catching the Input Event.
diff --git a/docs/html/_intelli_input_dialog_8h_source.html b/docs/html/_intelli_input_dialog_8h_source.html index cf8ea3b..263ad64 100644 --- a/docs/html/_intelli_input_dialog_8h_source.html +++ b/docs/html/_intelli_input_dialog_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -97,46 +97,55 @@ $(document).ready(function(){initNavTree('_intelli_input_dialog_8h_source.html',
9 #include <QPushButton>
10 #include <QSpinBox>
11 
-
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 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 };
+
15 class IntelliInputDialog : public QDialog
+
16 {
+
17 Q_OBJECT
+
18 public:
+
29 IntelliInputDialog(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
+
30 
+
42 static int getInt(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool* ok = nullptr);
43 
-
44 #endif // INTELLIINPUTDIALOG_H
+
44 public slots:
+
48 void slotCloseEvent();
+
49 
+
53 void slotEingabe();
+
54 
+
55 private:
+
65 void createInputBox(QString Title = nullptr, QString Label = nullptr, int value = 5, int minValue = -2147483647, int maxValue = 2147483647, int step = 1);
+
66 
+
70 void createConnections();
+
71 
+
75 void setInputBoxStyle();
+
76 
+
80 int valueInt;
+
81 
+
85 QGridLayout* Layout;
+
86 
+
90 QDialogButtonBox* ButtonBox;
+
91 
+
95 bool* notClosed;
+
96 
+
100 const QSize Linesize = QSize(150,20);
+
101 
+
105 const QSize Buttonsize = QSize(72,20);
+
106 
+
110 QLabel* InputLabel;
+
111 
+
115 QSpinBox* Input;
+
116 
+
120 QPushButton* okButton;
+
121 
+
125 QPushButton* cancelButton;
+
126 };
+
127 
+
128 #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)
- +
void slotCloseEvent()
slotCloseEvent is a slot for catching the close Event.
+
The IntelliInputDialog class is a customized Input Dialog to get Integers.
+
IntelliInputDialog(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
IntelliInputDialog is the baisc constructor to for the InputDialog.
+
static int getInt(QString Title=nullptr, QString Label=nullptr, int value=5, int minValue=-2147483647, int maxValue=2147483647, int step=1, bool *ok=nullptr)
getInt is a static funktion ยด, which creates an Input Dialog and gets an Integer.
+
void slotEingabe()
slotEingabe is a slot for catching the Input Event.

Go to the source code of this file.

diff --git a/docs/html/_intelli_photo_gui_8cpp_source.html b/docs/html/_intelli_photo_gui_8cpp_source.html index 8f3062b..b358b55 100644 --- a/docs/html/_intelli_photo_gui_8cpp_source.html +++ b/docs/html/_intelli_photo_gui_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -95,974 +95,1013 @@ $(document).ready(function(){initNavTree('_intelli_photo_gui_8cpp_source.html','
7 #include <QCloseEvent>
8 #include <QDebug>
9 #include <string>
-
10 
-
11 // IntelliPhotoGui constructor
- -
13  // create Gui elements and lay them out
-
14  createGui();
-
15  // Create actions
-
16  createActions();
-
17  // create Menus
-
18  createMenus();
-
19  // set style of the gui
-
20  setIntelliStyle();
-
21  // Size the app
-
22  resize(600,600);
-
23  setDefaultValues();
-
24 }
-
25 
-
26 // User tried to close the app
-
27 void IntelliPhotoGui::closeEvent(QCloseEvent*event){
-
28  // If they try to close maybeSave() returns true
-
29  // if no changes have been made and the app closes
-
30  if (maybeSave()) {
-
31  event->accept();
-
32  } else {
-
33  // If there have been changes ignore the event
-
34  event->ignore();
-
35  }
-
36 }
-
37 
-
38 // Check if the current image has been changed and then
-
39 // open a dialog to open a file
-
40 void IntelliPhotoGui::slotOpen(){
-
41  // Check if changes have been made since last save
-
42  // maybeSave() returns true if no changes have been made
-
43  if (maybeSave()) {
-
44 
-
45  // Get the file to open from a dialog
-
46  // tr sets the window title to Open File
-
47  // QDir opens the current dirctory
-
48  QString fileName = QFileDialog::getOpenFileName(this,
-
49  tr("Open File"), QDir::currentPath(), nullptr, nullptr, QFileDialog::DontUseNativeDialog);
-
50 
-
51  // If we have a file name load the image and place
-
52  // it in the paintingArea
-
53  if (!fileName.isEmpty()) {
-
54  bool rightFileType = true;
-
55  if(fileName.size()>=4) {
-
56  QString endung(".idf");
-
57  int length = fileName.size();
-
58  for(int i = 0; i<4; i++) {
-
59  if(endung[i]!=fileName[length - 4 + i]) {
-
60  rightFileType = false;
-
61  break;
-
62  }
-
63  }
-
64  }
-
65 
-
66  if(rightFileType) {
-
67  IntelliDatamanager::loadProject(paintingArea,fileName);
-
68  UpdateGui();
-
69 
-
70  }
-
71  else{
-
72  paintingArea->open(fileName);
+
10 #include <QScreen>
+
11 #include <QGuiApplication>
+
12 
+
13 // IntelliPhotoGui constructor
+ +
15  // create Gui elements and lay them out
+
16  createGui();
+
17  // Create actions
+
18  createActions();
+
19  // create Menus
+
20  createMenus();
+
21  // set style of the gui
+
22  setIntelliStyle();
+
23  // Size the app
+
24  resize(600,600);
+
25  showMaximized();
+
26  setDefaultValues();
+
27 }
+
28 
+
29 // User tried to close the app
+
30 void IntelliPhotoGui::closeEvent(QCloseEvent*event){
+
31  // If they try to close maybeSave() returns true
+
32  // if no changes have been made and the app closes
+
33  if (maybeSave()) {
+
34  event->accept();
+
35  } else {
+
36  // If there have been changes ignore the event
+
37  event->ignore();
+
38  }
+
39 }
+
40 
+
41 // Check if the current image has been changed and then
+
42 // open a dialog to open a file
+
43 void IntelliPhotoGui::slotOpen(){
+
44  // Check if changes have been made since last save
+
45  // maybeSave() returns true if no changes have been made
+
46  if (maybeSave()) {
+
47 
+
48  // Get the file to open from a dialog
+
49  // tr sets the window title to Open File
+
50  // QDir opens the current dirctory
+
51  QString fileName = QFileDialog::getOpenFileName(this,
+
52  tr("Open File"), QDir::currentPath(), nullptr, nullptr, QFileDialog::DontUseNativeDialog);
+
53 
+
54  // If we have a file name load the image and place
+
55  // it in the paintingArea
+
56  if (!fileName.isEmpty()) {
+
57  bool rightFileType = true;
+
58  if(fileName.size()>=4) {
+
59  QString endung(".idf");
+
60  int length = fileName.size();
+
61  for(int i = 0; i<4; i++) {
+
62  if(endung[i]!=fileName[length - 4 + i]) {
+
63  rightFileType = false;
+
64  break;
+
65  }
+
66  }
+
67  }
+
68 
+
69  if(rightFileType) {
+
70  IntelliDatamanager::loadProject(paintingArea,fileName);
+
71  UpdateGui();
+
72 
73  }
-
74  }
-
75  }
-
76 }
-
77 
-
78 // Called when the user clicks Save As in the menu
-
79 void IntelliPhotoGui::slotSave(){
-
80  // A QAction represents the action of the user clicking
-
81  QAction*action = qobject_cast<QAction*>(sender());
-
82 
-
83  // Stores the array of bytes of the users data
-
84  QByteArray fileFormat = action->data().toByteArray();
+
74  else{
+
75  paintingArea->open(fileName);
+
76  }
+
77  }
+
78  }
+
79 }
+
80 
+
81 // Called when the user clicks Save As in the menu
+
82 void IntelliPhotoGui::slotSave(){
+
83  // A QAction represents the action of the user clicking
+
84  QAction*action = qobject_cast<QAction*>(sender());
85 
-
86  // Pass it to be saved
-
87  saveFile(fileFormat);
-
88 }
-
89 
-
90 // Opens a dialog that allows the user to create a New RASTER Layer
-
91 void IntelliPhotoGui::slotCreateNewRasterLayer(){
-
92  // Stores button value
-
93  bool ok1, ok2;
-
94 
-
95  // "New Layer" is the title of the window
-
96  // the next tr is the text to display
-
97  // Define the standard Value, min, max, step and ok button
-
98  int width = IntelliInputDialog::getInt("New Raster Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
-
99 
-
100  int height = IntelliInputDialog::getInt("New Raster Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
-
101 
-
102  // Create New Layer
-
103  if (ok1&&ok2) {
-
104  paintingArea->addLayer(width,height,0,0,255,ImageType::RASTERIMAGE);
-
105  UpdateGui();
-
106  }
-
107 }
-
108 
-
109 // Opens a dialog that allows the user to create a New SHAPED Layer
-
110 void IntelliPhotoGui::slotCreateNewShapedLayer(){
-
111  // Stores button value
-
112  bool ok1, ok2;
-
113 
-
114  // "New Layer" is the title of the window
-
115  // the next tr is the text to display
-
116  // Define the standard Value, min, max, step and ok button
-
117  int width = IntelliInputDialog::getInt("New Shaped Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
-
118 
-
119  int height = IntelliInputDialog::getInt("New Shaped Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
-
120 
-
121  // Create New Layer
-
122  if (ok1&&ok2) {
-
123  paintingArea->addLayer(width, height, 0, 0,255, ImageType::SHAPEDIMAGE);
-
124  UpdateGui();
-
125  }
-
126 }
-
127 
-
128 // Opens a dialog that allows the user to change Dimension
-
129 void IntelliPhotoGui::slotChangeDim(){
-
130  // Stores button value
-
131  bool ok1, ok2;
+
86  // Stores the array of bytes of the users data
+
87  QByteArray fileFormat = action->data().toByteArray();
+
88 
+
89  // Pass it to be saved
+
90  saveFile(fileFormat);
+
91 }
+
92 
+
93 // Opens a dialog that allows the user to create a New RASTER Layer
+
94 void IntelliPhotoGui::slotCreateNewRasterLayer(){
+
95  // Stores button value
+
96  bool ok1, ok2;
+
97 
+
98  // "New Layer" is the title of the window
+
99  // the next tr is the text to display
+
100  // Define the standard Value, min, max, step and ok button
+
101  int width = IntelliInputDialog::getInt("New Raster Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
+
102 
+
103  int height = IntelliInputDialog::getInt("New Raster Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
+
104 
+
105  // Create New Layer
+
106  if (ok1&&ok2) {
+
107  paintingArea->addLayer(width,height,0,0,255,ImageType::RASTERIMAGE);
+
108  paintingArea->historyadd();
+
109  UpdateGui();
+
110  }
+
111 }
+
112 
+
113 // Opens a dialog that allows the user to create a New SHAPED Layer
+
114 void IntelliPhotoGui::slotCreateNewShapedLayer(){
+
115  // Stores button value
+
116  bool ok1, ok2;
+
117 
+
118  // "New Layer" is the title of the window
+
119  // the next tr is the text to display
+
120  // Define the standard Value, min, max, step and ok button
+
121  int width = IntelliInputDialog::getInt("New Shaped Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
+
122 
+
123  int height = IntelliInputDialog::getInt("New Shaped Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
+
124 
+
125  // Create New Layer
+
126  if (ok1&&ok2) {
+
127  paintingArea->addLayer(width, height, 0, 0,255, ImageType::SHAPEDIMAGE);
+
128  paintingArea->historyadd();
+
129  UpdateGui();
+
130  }
+
131 }
132 
-
133  // "change Dimension" is the title of the window
-
134  // the next tr is the text to display
-
135  // Define the standard Value, min, step and ok button
-
136  int width = IntelliInputDialog::getInt("New Canvas Size", "Width:", 600, 1, 50000, 1, &ok1);
+
133 // Opens a dialog that allows the user to change Dimension
+
134 void IntelliPhotoGui::slotChangeDim(){
+
135  // Stores button value
+
136  bool ok1, ok2;
137 
-
138  int height = IntelliInputDialog::getInt("New Canvas Size", "Height:", 600, 1, 50000, 1, &ok2);
-
139 
-
140 
-
141  // Change dimension
-
142  if (ok1&&ok2) {
-
143  paintingArea->setLayerDimensions(width,height);
-
144  UpdateGui();
-
145  }
-
146 }
-
147 
-
148 // Opens a dialog that allows the user to delete a Layer
-
149 void IntelliPhotoGui::slotDeleteLayer(){
-
150 
-
151  bool ok1;
-
152  // "delete Layer" is the title of the window
-
153  // the next tr is the text to display
-
154  // Define the standard Value, min, max, step and ok button
-
155  int layerNumber = IntelliInputDialog::getInt("Delete Layer", "Number:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
-
156 
-
157  // Create New Layer
-
158  if(ok1) {
-
159  paintingArea->deleteLayer(layerNumber - 1);
-
160  UpdateGui();
-
161  }
-
162 }
-
163 
-
164 void IntelliPhotoGui::slotSetActiveAlpha(){
-
165 
-
166  bool ok1, ok2;
-
167  // "Layer to set on" is the title of the window
-
168  // the next tr is the text to display
-
169  // Define the standard Value, min, max, step and ok button
-
170 
-
171  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
-
172 
-
173  // "New Alpha" is the title of the window
-
174  int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2);
-
175 
-
176  if (ok1&&ok2)
-
177  {
-
178  paintingArea->setLayerAlpha(layer - 1,alpha);
-
179  UpdateGui();
-
180  }
-
181 }
-
182 
-
183 void IntelliPhotoGui::slotSetPolygon(){
-
184  // Stores button value
-
185  bool ok1;
-
186 
-
187  // "Layer to set on" is the title of the window
-
188  // the next tr is the text to display
-
189  // Define the standard Value, min, max, step and ok button
-
190  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
-
191 
-
192  if (ok1)
-
193  {
-
194  paintingArea->setPolygon(layer - 1);
-
195  UpdateGui();
-
196  }
-
197 }
-
198 
-
199 void IntelliPhotoGui::slotPositionMoveUp(){
-
200  paintingArea->movePositionActive(0,-20);
-
201  update();
-
202 }
-
203 
-
204 void IntelliPhotoGui::slotPositionMoveDown(){
-
205  paintingArea->movePositionActive(0,20);
-
206  update();
-
207 }
-
208 
-
209 void IntelliPhotoGui::slotPositionMoveLeft(){
-
210  paintingArea->movePositionActive(-20,0);
-
211  update();
-
212 }
-
213 
-
214 void IntelliPhotoGui::slotPositionMoveRight(){
-
215  paintingArea->movePositionActive(20,0);
-
216  update();
-
217 }
-
218 
-
219 void IntelliPhotoGui::slotMoveLayerUp(){
-
220  paintingArea->moveActiveLayer(1);
-
221  update();
-
222 }
-
223 
-
224 void IntelliPhotoGui::slotMoveLayerDown(){
-
225  paintingArea->moveActiveLayer(-1);
-
226  update();
-
227 }
-
228 
-
229 void IntelliPhotoGui::slotSetActiveLayer(){
-
230  bool ok1;
-
231  // "Layer to set on" is the title of the window
-
232  // the next tr is the text to display
-
233  // Define the standard Value, min, max, step and ok button
-
234  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
-
235 
-
236  if(ok1) {
-
237  paintingArea->setLayerActive(layer - 1);
-
238  UpdateGui();
-
239  }
-
240 }
+
138  // "change Dimension" is the title of the window
+
139  // the next tr is the text to display
+
140  // Define the standard Value, min, step and ok button
+
141  int width = IntelliInputDialog::getInt("New Canvas Size", "Width:", 600, 1, 50000, 1, &ok1);
+
142 
+
143  int height = IntelliInputDialog::getInt("New Canvas Size", "Height:", 600, 1, 50000, 1, &ok2);
+
144 
+
145 
+
146  // Change dimension
+
147  if (ok1&&ok2) {
+
148  paintingArea->setCanvasDimensions(width,height);
+
149  UpdateGui();
+
150  }
+
151 }
+
152 
+
153 // Opens a dialog that allows the user to delete a Layer
+
154 void IntelliPhotoGui::slotDeleteLayer(){
+
155 
+
156  bool ok1;
+
157  // "delete Layer" is the title of the window
+
158  // the next tr is the text to display
+
159  // Define the standard Value, min, max, step and ok button
+
160  int layerNumber = IntelliInputDialog::getInt("Delete Layer", "Number:", paintingArea->getIndexOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
161 
+
162  // Create New Layer
+
163  if(ok1) {
+
164  paintingArea->deleteLayer(layerNumber - 1);
+
165  paintingArea->historyadd();
+
166  UpdateGui();
+
167  }
+
168 }
+
169 
+
170 void IntelliPhotoGui::slotSetActiveAlpha(){
+
171 
+
172  bool ok1, ok2;
+
173  // "Layer to set on" is the title of the window
+
174  // the next tr is the text to display
+
175  // Define the standard Value, min, max, step and ok button
+
176 
+
177  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getIndexOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
178 
+
179  // "New Alpha" is the title of the window
+
180  int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2);
+
181 
+
182  if (ok1&&ok2)
+
183  {
+
184  paintingArea->setLayerAlpha(layer - 1,alpha);
+
185  UpdateGui();
+
186  }
+
187 }
+
188 
+
189 void IntelliPhotoGui::slotSetPolygon(){
+
190  // Stores button value
+
191  bool ok1;
+
192 
+
193  // "Layer to set on" is the title of the window
+
194  // the next tr is the text to display
+
195  // Define the standard Value, min, max, step and ok button
+
196  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getIndexOfActiveLayer() + 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
+
197 
+
198  if (ok1)
+
199  {
+
200  paintingArea->setPolygon(layer - 1);
+
201  UpdateGui();
+
202  }
+
203 }
+
204 
+
205 void IntelliPhotoGui::slotPositionMoveUp(){
+
206  paintingArea->movePositionActive(0,-20);
+
207  update();
+
208 }
+
209 
+
210 void IntelliPhotoGui::slotPositionMoveDown(){
+
211  paintingArea->movePositionActive(0,20);
+
212  update();
+
213 }
+
214 
+
215 void IntelliPhotoGui::slotPositionMoveLeft(){
+
216  paintingArea->movePositionActive(-20,0);
+
217  update();
+
218 }
+
219 
+
220 void IntelliPhotoGui::slotPositionMoveRight(){
+
221  paintingArea->movePositionActive(20,0);
+
222  update();
+
223 }
+
224 
+
225 void IntelliPhotoGui::slotMoveLayerUp(){
+
226  paintingArea->moveActiveLayer(1);
+
227  update();
+
228 }
+
229 
+
230 void IntelliPhotoGui::slotMoveLayerDown(){
+
231  paintingArea->moveActiveLayer(-1);
+
232  update();
+
233 }
+
234 
+
235 void IntelliPhotoGui::slotSetActiveLayer(){
+
236  bool ok1;
+
237  // "Layer to set on" is the title of the window
+
238  // the next tr is the text to display
+
239  // Define the standard Value, min, max, step and ok button
+
240  int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
241 
-
242 void IntelliPhotoGui::slotUpdateRenderSettingsOn(){
-
243  paintingArea->setRenderSettings(true);
-
244  UpdateGui();
-
245 }
-
246 
-
247 void IntelliPhotoGui::slotUpdateRenderSettingsOff(){
-
248  paintingArea->setRenderSettings(false);
-
249  UpdateGui();
-
250 }
-
251 
-
252 void IntelliPhotoGui::slotSetFirstColor(){
-
253  paintingArea->colorPickerSetFirstColor();
-
254  UpdateGui();
-
255 }
-
256 
-
257 void IntelliPhotoGui::slotSetSecondColor(){
-
258  paintingArea->colorPickerSetSecondColor();
-
259  UpdateGui();
-
260 }
-
261 
-
262 void IntelliPhotoGui::slotSwapColor(){
-
263  paintingArea->colorPickerSwapColors();
-
264  UpdateGui();
-
265 }
-
266 
-
267 void IntelliPhotoGui::slotCreatePenTool(){
-
268  PenButton->setChecked(true);
-
269  paintingArea->createPenTool();
-
270 }
-
271 
-
272 void IntelliPhotoGui::slotCreatePlainTool(){
-
273  PlainButton->setChecked(true);
-
274  paintingArea->createPlainTool();
-
275 }
-
276 
-
277 void IntelliPhotoGui::slotCreateLineTool(){
-
278  LineButton->setChecked(true);
-
279  paintingArea->createLineTool();
-
280 }
-
281 
-
282 void IntelliPhotoGui::slotCreateRectangleTool(){
-
283  RectangleButton->setChecked(true);
-
284  paintingArea->createRectangleTool();
-
285 }
-
286 
-
287 void IntelliPhotoGui::slotCreateCircleTool(){
-
288  CircleButton->setChecked(true);
-
289  paintingArea->createCircleTool();
-
290 }
-
291 
-
292 void IntelliPhotoGui::slotCreatePolygonTool(){
-
293  PolygonButton->setChecked(true);
-
294  paintingArea->createPolygonTool();
-
295 }
-
296 
-
297 void IntelliPhotoGui::slotCreateFloodFillTool(){
-
298  FloodFillButton->setChecked(true);
-
299  paintingArea->createFloodFillTool();
-
300 }
-
301 
-
302 // Open an about dialog
-
303 void IntelliPhotoGui::slotAboutDialog(){
-
304  // Window title and text to display
-
305  QMessageBox::about(this, tr("About Painting"),
-
306  tr("<p><b>IntelliPhoto - </b>A Pretty basic editor.</p> <br>Developed by Team 7."));
-
307 }
-
308 
-
309 void IntelliPhotoGui::slotEnterPressed(){
-
310  QString string = EditLineWidth->text();
-
311  if(string.toInt() > 50) {
-
312  EditLineWidth->setText("50");
-
313  }
-
314  paintingArea->Toolsettings.setLineWidth(string.toInt());
-
315  string = EditLineInnerAlpha->text();
-
316  if(string.toInt() > 255) {
-
317  EditLineInnerAlpha->setText("255");
-
318  }
-
319  paintingArea->Toolsettings.setInnerAlpha(string.toInt());
+
242  if(ok1) {
+
243  paintingArea->setLayerActive(layer - 1);
+
244  UpdateGui();
+
245  }
+
246 }
+
247 
+
248 void IntelliPhotoGui::slotUpdateFastRenderSettingsOn(){
+
249  paintingArea->setRenderSettings(true);
+
250  FastRendererLabel->setText("Fast Render: On");
+
251  UpdateGui();
+
252 }
+
253 
+
254 void IntelliPhotoGui::slotUpdateFastRenderSettingsOff(){
+
255  paintingArea->setRenderSettings(false);
+
256  FastRendererLabel->setText("Fast Render: Off");
+
257  UpdateGui();
+
258 }
+
259 
+
260 void IntelliPhotoGui::slotSetFirstColor(){
+
261  paintingArea->colorPickerSetFirstColor();
+
262  UpdateGui();
+
263 }
+
264 
+
265 void IntelliPhotoGui::slotSetSecondColor(){
+
266  paintingArea->colorPickerSetSecondColor();
+
267  UpdateGui();
+
268 }
+
269 
+
270 void IntelliPhotoGui::slotSwapColor(){
+
271  paintingArea->colorPickerSwapColors();
+
272  UpdateGui();
+
273 }
+
274 
+
275 void IntelliPhotoGui::slotCreatePenTool(){
+
276  PenButton->setChecked(true);
+
277  paintingArea->createPenTool();
+
278 }
+
279 
+
280 void IntelliPhotoGui::slotCreatePlainTool(){
+
281  PlainButton->setChecked(true);
+
282  paintingArea->createPlainTool();
+
283 }
+
284 
+
285 void IntelliPhotoGui::slotCreateLineTool(){
+
286  LineButton->setChecked(true);
+
287  paintingArea->createLineTool();
+
288 }
+
289 
+
290 void IntelliPhotoGui::slotCreateRectangleTool(){
+
291  RectangleButton->setChecked(true);
+
292  paintingArea->createRectangleTool();
+
293 }
+
294 
+
295 void IntelliPhotoGui::slotCreateCircleTool(){
+
296  CircleButton->setChecked(true);
+
297  paintingArea->createCircleTool();
+
298 }
+
299 
+
300 void IntelliPhotoGui::slotCreatePolygonTool(){
+
301  PolygonButton->setChecked(true);
+
302  paintingArea->createPolygonTool();
+
303 }
+
304 
+
305 void IntelliPhotoGui::slotCreateFloodFillTool(){
+
306  FloodFillButton->setChecked(true);
+
307  paintingArea->createFloodFillTool();
+
308 }
+
309 
+
310 void IntelliPhotoGui::slotCreateGradientTool(){
+
311  GradientButton->setChecked(true);
+
312  paintingArea->createGradientTool();
+
313 }
+
314 
+
315 // Open an about dialog
+
316 void IntelliPhotoGui::slotAboutDialog(){
+
317  // Window title and text to display
+
318  QMessageBox::about(this, tr("About Painting"),
+
319  tr("<p><b>IntelliPhoto - </b>A Pretty basic editor.</p> <br>Developed by Team 7."));
320 }
321 
-
322 void IntelliPhotoGui::slotResetTools(){
-
323  CircleButton->setChecked(false);
-
324  FloodFillButton->setChecked(false);
-
325  LineButton->setChecked(false);
-
326  PenButton->setChecked(false);
-
327  PlainButton->setChecked(false);
-
328  PolygonButton->setChecked(false);
-
329  RectangleButton->setChecked(false);
-
330 }
-
331 
-
332 void IntelliPhotoGui::slotSetWidth(){
-
333  bool ok1;
-
334  int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1);
-
335  if(ok1) {
-
336  paintingArea->Toolsettings.setLineWidth(temp);
-
337  EditLineWidth->setText(QString("%1").arg(temp));
-
338  }
-
339 }
-
340 
-
341 void IntelliPhotoGui::slotSetInnerAlpha(){
-
342  bool ok1;
-
343  int temp = IntelliInputDialog::getInt("Toolsettings", "Alpha:", 5, 1, 50, 1, &ok1);
-
344  if(ok1) {
-
345  paintingArea->Toolsettings.setInnerAlpha(temp);
-
346  EditLineInnerAlpha->setText(QString("%1").arg(temp));
-
347  }
-
348 }
-
349 
-
350 void IntelliPhotoGui::slotGoBack(){
-
351  paintingArea->historyGoBack();
-
352 }
-
353 
-
354 void IntelliPhotoGui::slotGoForward(){
-
355  paintingArea->historyGoForward();
-
356 }
-
357 
-
358 // Define menu actions that call functions
-
359 void IntelliPhotoGui::createActions(){
-
360  // Get a list of the supported file formats
-
361  // QImageWriter is used to write images to files
-
362  foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
-
363  QString text = tr("%1...").arg(QString(format).toUpper());
-
364 
-
365  // Create an action for each file format
-
366  QAction*action = new QAction(text, this);
+
322 void IntelliPhotoGui::slotEnterPressed(){
+
323  QString string = EditLineWidth->text();
+
324  if(string.toInt() > 50) {
+
325  EditLineWidth->setText("50");
+
326  }
+
327  paintingArea->Toolsettings.setLineWidth(string.toInt());
+
328  string = EditLineInnerAlpha->text();
+
329  if(string.toInt() > 255) {
+
330  EditLineInnerAlpha->setText("255");
+
331  }
+
332  paintingArea->Toolsettings.setInnerAlpha(string.toInt());
+
333 }
+
334 
+
335 void IntelliPhotoGui::slotResetToolButtons(){
+
336  CircleButton->setChecked(false);
+
337  FloodFillButton->setChecked(false);
+
338  GradientButton->setChecked(false);
+
339  LineButton->setChecked(false);
+
340  PenButton->setChecked(false);
+
341  PlainButton->setChecked(false);
+
342  PolygonButton->setChecked(false);
+
343  RectangleButton->setChecked(false);
+
344 }
+
345 
+
346 void IntelliPhotoGui::slotSetWidth(){
+
347  bool ok1;
+
348  int temp = IntelliInputDialog::getInt("Toolsettings", "Width:", 5, 1, 50, 1, &ok1);
+
349  if(ok1) {
+
350  paintingArea->Toolsettings.setLineWidth(temp);
+
351  EditLineWidth->setText(QString("%1").arg(temp));
+
352  }
+
353 }
+
354 
+
355 void IntelliPhotoGui::slotSetInnerAlpha(){
+
356  bool ok1;
+
357  int temp = IntelliInputDialog::getInt("Toolsettings", "Alpha:", 5, 1, 50, 1, &ok1);
+
358  if(ok1) {
+
359  paintingArea->Toolsettings.setInnerAlpha(temp);
+
360  EditLineInnerAlpha->setText(QString("%1").arg(temp));
+
361  }
+
362 }
+
363 
+
364 void IntelliPhotoGui::slotGoBack(){
+
365  paintingArea->historyGoBack();
+
366 }
367 
-
368  // Set an action for each file format
-
369  action->setData(format);
-
370 
-
371  // When clicked call IntelliPhotoGui::save()
-
372  connect(action, SIGNAL(triggered()), this, SLOT(slotSave()));
-
373 
-
374  // Attach each file format option menu item to Save As
-
375  actionSaveAs.append(action);
-
376  }
-
377 
-
378  //set exporter to actions
-
379  QAction*pngSaveAction = new QAction("PNG-8", this);
-
380  pngSaveAction->setData("PNG");
-
381  // When clicked call IntelliPhotoGui::save()
-
382  connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave()));
-
383  // Attach each PNG in save Menu
-
384  actionSaveAs.append(pngSaveAction);
-
385  pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S));
-
386 
-
387  QAction*projectSaveAction = new QAction("Projekt", this);
-
388  projectSaveAction->setData("idf");
-
389  // When clicked call IntelliPhotoGui::save()
-
390  connect(projectSaveAction, SIGNAL(triggered()), this, SLOT(slotSave()));
-
391  // Attach each PNG in save Menu
-
392  actionSaveAs.append(projectSaveAction);
-
393  projectSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
-
394 
-
395  // Create exit action and tie to IntelliPhotoGui::close()
-
396  actionExit = new QAction(tr("&Exit"), this);
-
397  actionExit->setShortcuts(QKeySequence::Quit);
-
398  connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
-
399 
-
400  actionOpen = new QAction(tr("&Open"), this);
-
401  actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
-
402  connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()));
-
403 
-
404  // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer()
-
405  actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this);
-
406  actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
-
407  connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer()));
-
408 
+
368 void IntelliPhotoGui::slotGoForward(){
+
369  paintingArea->historyGoForward();
+
370 }
+
371 
+
372 // Define menu actions that call functions
+
373 void IntelliPhotoGui::createActions(){
+
374  // Get a list of the supported file formats
+
375  // QImageWriter is used to write images to files
+
376  foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
+
377  QString text = tr("%1...").arg(QString(format).toUpper());
+
378 
+
379  // Create an action for each file format
+
380  QAction*action = new QAction(text, this);
+
381 
+
382  // Set an action for each file format
+
383  action->setData(format);
+
384 
+
385  // When clicked call IntelliPhotoGui::save()
+
386  connect(action, SIGNAL(triggered()), this, SLOT(slotSave()));
+
387 
+
388  // Attach each file format option menu item to Save As
+
389  actionSaveAs.append(action);
+
390  }
+
391 
+
392  // Set exporter to actions
+
393  QAction*pngSaveAction = new QAction("PNG-8...", this);
+
394  pngSaveAction->setData("PNG");
+
395  // When clicked call IntelliPhotoGui::save()
+
396  connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave()));
+
397  // Attach each PNG in save Menu
+
398  actionSaveAs.append(pngSaveAction);
+
399  pngSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S));
+
400 
+
401  // Create exit action and tie to IntelliPhotoGui::close()
+
402  actionExit = new QAction(tr("&Exit"), this);
+
403  actionExit->setShortcuts(QKeySequence::Quit);
+
404  connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
+
405 
+
406  actionOpen = new QAction(tr("&Open"), this);
+
407  actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
+
408  connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()));
409 
-
410  // Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer()
-
411  actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this);
-
412  actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT));
-
413  connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer()));
+
410  // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer()
+
411  actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this);
+
412  actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
+
413  connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer()));
414 
-
415  // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer()
-
416  actionDeleteLayer = new QAction(tr("&Delete Layer..."), this);
-
417  actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D));
-
418  connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer()));
-
419 
-
420  actionChangeDim = new QAction(tr("&Change Dimension"), this);
-
421  actionChangeDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_X));
-
422  connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim()));
-
423  connect(dimCanvas, SIGNAL(clicked()), this, SLOT(slotChangeDim()));
-
424 
-
425  actionSetActiveLayer = new QAction(tr("&set Active"), this);
-
426  actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));
-
427  connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer()));
-
428 
-
429  actionSetActiveAlpha = new QAction(tr("&set Alpha"), this);
-
430  actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A));
-
431  connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha()));
-
432 
-
433  actionSetPolygon = new QAction(tr("&set new Polygondata"), this);
-
434  actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P));
-
435  connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon()));
-
436 
-
437  actionMovePositionUp = new QAction(tr("&move Up"), this);
-
438  actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up));
-
439  connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp()));
-
440 
-
441  actionMovePositionDown = new QAction(tr("&move Down"), this);
-
442  actionMovePositionDown->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down));
-
443  connect(actionMovePositionDown, SIGNAL(triggered()), this, SLOT(slotPositionMoveDown()));
-
444 
-
445  actionMovePositionLeft = new QAction(tr("&move Left"), this);
-
446  actionMovePositionLeft->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left));
-
447  connect(actionMovePositionLeft, SIGNAL(triggered()), this, SLOT(slotPositionMoveLeft()));
-
448 
-
449  actionMovePositionRight = new QAction(tr("&move Right"), this);
-
450  actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right));
-
451  connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight()));
-
452 
-
453  actionMoveLayerUp = new QAction(tr("&move Layer Up"), this);
-
454  actionMoveLayerUp->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Up));
-
455  connect(actionMoveLayerUp, SIGNAL(triggered()), this, SLOT(slotMoveLayerUp()));
-
456 
-
457  actionMoveLayerDown = new QAction(tr("&move Layer Down"), this);
-
458  actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down));
-
459  connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown()));
-
460 
-
461  //Create Update RenderSettings Actions here
-
462  actionUpdateRenderSettingsOn = new QAction(tr("&On"), this);
-
463  actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A));
-
464  connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn()));
-
465 
-
466  actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this);
-
467  actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D));
-
468  connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff()));
-
469 
-
470  //Create Color Actions here
-
471  actionColorPickerFirstColor = new QAction(tr("&Main"), this);
-
472  actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N));
-
473  connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor()));
-
474  connect(FirstColorButton, SIGNAL(clicked()), this, SLOT(slotSetFirstColor()));
+
415 
+
416  // Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer()
+
417  actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this);
+
418  actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT));
+
419  connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer()));
+
420 
+
421  // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer()
+
422  actionDeleteLayer = new QAction(tr("&Delete Layer"), this);
+
423  actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D));
+
424  connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer()));
+
425 
+
426  actionChangeDim = new QAction(tr("&Change Dimension"), this);
+
427  actionChangeDim->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_X));
+
428  connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim()));
+
429  connect(dimCanvas, SIGNAL(clicked()), this, SLOT(slotChangeDim()));
+
430 
+
431  actionSetActiveLayer = new QAction(tr("&Set Active"), this);
+
432  actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));
+
433  connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer()));
+
434 
+
435  actionSetActiveAlpha = new QAction(tr("&Set Alpha"), this);
+
436  actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A));
+
437  connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha()));
+
438 
+
439  actionSetPolygon = new QAction(tr("&Set Polygon Data"), this);
+
440  actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P));
+
441  connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon()));
+
442 
+
443  actionMovePositionUp = new QAction(tr("&Move Up"), this);
+
444  actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up));
+
445  connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp()));
+
446 
+
447  actionMovePositionDown = new QAction(tr("&Move Down"), this);
+
448  actionMovePositionDown->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down));
+
449  connect(actionMovePositionDown, SIGNAL(triggered()), this, SLOT(slotPositionMoveDown()));
+
450 
+
451  actionMovePositionLeft = new QAction(tr("&Move Left"), this);
+
452  actionMovePositionLeft->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left));
+
453  connect(actionMovePositionLeft, SIGNAL(triggered()), this, SLOT(slotPositionMoveLeft()));
+
454 
+
455  actionMovePositionRight = new QAction(tr("&Move Right"), this);
+
456  actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right));
+
457  connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight()));
+
458 
+
459  actionMoveLayerUp = new QAction(tr("&Move Forth"), this);
+
460  actionMoveLayerUp->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Up));
+
461  connect(actionMoveLayerUp, SIGNAL(triggered()), this, SLOT(slotMoveLayerUp()));
+
462 
+
463  actionMoveLayerDown = new QAction(tr("&Move Back"), this);
+
464  actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down));
+
465  connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown()));
+
466 
+
467  // Create Update RenderSettings Actions here
+
468  actionUpdateFastRenderSettingsOn = new QAction(tr("&On"), this);
+
469  actionUpdateFastRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A));
+
470  connect(actionUpdateFastRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOn()));
+
471 
+
472  actionUpdateFastRenderSettingsOff = new QAction(tr("&Off"), this);
+
473  actionUpdateFastRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D));
+
474  connect(actionUpdateFastRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOff()));
475 
-
476  actionColorPickerSecondColor = new QAction(tr("&Secondary"), this);
-
477  actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M));
-
478  connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor()));
-
479  connect(SecondColorButton, SIGNAL(clicked()), this, SLOT(slotSetSecondColor()));
-
480 
-
481  actionColorSwap = new QAction(tr("&Switch"), this);
-
482  actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S));
-
483  connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor()));
-
484  connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor()));
-
485 
-
486  //Create Tool actions down here
-
487  actionCreatePlainTool = new QAction(tr("&Plain"), this);
-
488  actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P));
-
489  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
490  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool()));
+
476  // Create Color Actions here
+
477  actionColorPickerFirstColor = new QAction(tr("&Main"), this);
+
478  actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N));
+
479  connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor()));
+
480  connect(FirstColorButton, SIGNAL(clicked()), this, SLOT(slotSetFirstColor()));
+
481 
+
482  actionColorPickerSecondColor = new QAction(tr("&Secondary"), this);
+
483  actionColorPickerSecondColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_M));
+
484  connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor()));
+
485  connect(SecondColorButton, SIGNAL(clicked()), this, SLOT(slotSetSecondColor()));
+
486 
+
487  actionColorSwap = new QAction(tr("&Switch"), this);
+
488  actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S));
+
489  connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor()));
+
490  connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor()));
491 
-
492 
-
493  actionCreatePenTool = new QAction(tr("&Pen"),this);
-
494  actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S));
-
495  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
496  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool()));
+
492  // Create Tool actions down here
+
493  actionCreatePlainTool = new QAction(tr("&Plain"), this);
+
494  actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P));
+
495  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
496  connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool()));
497 
-
498  actionCreateLineTool = new QAction(tr("&Line"), this);
-
499  actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_L));
-
500  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
501  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool()));
-
502 
-
503  actionCreateCircleTool = new QAction(tr("&Circle"), this);
-
504  actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_C));
-
505  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
506  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool()));
-
507 
-
508  actionCreateRectangleTool = new QAction(tr("&Rectangle"), this);
-
509  actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_R));
-
510  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
511  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool()));
-
512 
-
513  actionCreatePolygonTool = new QAction(tr("&Polygon"), this);
-
514  actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V));
-
515  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
516  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool()));
-
517 
-
518  actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this);
-
519  actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_F));
-
520  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
-
521  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool()));
-
522 
-
523  // Create about action and tie to IntelliPhotoGui::about()
-
524  actionAboutDialog = new QAction(tr("&About"), this);
-
525  actionAboutDialog->setShortcut(Qt::Key_F2);
-
526  connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog()));
-
527 
-
528  // Create about Qt action and tie to IntelliPhotoGui::aboutQt()
-
529  actionAboutQtDialog = new QAction(tr("About &Qt"), this);
-
530  actionAboutQtDialog->setShortcut(Qt::Key_F3);
-
531  connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-
532 
-
533  connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
-
534  connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
-
535 
-
536  connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
537  connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool()));
-
538 
-
539  connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
540  connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool()));
+
498 
+
499  actionCreatePenTool = new QAction(tr("&Pen"),this);
+
500  actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S));
+
501  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
502  connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool()));
+
503 
+
504  actionCreateLineTool = new QAction(tr("&Line"), this);
+
505  actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_L));
+
506  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
507  connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool()));
+
508 
+
509  actionCreateCircleTool = new QAction(tr("&Circle"), this);
+
510  actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_C));
+
511  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
512  connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool()));
+
513 
+
514  actionCreateRectangleTool = new QAction(tr("&Rectangle"), this);
+
515  actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_R));
+
516  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
517  connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool()));
+
518 
+
519  actionCreatePolygonTool = new QAction(tr("&Polygon"), this);
+
520  actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V));
+
521  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
522  connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool()));
+
523 
+
524  actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this);
+
525  actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_F));
+
526  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
527  connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool()));
+
528 
+
529  actionCreateGradientTool = new QAction(tr("&Gradient"),this);
+
530  actionCreateGradientTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_G));
+
531  connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
+
532  connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool()));
+
533 
+
534  // Create about action and tie to IntelliPhotoGui::about()
+
535  actionAboutDialog = new QAction(tr("&About"), this);
+
536  connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog()));
+
537 
+
538  // Create about Qt action and tie to IntelliPhotoGui::aboutQt()
+
539  actionAboutQtDialog = new QAction(tr("About &Qt"), this);
+
540  connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
541 
-
542  connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
543  connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool()));
+
542  connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
+
543  connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
544 
-
545  connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
546  connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool()));
+
545  connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
546  connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool()));
547 
-
548  connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
549  connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool()));
+
548  connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
549  connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool()));
550 
-
551  connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
552  connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool()));
+
551  connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
552  connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool()));
553 
-
554  connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
-
555  connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool()));
+
554  connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
555  connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool()));
556 
-
557  actionSetWidth = new QAction(tr("&Set Width"),this);
-
558  actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W));
-
559  connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth()));
-
560 
-
561  actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this);
-
562  actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A));
-
563  connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha()));
-
564 
-
565  actionGoBack = new QAction(tr("&Go back"),this);
-
566  actionGoBack->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Z));
-
567  connect(actionGoBack, SIGNAL(triggered()), this, SLOT(slotGoBack()));
+
557  connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
558  connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool()));
+
559 
+
560  connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
561  connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool()));
+
562 
+
563  connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
564  connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool()));
+
565 
+
566  connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
+
567  connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool()));
568 
-
569  actionGoForward = new QAction(tr("&Go forward"),this);
-
570  actionGoForward->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Y));
-
571  connect(actionGoForward, SIGNAL(triggered()), this, SLOT(slotGoForward()));
-
572 }
-
573 
-
574 // Create the menubar
-
575 void IntelliPhotoGui::createMenus(){
-
576  // Create Save As option and the list of file types
-
577  saveAsMenu = new QMenu(tr("&Save As"), this);
-
578  foreach (QAction * action, actionSaveAs)
-
579  saveAsMenu->addAction(action);
+
569  actionSetWidth = new QAction(tr("&Set Width"),this);
+
570  actionSetWidth->setShortcut(QKeySequence(Qt::ALT + Qt::Key_W));
+
571  connect(actionSetWidth, SIGNAL(triggered()), this, SLOT(slotSetWidth()));
+
572 
+
573  actionSetInnerAlpha = new QAction(tr("&Set Inner Alpha"),this);
+
574  actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A));
+
575  connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha()));
+
576 
+
577  actionGoBack = new QAction(tr("&Undo"),this);
+
578  actionGoBack->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Z));
+
579  connect(actionGoBack, SIGNAL(triggered()), this, SLOT(slotGoBack()));
580 
-
581  // Attach all actions to File
-
582  fileMenu = new QMenu(tr("&File"), this);
-
583  fileMenu->addAction(actionOpen);
-
584  fileMenu->addMenu(saveAsMenu);
-
585  fileMenu->addSeparator();
-
586  fileMenu->addAction(actionExit);
-
587 
-
588  //Attach all actions to Render Settings
-
589  renderMenu = new QMenu(tr("&Fast Renderer"), this);
-
590  renderMenu->addAction(actionUpdateRenderSettingsOn);
-
591  renderMenu->addAction(actionUpdateRenderSettingsOff);
+
581  actionGoForward = new QAction(tr("&Redo"),this);
+
582  actionGoForward->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Y));
+
583  connect(actionGoForward, SIGNAL(triggered()), this, SLOT(slotGoForward()));
+
584 }
+
585 
+
586 // Create the menubar
+
587 void IntelliPhotoGui::createMenus(){
+
588  // Create Save As option and the list of file types
+
589  saveAsMenu = new QMenu(tr("&Export As"), this);
+
590  foreach (QAction * action, actionSaveAs)
+
591  saveAsMenu->addAction(action);
592 
-
593  //Attach all Layer Creations to Menu
-
594  layerCreationMenu = new QMenu(tr("&Create new Layer"), this);
-
595  layerCreationMenu->addAction(actionCreateNewRasterLayer);
-
596  layerCreationMenu->addAction(actionCreateNewShapedLayer);
-
597 
-
598  // Attach all actions to Layer
-
599  layerMenu = new QMenu(tr("&Layer"), this);
-
600  layerMenu->addMenu(layerCreationMenu);
-
601  layerMenu->addSeparator();
-
602  layerMenu->addAction(actionSetActiveAlpha);
-
603  layerMenu->addAction(actionSetActiveLayer);
-
604  layerMenu->addAction(actionSetPolygon);
-
605  layerMenu->addSeparator();
-
606  layerMenu->addAction(actionMovePositionUp);
-
607  layerMenu->addAction(actionMovePositionDown);
-
608  layerMenu->addAction(actionMovePositionLeft);
-
609  layerMenu->addAction(actionMovePositionRight);
-
610  layerMenu->addAction(actionMoveLayerUp);
-
611  layerMenu->addAction(actionMoveLayerDown);
-
612  layerMenu->addSeparator();
-
613  layerMenu->addAction(actionDeleteLayer);
-
614 
-
615  //Attach all Color Options
-
616  colorMenu = new QMenu(tr("&Color"), this);
-
617  colorMenu->addAction(actionColorPickerFirstColor);
-
618  colorMenu->addAction(actionColorPickerSecondColor);
-
619  colorMenu->addAction(actionColorSwap);
-
620 
-
621  //Attach all Tool Creation Actions
-
622  toolCreationMenu = new QMenu(tr("&Drawingtools"), this);
-
623  toolCreationMenu->addAction(actionCreateCircleTool);
-
624  toolCreationMenu->addAction(actionCreateFloodFillTool);
-
625  toolCreationMenu->addAction(actionCreateLineTool);
-
626  toolCreationMenu->addAction(actionCreatePenTool);
-
627  toolCreationMenu->addAction(actionCreatePlainTool);
-
628  toolCreationMenu->addAction(actionCreatePolygonTool);
-
629  toolCreationMenu->addAction(actionCreateRectangleTool);
-
630 
-
631  //Attach all Tool Setting Actions
-
632  toolSettingsMenu = new QMenu(tr("&Toolsettings"), this);
-
633  toolSettingsMenu->addAction(actionSetWidth);
-
634  toolSettingsMenu->addAction(actionSetInnerAlpha);
-
635 
-
636  //Attach all Tool Options
-
637  toolMenu = new QMenu(tr("&Tools"), this);
-
638  toolMenu->addMenu(toolCreationMenu);
-
639  toolMenu->addMenu(toolSettingsMenu);
-
640  toolMenu->addSeparator();
-
641  toolMenu->addMenu(colorMenu);
-
642 
-
643  // Attach all actions to Options
-
644  optionMenu = new QMenu(tr("&Options"), this);
-
645  optionMenu->addAction(actionGoBack);
-
646  optionMenu->addAction(actionGoForward);
-
647  optionMenu->addMenu(layerMenu);
-
648  optionMenu->addMenu(toolMenu);
-
649  optionMenu->addSeparator();
-
650  optionMenu->addMenu(renderMenu);
-
651  optionMenu->addAction(actionChangeDim);
-
652 
-
653  // Attach all actions to Help
-
654  helpMenu = new QMenu(tr("&Help"), this);
-
655  helpMenu->addAction(actionAboutDialog);
-
656  helpMenu->addAction(actionAboutQtDialog);
-
657 
-
658  // Add menu items to the menubar
-
659  menuBar()->addMenu(fileMenu);
-
660  menuBar()->addMenu(optionMenu);
-
661  menuBar()->addMenu(helpMenu);
-
662 }
-
663 
-
664 void IntelliPhotoGui::createGui(){
-
665  // create a central widget to work on
-
666  centralGuiWidget = new QWidget(this);
-
667  setCentralWidget(centralGuiWidget);
+
593  // Attach all actions to file menu
+
594  fileMenu = new QMenu(tr("&File"), this);
+
595  fileMenu->addAction(actionOpen);
+
596  fileMenu->addMenu(saveAsMenu);
+
597  fileMenu->addSeparator();
+
598  fileMenu->addAction(actionExit);
+
599 
+
600  // Attach the save project option to file menu
+
601  QAction*projectSaveAction = new QAction("Save Project", this);
+
602  projectSaveAction->setData("idf");
+
603  connect(projectSaveAction, SIGNAL(triggered()), this, SLOT(slotSave()));
+
604  projectSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
+
605  fileMenu->addAction(projectSaveAction);
+
606 
+
607  // Attach all actions to Render Settings
+
608  renderMenu = new QMenu(tr("&Fast Renderer"), this);
+
609  renderMenu->addAction(actionUpdateFastRenderSettingsOn);
+
610  renderMenu->addAction(actionUpdateFastRenderSettingsOff);
+
611 
+
612  // Attach all Layer Creations to Menu
+
613  layerCreationMenu = new QMenu(tr("&Create Layer"), this);
+
614  layerCreationMenu->addAction(actionCreateNewRasterLayer);
+
615  layerCreationMenu->addAction(actionCreateNewShapedLayer);
+
616 
+
617  // Attach all actions to Layer
+
618  layerMenu = new QMenu(tr("&Layer"), this);
+
619  layerMenu->addMenu(layerCreationMenu);
+
620  layerMenu->addSeparator();
+
621  layerMenu->addAction(actionSetActiveAlpha);
+
622  layerMenu->addAction(actionSetActiveLayer);
+
623  layerMenu->addAction(actionSetPolygon);
+
624  layerMenu->addSeparator();
+
625  layerMenu->addAction(actionMovePositionUp);
+
626  layerMenu->addAction(actionMovePositionDown);
+
627  layerMenu->addAction(actionMovePositionLeft);
+
628  layerMenu->addAction(actionMovePositionRight);
+
629  layerMenu->addAction(actionMoveLayerUp);
+
630  layerMenu->addAction(actionMoveLayerDown);
+
631  layerMenu->addSeparator();
+
632  layerMenu->addAction(actionDeleteLayer);
+
633 
+
634  // Attach all Color Options
+
635  colorMenu = new QMenu(tr("&Color"), this);
+
636  colorMenu->addAction(actionColorPickerFirstColor);
+
637  colorMenu->addAction(actionColorPickerSecondColor);
+
638  colorMenu->addAction(actionColorSwap);
+
639 
+
640  // Attach all Tool Creation Actions
+
641  toolCreationMenu = new QMenu(tr("&Tool Selection"), this);
+
642  toolCreationMenu->addAction(actionCreateCircleTool);
+
643  toolCreationMenu->addAction(actionCreateFloodFillTool);
+
644  toolCreationMenu->addAction(actionCreateGradientTool);
+
645  toolCreationMenu->addAction(actionCreateLineTool);
+
646  toolCreationMenu->addAction(actionCreatePenTool);
+
647  toolCreationMenu->addAction(actionCreatePlainTool);
+
648  toolCreationMenu->addAction(actionCreatePolygonTool);
+
649  toolCreationMenu->addAction(actionCreateRectangleTool);
+
650 
+
651  // Attach all Tool Setting Actions
+
652  toolSettingsMenu = new QMenu(tr("&Tool Settings"), this);
+
653  toolSettingsMenu->addAction(actionSetWidth);
+
654  toolSettingsMenu->addAction(actionSetInnerAlpha);
+
655 
+
656  // Attach all Tool Options
+
657  toolMenu = new QMenu(tr("&Tools"), this);
+
658  toolMenu->addMenu(toolCreationMenu);
+
659  toolMenu->addMenu(toolSettingsMenu);
+
660 
+
661  // Attach all actions to Options
+
662  optionMenu = new QMenu(tr("&Options"), this);
+
663  optionMenu->addAction(actionGoBack);
+
664  optionMenu->addAction(actionGoForward);
+
665  optionMenu->addSeparator();
+
666  optionMenu->addMenu(renderMenu);
+
667  optionMenu->addAction(actionChangeDim);
668 
-
669  // create the grid for the layout
-
670  mainLayout = new QGridLayout(centralGuiWidget);
-
671  centralGuiWidget->setLayout(mainLayout);
-
672 
-
673  // create Gui elements
-
674  // get and set max width and height
-
675  paintingArea = new PaintingArea(1280, 720);
-
676  paintingArea->guiReference = this;
-
677 
-
678  preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg");
-
679  CircleButton = new QPushButton();
-
680  CircleButton->setFixedSize(Buttonsize);
-
681  CircleButton->setIcon(preview);
-
682  CircleButton->setIconSize(Buttonsize);
-
683  CircleButton->setCheckable(true);
-
684 
-
685  preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg");
-
686  FloodFillButton = new QPushButton();
-
687  FloodFillButton->setFixedSize(Buttonsize);
-
688  FloodFillButton->setIcon(preview);
-
689  FloodFillButton->setIconSize(Buttonsize);
-
690  FloodFillButton->setCheckable(true);
+
669  // Attach all actions to Help
+
670  helpMenu = new QMenu(tr("&Help"), this);
+
671  helpMenu->addAction(actionAboutDialog);
+
672  helpMenu->addAction(actionAboutQtDialog);
+
673 
+
674  // Add menu items to the menubar
+
675  menuBar()->addMenu(fileMenu);
+
676  menuBar()->addMenu(optionMenu);
+
677  menuBar()->addMenu(layerMenu);
+
678  menuBar()->addMenu(toolMenu);
+
679  menuBar()->addMenu(colorMenu);
+
680  menuBar()->addMenu(helpMenu);
+
681 }
+
682 
+
683 void IntelliPhotoGui::createGui(){
+
684  // create a central widget to work on
+
685  centralGuiWidget = new QWidget(this);
+
686  setCentralWidget(centralGuiWidget);
+
687 
+
688  // create the grid for the layout
+
689  mainLayout = new QGridLayout(centralGuiWidget);
+
690  centralGuiWidget->setLayout(mainLayout);
691 
-
692  preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg");
-
693  LineButton = new QPushButton();
-
694  LineButton->setFixedSize(Buttonsize);
-
695  LineButton->setIcon(preview);
-
696  LineButton->setIconSize(Buttonsize);
-
697  LineButton->setCheckable(true);
-
698 
-
699  preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg");
-
700  PenButton = new QPushButton();
-
701  PenButton->setFixedSize(Buttonsize);
-
702  PenButton->setIcon(preview);
-
703  PenButton->setIconSize(Buttonsize);
-
704  PenButton->setCheckable(true);
-
705 
-
706  preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg");
-
707  PlainButton = new QPushButton();
-
708  PlainButton->setFixedSize(Buttonsize);
-
709  PlainButton->setIcon(preview);
-
710  PlainButton->setIconSize(Buttonsize);
-
711  PlainButton->setCheckable(true);
-
712 
-
713  preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg");
-
714  PolygonButton = new QPushButton();
-
715  PolygonButton->setFixedSize(Buttonsize);
-
716  PolygonButton->setIcon(preview);
-
717  PolygonButton->setIconSize(Buttonsize);
-
718  PolygonButton->setCheckable(true);
-
719 
-
720  preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg");
-
721  RectangleButton = new QPushButton();
-
722  RectangleButton->setFixedSize(Buttonsize);
-
723  RectangleButton->setIcon(preview);
-
724  RectangleButton->setIconSize(Buttonsize);
-
725  RectangleButton->setCheckable(true);
-
726 
-
727  WidthLine = new QLabel();
-
728  WidthLine->setText("Width");
-
729  WidthLine->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
-
730 
-
731  EditLineWidth = new QLineEdit();
-
732  EditLineWidth->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
-
733  EditLineWidth->setText("5");
-
734  ValidatorLineWidth = new QIntValidator();
-
735  ValidatorLineWidth->setTop(99);
-
736  ValidatorLineWidth->setBottom(1);
-
737  EditLineWidth->setValidator(ValidatorLineWidth);
-
738 
-
739  innerAlphaLine = new QLabel();
-
740  innerAlphaLine->setText("Inner Alpha");
-
741  innerAlphaLine->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
-
742 
-
743  EditLineInnerAlpha = new QLineEdit();
-
744  EditLineInnerAlpha->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
-
745  EditLineInnerAlpha->setText("255");
-
746  ValidatorInnerAlpha = new QIntValidator();
-
747  ValidatorInnerAlpha->setTop(999);
-
748  ValidatorInnerAlpha->setBottom(0);
-
749  EditLineInnerAlpha->setValidator(ValidatorInnerAlpha);
+
692  // create Gui elements
+
693  // get and set max width and height
+
694  paintingArea = new PaintingArea(1280, 720);
+
695  paintingArea->guiReference = this;
+
696 
+
697  QScreen*screen = QGuiApplication::primaryScreen();
+
698  QRect screenGeometry = screen->geometry();
+
699  Buttonsize.setWidth(screenGeometry.width() / 20);
+
700  Buttonsize.setHeight(screenGeometry.height() / 20);
+
701 
+
702  preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg");
+
703  CircleButton = new QPushButton();
+
704  CircleButton->setFixedSize(Buttonsize);
+
705  CircleButton->setIcon(preview);
+
706  CircleButton->setIconSize(Buttonsize);
+
707  CircleButton->setCheckable(true);
+
708 
+
709  preview = QPixmap(":/Icons/Buttons/icons/flood-fill-tool.svg");
+
710  FloodFillButton = new QPushButton();
+
711  FloodFillButton->setFixedSize(Buttonsize);
+
712  FloodFillButton->setIcon(preview);
+
713  FloodFillButton->setIconSize(Buttonsize);
+
714  FloodFillButton->setCheckable(true);
+
715 
+
716  preview = QPixmap(":/Icons/Buttons/icons/gradient-tool.svg");
+
717  GradientButton = new QPushButton();
+
718  GradientButton->setFixedSize(Buttonsize);
+
719  GradientButton->setIcon(preview);
+
720  GradientButton->setIconSize(Buttonsize);
+
721  GradientButton->setCheckable(true);
+
722 
+
723  preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg");
+
724  LineButton = new QPushButton();
+
725  LineButton->setFixedSize(Buttonsize);
+
726  LineButton->setIcon(preview);
+
727  LineButton->setIconSize(Buttonsize);
+
728  LineButton->setCheckable(true);
+
729 
+
730  preview = QPixmap(":/Icons/Buttons/icons/pen-tool.svg");
+
731  PenButton = new QPushButton();
+
732  PenButton->setFixedSize(Buttonsize);
+
733  PenButton->setIcon(preview);
+
734  PenButton->setIconSize(Buttonsize);
+
735  PenButton->setCheckable(true);
+
736 
+
737  preview = QPixmap(":/Icons/Buttons/icons/plain-tool.svg");
+
738  PlainButton = new QPushButton();
+
739  PlainButton->setFixedSize(Buttonsize);
+
740  PlainButton->setIcon(preview);
+
741  PlainButton->setIconSize(Buttonsize);
+
742  PlainButton->setCheckable(true);
+
743 
+
744  preview = QPixmap(":/Icons/Buttons/icons/polygon-tool.svg");
+
745  PolygonButton = new QPushButton();
+
746  PolygonButton->setFixedSize(Buttonsize);
+
747  PolygonButton->setIcon(preview);
+
748  PolygonButton->setIconSize(Buttonsize);
+
749  PolygonButton->setCheckable(true);
750 
-
751  FirstColorButton = new QPushButton();
-
752  FirstColorButton->setFixedSize(Buttonsize);
-
753 
-
754  SecondColorButton = new QPushButton();
-
755  SecondColorButton->setFixedSize(Buttonsize);
-
756 
-
757  preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png");
-
758  SwitchColorButton = new QPushButton();
-
759  SwitchColorButton->setFixedSize(Buttonsize.width() * 2,Buttonsize.height());
-
760  SwitchColorButton->setIcon(preview);
-
761  SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height()));
-
762 
-
763  ActiveLayerLine = new QLabel();
-
764  QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1);
-
765  ActiveLayerLine->setText(string);
-
766  ActiveLayerLine->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3);
-
767 
-
768  IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
-
769  if(activePicture) {
-
770  preview = preview.fromImage(activePicture->getImageData());
-
771  }else{
-
772  QImage tmp(1,1,QImage::Format_ARGB32);
-
773  tmp.fill(Qt::transparent);
-
774  preview = preview.fromImage(tmp);
-
775  }
-
776 
-
777  ActiveLayerImageLabel = new QLabel();
-
778  ActiveLayerImageLabel->setFixedSize(Buttonsize * 2);
-
779  ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
-
780 
-
781  dimActive = new QPushButton();
-
782  dimActive->setFixedSize(Buttonsize.width() * 2,Buttonsize.height() / 2);
-
783  dimActive->setText("0x0");
+
751  preview = QPixmap(":/Icons/Buttons/icons/rectangle-tool.svg");
+
752  RectangleButton = new QPushButton();
+
753  RectangleButton->setFixedSize(Buttonsize);
+
754  RectangleButton->setIcon(preview);
+
755  RectangleButton->setIconSize(Buttonsize);
+
756  RectangleButton->setCheckable(true);
+
757 
+
758  WidthLine = new QLabel();
+
759  WidthLine->setText("Width");
+
760  WidthLine->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
761 
+
762  EditLineWidth = new QLineEdit();
+
763  EditLineWidth->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
764  EditLineWidth->setText("5");
+
765  ValidatorLineWidth = new QIntValidator();
+
766  ValidatorLineWidth->setTop(99);
+
767  ValidatorLineWidth->setBottom(1);
+
768  EditLineWidth->setValidator(ValidatorLineWidth);
+
769 
+
770  innerAlphaLine = new QLabel();
+
771  innerAlphaLine->setText("Inner Alpha");
+
772  innerAlphaLine->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
773 
+
774  EditLineInnerAlpha = new QLineEdit();
+
775  EditLineInnerAlpha->setFixedSize(Buttonsize.width() * 2,(Buttonsize.height() * 2) / 3);
+
776  EditLineInnerAlpha->setText("255");
+
777  ValidatorInnerAlpha = new QIntValidator();
+
778  ValidatorInnerAlpha->setTop(999);
+
779  ValidatorInnerAlpha->setBottom(0);
+
780  EditLineInnerAlpha->setValidator(ValidatorInnerAlpha);
+
781 
+
782  FirstColorButton = new QPushButton();
+
783  FirstColorButton->setFixedSize(Buttonsize);
784 
-
785  dimCanvas = new QPushButton();
-
786  dimCanvas->setFixedSize(Buttonsize.width() * 2,Buttonsize.height() / 2);
-
787  QString String = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height());
-
788  dimCanvas->setText(String);
-
789 
-
790  ScrollArea = new QScrollArea(this);
-
791  ScrollArea->setBackgroundRole(QPalette::Dark);
-
792  ScrollArea->setWidget(paintingArea);
-
793  ScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
-
794  ScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
-
795 
-
796  // set gui elements
-
797  mainLayout->addWidget(ScrollArea,1,1,20,1);
-
798  mainLayout->addWidget(CircleButton,1,2,1,1);
-
799  mainLayout->addWidget(FloodFillButton,1,3,1,1);
-
800  mainLayout->addWidget(LineButton,2,2,1,1);
-
801  mainLayout->addWidget(PenButton,2,3,1,1);
-
802  mainLayout->addWidget(PlainButton,3,2,1,1);
-
803  mainLayout->addWidget(PolygonButton,3,3,1,1);
-
804  mainLayout->addWidget(RectangleButton,4,2,1,1);
-
805  mainLayout->addWidget(WidthLine,5,2,1,2);
-
806  mainLayout->addWidget(EditLineWidth,6,2,1,2);
-
807  mainLayout->addWidget(innerAlphaLine,7,2,1,2);
-
808  mainLayout->addWidget(EditLineInnerAlpha,8,2,1,2);
-
809  mainLayout->addWidget(FirstColorButton,9,2,1,1);
-
810  mainLayout->addWidget(SecondColorButton,9,3,1,1);
-
811  mainLayout->addWidget(SwitchColorButton,10,2,1,2);
-
812  mainLayout->addWidget(ActiveLayerLine,11,2,1,2);
-
813  mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2);
-
814  mainLayout->addWidget(dimActive,13,2,1,2);
-
815  mainLayout->addWidget(dimCanvas,14,2,1,2);
-
816  mainLayout->setHorizontalSpacing(0);
-
817 
-
818 }
-
819 
-
820 void IntelliPhotoGui::setIntelliStyle(){
-
821  // Set the title
-
822  setWindowTitle("IntelliPhoto Prototype");
-
823  // Set style sheet
-
824  this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);");
-
825 
-
826  QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
-
827  FirstColorButton->setStyleSheet(string);
-
828  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
-
829  SecondColorButton->setStyleSheet(string);
-
830 }
-
831 
-
832 bool IntelliPhotoGui::maybeSave(){
-
833  // Check for changes since last save
-
834 #ifdef QT_NO_DEBUG
-
835  QMessageBox::StandardButton ret;
-
836 
-
837  // Painting is the title of the window
-
838  // Add text and the buttons
-
839  ret = QMessageBox::warning(this, tr("Painting"),
-
840  tr("The image has been modified.\n"
-
841  "Do you want to save your changes?"),
-
842  QMessageBox::Save | QMessageBox::Discard
-
843  | QMessageBox::Cancel);
-
844 
-
845  // If save button clicked call for file to be saved
-
846  if (ret == QMessageBox::Save) {
-
847  return saveFile("png");
-
848 
-
849  // If cancel do nothing
-
850  } else if (ret == QMessageBox::Cancel) {
-
851  return false;
-
852  }
-
853 #endif
-
854  return true;
+
785  SecondColorButton = new QPushButton();
+
786  SecondColorButton->setFixedSize(Buttonsize);
+
787 
+
788  preview = QPixmap(":/Icons/Buttons/icons/Wechselpfeile.png");
+
789  SwitchColorButton = new QPushButton();
+
790  SwitchColorButton->setFixedSize(Buttonsize.width() * 2,Buttonsize.height());
+
791  SwitchColorButton->setIcon(preview);
+
792  SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height()));
+
793 
+
794  ActiveLayerLabel = new QLabel();
+
795  QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1);
+
796  ActiveLayerLabel->setText(string);
+
797  ActiveLayerLabel->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3);
+
798 
+
799  IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
+
800  if(activePicture) {
+
801  preview = preview.fromImage(activePicture->getImageData());
+
802  }else{
+
803  QImage tmp(1,1,QImage::Format_ARGB32);
+
804  tmp.fill(Qt::transparent);
+
805  preview = preview.fromImage(tmp);
+
806  }
+
807 
+
808  ActiveLayerImageLabel = new QLabel();
+
809  ActiveLayerImageLabel->setFixedSize(Buttonsize * 2);
+
810  ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
+
811 
+
812  dimActive = new QPushButton();
+
813  dimActive->setFixedSize(Buttonsize.width() * 2,Buttonsize.height() / 2);
+
814  dimActive->setText("0x0");
+
815 
+
816  dimCanvas = new QPushButton();
+
817  dimCanvas->setFixedSize(Buttonsize.width() * 2,Buttonsize.height() / 2);
+
818  QString String = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height());
+
819  dimCanvas->setText(String);
+
820 
+
821  FastRendererLabel = new QLabel();
+
822  FastRendererLabel->setFixedSize(Buttonsize.width() * 2 + 15,(Buttonsize.height() * 2) / 3);
+
823  FastRendererLabel->setText("Fast Render: On");
+
824 
+
825  ScrollArea = new QScrollArea(this);
+
826  ScrollArea->setBackgroundRole(QPalette::Dark);
+
827  ScrollArea->setWidget(paintingArea);
+
828  ScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+
829  ScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+
830 
+
831  // set gui elements
+
832  mainLayout->addWidget(ScrollArea,1,1,20,1);
+
833  mainLayout->addWidget(CircleButton,1,2,1,1);
+
834  mainLayout->addWidget(FloodFillButton,1,3,1,1);
+
835  mainLayout->addWidget(LineButton,2,2,1,1);
+
836  mainLayout->addWidget(PenButton,2,3,1,1);
+
837  mainLayout->addWidget(PlainButton,3,2,1,1);
+
838  mainLayout->addWidget(PolygonButton,3,3,1,1);
+
839  mainLayout->addWidget(RectangleButton,4,2,1,1);
+
840  mainLayout->addWidget(GradientButton,4,3,1,1);
+
841  mainLayout->addWidget(WidthLine,5,2,1,2);
+
842  mainLayout->addWidget(EditLineWidth,6,2,1,2);
+
843  mainLayout->addWidget(innerAlphaLine,7,2,1,2);
+
844  mainLayout->addWidget(EditLineInnerAlpha,8,2,1,2);
+
845  mainLayout->addWidget(FirstColorButton,9,2,1,1);
+
846  mainLayout->addWidget(SecondColorButton,9,3,1,1);
+
847  mainLayout->addWidget(SwitchColorButton,10,2,1,2);
+
848  mainLayout->addWidget(ActiveLayerLabel,11,2,1,2);
+
849  mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2);
+
850  mainLayout->addWidget(dimActive,13,2,1,2);
+
851  mainLayout->addWidget(dimCanvas,14,2,1,2);
+
852  mainLayout->addWidget(FastRendererLabel,15,2,1,2);
+
853  mainLayout->setHorizontalSpacing(0);
+
854 
855 }
856 
-
857 bool IntelliPhotoGui::saveFile(const QByteArray &fileFormat){
-
858  // Define path, name and default file type
-
859  QString initialPath = QDir::currentPath() + "/untitled." + fileFormat;
-
860 
-
861  // Get selected file from dialog
-
862  // Add the proper file formats and extensions
-
863  QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
-
864  initialPath,
-
865  tr("%1 Files (*.%2);;All Files (*)")
-
866  .arg(QString::fromLatin1(fileFormat.toUpper()))
-
867  .arg(QString::fromLatin1(fileFormat)), nullptr, QFileDialog::DontUseNativeDialog);
+
857 void IntelliPhotoGui::setIntelliStyle(){
+
858  // Set the title
+
859  setWindowTitle("IntelliPhoto Prototype");
+
860  // Set style sheet
+
861  this->setStyleSheet("color: white;" "background-color: rgb(64, 64, 64);" "selection-color: rgb(200, 10, 10);" "selection-background-color: rgb(64, 64, 64);");
+
862 
+
863  QString string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
+
864  FirstColorButton->setStyleSheet(string);
+
865  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
+
866  SecondColorButton->setStyleSheet(string);
+
867 }
868 
-
869  // If no file do nothing
-
870  if (fileName.isEmpty()) {
-
871  return false;
-
872  } else {
-
873  // Call for the file to be saved
-
874  if(fileFormat == "idf") {
-
875  return IntelliDatamanager::saveProject(paintingArea, fileName);
-
876 
-
877  }
-
878  return paintingArea->save(fileName, fileFormat.constData());
-
879  }
-
880 }
+
869 bool IntelliPhotoGui::maybeSave(){
+
870  // Check for changes since last save
+
871 #ifdef QT_NO_DEBUG
+
872  QMessageBox::StandardButton ret;
+
873 
+
874  // Painting is the title of the window
+
875  // Add text and the buttons
+
876  ret = QMessageBox::warning(this, tr("Painting"),
+
877  tr("The image has been modified.\n"
+
878  "Do you want to save your changes?"),
+
879  QMessageBox::Save | QMessageBox::Discard
+
880  | QMessageBox::Cancel);
881 
-
882 void IntelliPhotoGui::setDefaultValues(){
-
883  slotEnterPressed();
-
884 }
+
882  // If save button clicked call for file to be saved
+
883  if (ret == QMessageBox::Save) {
+
884  return saveFile("png");
885 
- -
887  if(value < 1) {
-
888  value = 1;
-
889  }else if(value > 50) {
-
890  value = 50;
-
891  }
-
892  EditLineWidth->setText(QString("%1").arg(value));
-
893 }
-
894 
- -
896  QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1);
-
897  ActiveLayerLine->setText(string);
-
898 
-
899  IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
-
900  if(activePicture) {
-
901  preview = preview.fromImage(activePicture->getImageData());
-
902  }else{
-
903  QImage tmp(1,1,QImage::Format_ARGB32);
-
904  tmp.fill(Qt::transparent);
-
905  preview = preview.fromImage(tmp);
-
906  }
-
907 
-
908 
-
909  ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
-
910 
-
911  string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
-
912  FirstColorButton->setStyleSheet(string);
-
913  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
-
914  SecondColorButton->setStyleSheet(string);
-
915 
-
916  string = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height());
-
917  dimCanvas->setText(string);
+
886  // If cancel do nothing
+
887  } else if (ret == QMessageBox::Cancel) {
+
888  return false;
+
889  }
+
890 #endif
+
891  return true;
+
892 }
+
893 
+
894 bool IntelliPhotoGui::saveFile(const QByteArray &fileFormat){
+
895  // Define path, name and default file type
+
896  QString initialPath = QDir::currentPath() + "/untitled." + fileFormat;
+
897 
+
898  // Get selected file from dialog
+
899  // Add the proper file formats and extensions
+
900  QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
+
901  initialPath,
+
902  tr("%1 Files (*.%2);;All Files (*)")
+
903  .arg(QString::fromLatin1(fileFormat.toUpper()))
+
904  .arg(QString::fromLatin1(fileFormat)), nullptr, QFileDialog::DontUseNativeDialog);
+
905 
+
906  // If no file do nothing
+
907  if (fileName.isEmpty()) {
+
908  return false;
+
909  } else {
+
910  // Call for the file to be saved
+
911  if(fileFormat == "idf") {
+
912  return IntelliDatamanager::saveProject(paintingArea, fileName);
+
913 
+
914  }
+
915  return paintingArea->save(fileName, fileFormat.constData());
+
916  }
+
917 }
918 
-
919  if(paintingArea->layerBundle.size() != 0) {
-
920  string = QString("%1x%2").arg(paintingArea->layerBundle[static_cast<size_t>
-
921  (paintingArea->getNumberOfActiveLayer())].width).arg(paintingArea->layerBundle[static_cast<size_t>
-
922  (paintingArea->getNumberOfActiveLayer())].height);
-
923  dimActive->setText(string);
-
924  }
-
925  else{
-
926  dimActive->setText("0x0");
-
927  }
-
928 }
+
919 void IntelliPhotoGui::setDefaultValues(){
+
920  slotEnterPressed();
+
921 }
+
922 
+ +
924  if(value < 1) {
+
925  value = 1;
+
926  }else if(value > 50) {
+
927  value = 50;
+
928  }
+
929  EditLineWidth->setText(QString("%1").arg(value));
+
930 }
+
931 
+ +
933  QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1);
+
934  ActiveLayerLabel->setText(string);
+
935 
+
936  IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
+
937  if(activePicture) {
+
938  preview = preview.fromImage(activePicture->getImageData());
+
939  }else{
+
940  QImage tmp(1,1,QImage::Format_ARGB32);
+
941  tmp.fill(Qt::transparent);
+
942  preview = preview.fromImage(tmp);
+
943  }
+
944 
+
945 
+
946  ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
+
947 
+
948  string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
+
949  FirstColorButton->setStyleSheet(string);
+
950  string = QString("background-color: %1").arg(paintingArea->colorPicker.getSecondColor().name());
+
951  SecondColorButton->setStyleSheet(string);
+
952 
+
953  string = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height());
+
954  dimCanvas->setText(string);
+
955 
+
956  if(paintingArea->layerBundle.size() != 0) {
+
957  string = QString("%1x%2").arg(paintingArea->layerBundle[static_cast<size_t>
+
958  (paintingArea->getIndexOfActiveLayer())].width).arg(paintingArea->layerBundle[static_cast<size_t>
+
959  (paintingArea->getIndexOfActiveLayer())].height);
+
960  dimActive->setText(string);
+
961  }
+
962  else{
+
963  dimActive->setText("0x0");
+
964  }
+
965 }
-
void createCircleTool()
+
void createCircleTool()
createCircleTool creates a Circle Tool.
QColor getFirstColor() const
A function to read the primary selected color.
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.
-
bool loadProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
-
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.
-
void createPlainTool()
-
IntelliPhotoGui()
The IntelliPhotoGui method is the constructor and is used to create a new instance of the main progra...
+
IntelliImage * getImageOfActiveLayer()
getImageOfActiveLayer returns the image of the active Layer.
+
void createRectangleTool()
createRectangleTool creates a Rectangle Tool.
+
int getMaxWidth()
getMaxWidth gets the max width of the Canvas.
+
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 loadProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
loadProject loads a project from a file, closes current project.
+
void setLayerActive(int idx)
The setLayerToActive method marks a specific layer as active.
+
int getMaxHeight()
getMaxHeight gets the max height of the Canvas.
+
void deleteLayer(int idx, bool isTool=false)
The deleteLayer method removes a layer at a given idx.
+
void createPlainTool()
createPlainTool creates a Plain Tool.
+
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:57
-
void createPenTool()
+
void createPenTool()
createPenTool creates a Pen Tool.
QColor getSecondColor() const
A function to read the secondary selected color.
-
void historyGoBack()
-
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 getIndexOfActiveLayer()
getIndexOfActiveLayer returns the index of athe active Layer.
+
void historyGoBack()
historyGoBack go back in hisotry
+
void createLineTool()
createLineTool creates a Line Tool.
+
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)
getInt is a static funktion ยด, which creates an Input Dialog and gets an Integer.
-
int getNumberOfActiveLayer()
-
void closeEvent(QCloseEvent *event) override
The closeEvent function handles closing events.
+
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:223
+
void setToolWidth(int value)
setToolWidth stes a width to the tool
+
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
+
void createPolygonTool()
createPolygonTool creates a Polygon Tool.
+
void moveActiveLayer(int idx)
The moveActiveLayer moves the active layer to a specific position in the layer stack.
+
IntelliColorPicker colorPicker
colorPicker a class to manage Tool color.
Definition: PaintingArea.h:286
-
void setLayerDimensions(int maxWidth, int maxHeight)
-
void createFloodFillTool()
-
void setInnerAlpha(int innerAlpha)
-
bool saveProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
- -
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:222
-
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.
+
void setCanvasDimensions(int maxWidth, int maxHeight)
setCanvasDimensions sets the dimension of the Canvas
+
void createFloodFillTool()
createFloodFillTool creates a Floodfill Tool.
+
void setInnerAlpha(int innerAlpha)
setInnerAlpha sets the inner alpha attribute of the Tool.
+
bool saveProject(PaintingArea *Canvas, QString filePath="unnamed.idf")
saveProject saves the current project to a file.
+
void UpdateGui()
UpdateGui a function to update all gui elements.
+
IntelliToolsettings Toolsettings
Toolsettings - a class to manage Tool settings.
Definition: PaintingArea.h:281
+
void setPolygon(int idx)
setPolygon is used for setting polygondata, it only works on RASTER images
+
void setLineWidth(int LineWidth)
setLineWidth sets the width attribute of the line.
+
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:30
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, int alpha=255, ImageType type=ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
-
void historyGoForward()
+
void historyGoForward()
historyGoForward a function to undo the return of the previous state of the project.
+
void historyadd()
historyadd adds an hisotry step
+
void createGradientTool()
createGradientTool creates a Gradient Tool.
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...
+
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:57
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)
+
void closeEvent(QCloseEvent *event) override
The closeEvent function handles closing events.
+
void setToolWidth(int value)
setToolWidth stes a width to the tool
The IntelliColorPicker manages the selected colors for one whole project.
- +
void UpdateGui()
UpdateGui a function to update all gui elements.
diff --git a/docs/html/_intelli_raster_image_8cpp.html b/docs/html/_intelli_raster_image_8cpp.html index ee3b2db..4514b81 100644 --- a/docs/html/_intelli_raster_image_8cpp.html +++ b/docs/html/_intelli_raster_image_8cpp.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_raster_image_8cpp_source.html b/docs/html/_intelli_raster_image_8cpp_source.html index 018c602..18fa201 100644 --- a/docs/html/_intelli_raster_image_8cpp_source.html +++ b/docs/html/_intelli_raster_image_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -111,7 +111,7 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html
23 }
24 
-
26  IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), this->fastRenderering);
+
26  IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), false);
27  raster->imageData.fill(Qt::transparent);
29  return raster;
@@ -167,7 +167,7 @@ $(document).ready(function(){initNavTree('_intelli_raster_image_8cpp_source.html
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.
-
virtual int getWidth() const
+
virtual int getWidth() const
getWidth returns the width of the Image.
diff --git a/docs/html/_intelli_render_settings_8h_source.html b/docs/html/_intelli_render_settings_8h_source.html index 6f1d440..e0b99d3 100644 --- a/docs/html/_intelli_render_settings_8h_source.html +++ b/docs/html/_intelli_render_settings_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -92,25 +92,24 @@ $(document).ready(function(){initNavTree('_intelli_render_settings_8h_source.htm
4 //for unit testing
5 class UnitTest;
6 
-
7 
- -
9 {
-
10 friend UnitTest;
-
11 public:
- -
13 
-
18 void setFastRendering(bool Updatedsetting);
-
23 bool isFastRenderering() const;
-
24 
-
25 private:
-
26 bool fastRenderering = true;
-
27 };
-
28 
-
29 #endif
+ +
11 {
+
12 friend UnitTest;
+
13 public:
+ +
15 
+
20 void setFastRendering(bool Updatedsetting);
+
25 bool isFastRenderering() const;
+
26 
+
27 private:
+
31 bool fastRenderering = true;
+
32 };
+
33 
+
34 #endif
bool isFastRenderering() const
The getfastRenderer gets the value of the flag for the fastRenderer setting.
- +
The IntelliRenderSettings class which manages the render Settings.
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 9a0afb2..0464ce3 100644 --- a/docs/html/_intelli_shaped_image_8cpp.html +++ b/docs/html/_intelli_shaped_image_8cpp.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_shaped_image_8cpp_source.html b/docs/html/_intelli_shaped_image_8cpp_source.html index 814ffb2..3840f27 100644 --- a/docs/html/_intelli_shaped_image_8cpp_source.html +++ b/docs/html/_intelli_shaped_image_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -114,7 +114,7 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
26 }
27 
-
29  IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), this->fastRenderering);
+
29  IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), false);
30  shaped->setPolygon(this->polygonData);
31  shaped->imageData.fill(Qt::transparent);
@@ -230,7 +230,7 @@ $(document).ready(function(){initNavTree('_intelli_shaped_image_8cpp_source.html
virtual ~IntelliShapedImage() override
An Destructor.
The IntelliRasterImage manages a RASTERIMAGE.
-
virtual int getWidth() const
+
virtual int getWidth() const
getWidth returns the width of the Image.
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:19
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:37
- -
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:57
+
int getLineWidth() const
getLineWidth returns the width attribute of the line.
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:30
-
bool getIsDrawing() const
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
-
Tooltype getTooltype() const
+
bool getIsDrawing() const
getIsDrawing returns if the tool is currently drawing
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
+
Tooltype getTooltype() const
getTooltype returns the tools type
-
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:50
- +
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:54
+
Tooltype
The Tooltype enum categorising the toosl.
Definition: IntelliTool.h:23
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:74
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:84
virtual std::vector< QPoint > getPolygonData()
A function that returns the Polygondata if existent.
Definition: IntelliImage.h:135
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:26
-
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
+
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:74
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:79
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)
+
void setToolWidth(int value)
setToolWidth stes a width to the tool
int height
height - Stores the height of a layer in pixels.
Definition: PaintingArea.h:35
-
Tooltype ActiveType
Definition: IntelliTool.h:52
+
Tooltype ActiveType
ActiveType the type of the active tool.
Definition: IntelliTool.h:59
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:5
- +
void UpdateGui()
UpdateGui a function to update all gui elements.
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:47
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
+
void historyadd()
historyadd adds an hisotry step
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:52
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
virtual ~IntelliTool()=0
An abstract Destructor.
Definition: IntelliTool.cpp:15
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 6dbecc8..39e0dd6 100644 --- a/docs/html/_intelli_tool_8h.html +++ b/docs/html/_intelli_tool_8h.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_tool_8h_source.html b/docs/html/_intelli_tool_8h_source.html index 5ae74de..2782bc9 100644 --- a/docs/html/_intelli_tool_8h_source.html +++ b/docs/html/_intelli_tool_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -102,94 +102,96 @@ $(document).ready(function(){initNavTree('_intelli_tool_8h_source.html',''); ini
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  NONE
-
29 };
-
30 private:
-
35 bool createToolLayer();
-
36 
-
40 void mergeToolLayer();
-
41 
-
45 void deleteToolLayer();
-
46 protected:
- -
51 
- -
53 
- -
58 
- +
23 enum class Tooltype {
+
24  CIRCLE,
+
25  FLOODFILL,
+
26  GRADIENT,
+
27  LINE,
+
28  PEN,
+
29  PLAIN,
+
30  POLYGON,
+
31  RECTANGLE,
+
32  NONE
+
33 };
+
34 private:
+
39 bool createToolLayer();
+
40 
+
44 void mergeToolLayer();
+
45 
+
49 void deleteToolLayer();
+
50 protected:
+ +
55 
+
60 
- +
65 
- +
70 
-
74 bool isDrawing = false;
+
75 
-
76 public:
- -
83 
-
87 virtual ~IntelliTool() = 0;
-
88 
-
94 virtual void onMouseRightPressed(int x, int y);
-
95 
-
101 virtual void onMouseRightReleased(int x, int y);
-
102 
-
108 virtual void onMouseLeftPressed(int x, int y);
-
109 
-
115 virtual void onMouseLeftReleased(int x, int y);
-
116 
-
121 virtual void onWheelScrolled(int value);
-
122 
-
128 virtual void onMouseMoved(int x, int y);
-
129 
-
130 Tooltype getTooltype() const;
-
131 
-
132 bool getIsDrawing() const;
-
133 
-
134 };
-
135 #endif
+ +
80 
+
84 bool isDrawing = false;
+
85 
+
86 public:
+ +
93 
+
97 virtual ~IntelliTool() = 0;
+
98 
+
104 virtual void onMouseRightPressed(int x, int y);
+
105 
+
111 virtual void onMouseRightReleased(int x, int y);
+
112 
+
118 virtual void onMouseLeftPressed(int x, int y);
+
119 
+
125 virtual void onMouseLeftReleased(int x, int y);
+
126 
+
131 virtual void onWheelScrolled(int value);
+
132 
+
138 virtual void onMouseMoved(int x, int y);
+
139 
+
144 Tooltype getTooltype() const;
+
145 
+
150 bool getIsDrawing() const;
+
151 
+
152 };
+
153 #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:19
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:37
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:30
-
bool getIsDrawing() const
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
-
Tooltype getTooltype() const
+
bool getIsDrawing() const
getIsDrawing returns if the tool is currently drawing
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
+
Tooltype getTooltype() const
getTooltype returns the tools type
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:50
- +
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
+
Tooltype
The Tooltype enum categorising the toosl.
Definition: IntelliTool.h:23
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:74
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:84
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:26
-
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 * activeLayer
A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or prev...
Definition: IntelliTool.h:74
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:69
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:79
An abstract class that manages the basic events, like mouse clicks or scrolls events.
Definition: IntelliTool.h:17
-
Tooltype ActiveType
Definition: IntelliTool.h:52
+
Tooltype ActiveType
ActiveType the type of the active tool.
Definition: IntelliTool.h:59
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:5
+
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
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:52
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
virtual ~IntelliTool()=0
An abstract Destructor.
Definition: IntelliTool.cpp:15
diff --git a/docs/html/_intelli_tool_circle_8cpp.html b/docs/html/_intelli_tool_circle_8cpp.html index f570212..987536c 100644 --- a/docs/html/_intelli_tool_circle_8cpp.html +++ b/docs/html/_intelli_tool_circle_8cpp.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_tool_circle_8cpp_source.html b/docs/html/_intelli_tool_circle_8cpp_source.html index a40765d..f77ea0f 100644 --- a/docs/html/_intelli_tool_circle_8cpp_source.html +++ b/docs/html/_intelli_tool_circle_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -176,35 +176,35 @@ $(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:19
QColor getFirstColor() const
A function to read the primary selected color.
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:37
- +
int getLineWidth() const
getLineWidth returns the width attribute of the line.
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:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
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:30
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
- +
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
+
int getInnerAlpha() const
getInnerAlpha returns the inner alpha value.
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
-
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:74
+
bool isDrawing
A flag checking if the user is currently drawing or not.
Definition: IntelliTool.h:84
QColor getSecondColor() const
A function to read the secondary selected color.
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:26
-
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:69
+
LayerObject * Canvas
A pointer to the drawing canvas of the tool, work on this.
Definition: IntelliTool.h:79
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
-
Tooltype ActiveType
Definition: IntelliTool.h:52
+
Tooltype ActiveType
ActiveType the type of the active tool.
Definition: IntelliTool.h:59
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)
+
void setLineWidth(int LineWidth)
setLineWidth sets the width attribute 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:47
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:52
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
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 467e5c3..6dccaee 100644 --- a/docs/html/_intelli_tool_circle_8h.html +++ b/docs/html/_intelli_tool_circle_8h.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_intelli_tool_circle_8h_source.html b/docs/html/_intelli_tool_circle_8h_source.html index b9c6278..b3333a7 100644 --- a/docs/html/_intelli_tool_circle_8h_source.html +++ b/docs/html/_intelli_tool_circle_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -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:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
virtual void onWheelScrolled(int value) override
A function managing the scroll event. Changing the edge Width relative to value.
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:50
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
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.
@@ -139,7 +139,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_circle_8h_source.html','
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 IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
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.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
virtual void onMouseRightReleased(int x, int y) override
A function managing the right click released of a mouse.
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
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:50
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
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:57
virtual ~IntelliToolFloodFill() override
A Destructor.
@@ -137,7 +137,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_flood_fill_8h_source.htm
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 IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
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:50
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
virtual ~IntelliToolLine() override
An abstract Destructor.
virtual void onMouseLeftReleased(int x, int y) override
A function managing the left click released of a mouse.
@@ -137,7 +137,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_line_8h_source.html','')
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 IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
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:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
virtual ~IntelliToolPen() override
A Destructor.
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:50
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
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.
@@ -136,7 +136,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_pen_8h_source.html','');
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.
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
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:50
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
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.
@@ -135,7 +135,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_plain_8h_source.html',''
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.
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
-
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
-
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:50
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
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:57
IntelliToolPolygon(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings, bool isSettingPolygon=false)
A constructor setting the general paintingArea and colorPicker.
@@ -149,7 +149,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_polygon_8h_source.html',
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.
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
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:57
+
IntelliColorPicker * colorPicker
A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors.
Definition: IntelliTool.h:64
-
IntelliToolsettings * Toolsettings
Definition: IntelliTool.h:59
+
IntelliToolsettings * Toolsettings
Toolsettings a refrence to the tool settings.
Definition: IntelliTool.h:69
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:50
+
PaintingArea * Area
A pointer to the general PaintingArea to interact with.
Definition: IntelliTool.h:54
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:57
The IntelliToolRectangle class represents a tool to draw a rectangle.
@@ -138,7 +138,7 @@ $(document).ready(function(){initNavTree('_intelli_tool_rectangle_8h_source.html
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.
- +
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
IntelliToolRectangle(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
A constructor setting the general paintingArea and colorPicker. And reading in the alphaInner and edg...
- +
int getLineWidth() const
getLineWidth returns the width attribute of the line.
- - -
void setInnerAlpha(int innerAlpha)
-
void setLineWidth(int LineWidth)
- +
int getInnerAlpha() const
getInnerAlpha returns the inner alpha value.
+
virtual ~IntelliToolsettings()
~IntelliToolsettings - basic destructor.
+
void setInnerAlpha(int innerAlpha)
setInnerAlpha sets the inner alpha attribute of the Tool.
+
void setLineWidth(int LineWidth)
setLineWidth sets the width attribute of the line.
+
IntelliToolsettings()
IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics.
diff --git a/docs/html/_intelli_toolsettings_8h_source.html b/docs/html/_intelli_toolsettings_8h_source.html index a6634f0..79d7851 100644 --- a/docs/html/_intelli_toolsettings_8h_source.html +++ b/docs/html/_intelli_toolsettings_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -91,35 +91,39 @@ $(document).ready(function(){initNavTree('_intelli_toolsettings_8h_source.html',
3 
4 //for unit testing
5 class UnitTest;
-
6 
- -
8 friend UnitTest;
-
9 public:
- -
11 virtual ~IntelliToolsettings();
-
12 
-
13 int getLineWidth() const;
-
14 void setLineWidth(int LineWidth);
-
15 
-
16 int getInnerAlpha() const;
-
17 void setInnerAlpha(int innerAlpha);
-
18 
-
19 private:
-
20 int lineWidth;
-
21 int innerAlpha;
-
22 };
-
23 
-
24 #endif
+ +
10 friend UnitTest;
+
11 public:
+ +
16 
+
20 virtual ~IntelliToolsettings();
+
21 
+
26 int getLineWidth() const;
+
27 
+
32 void setLineWidth(int LineWidth);
+
33 
+
38 int getInnerAlpha() const;
+
39 
+
44 void setInnerAlpha(int innerAlpha);
+
45 
+
46 private:
+
47 
+
51 int lineWidth;
+
52 
+
56 int innerAlpha;
+
57 };
+
58 
+
59 #endif
- - - -
void setInnerAlpha(int innerAlpha)
+
int getLineWidth() const
getLineWidth returns the width attribute of the line.
+
int getInnerAlpha() const
getInnerAlpha returns the inner alpha value.
+
virtual ~IntelliToolsettings()
~IntelliToolsettings - basic destructor.
+
void setInnerAlpha(int innerAlpha)
setInnerAlpha sets the inner alpha attribute of the Tool.
-
void setLineWidth(int LineWidth)
- - +
void setLineWidth(int LineWidth)
setLineWidth sets the width attribute of the line.
+
IntelliToolsettings()
IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics.
+
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.

Go to the source code of this file.

diff --git a/docs/html/_painting_area_8cpp_source.html b/docs/html/_painting_area_8cpp_source.html index 86fad90..7e21220 100644 --- a/docs/html/_painting_area_8cpp_source.html +++ b/docs/html/_painting_area_8cpp_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -105,30 +105,30 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html',''); -
20 #include "GUI/IntelliPhotoGui.h"
-
21 
- -
23 
-
24 }
-
25 
- - -
28  this->image = new IntelliRasterImage(*dynamic_cast<IntelliRasterImage*>(layer.image));
-
29  }else if(layer.image->getTypeOfImage()==ImageType::SHAPEDIMAGE) {
-
30  this->image = new IntelliShapedImage(*dynamic_cast<IntelliShapedImage*>(layer.image));
-
31  }
-
32  this->width = layer.width;
-
33  this->height = layer.height;
-
34  this->widthOffset = layer.widthOffset;
-
35  this->heightOffset = layer.heightOffset;
-
36  this->alpha = layer.alpha;
-
37 }
-
38 
-
39 PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent)
-
40  : QLabel(parent){
-
41  this->Tool = nullptr;
-
42  this->setLayerDimensions(maxWidth, maxHeight);
-
43 
+ +
21 #include "GUI/IntelliPhotoGui.h"
+
22 
+ +
24 
+
25 }
+
26 
+ + +
29  this->image = new IntelliRasterImage(*dynamic_cast<IntelliRasterImage*>(layer.image));
+
30  }else if(layer.image->getTypeOfImage()==ImageType::SHAPEDIMAGE) {
+
31  this->image = new IntelliShapedImage(*dynamic_cast<IntelliShapedImage*>(layer.image));
+
32  }
+
33  this->width = layer.width;
+
34  this->height = layer.height;
+
35  this->widthOffset = layer.widthOffset;
+
36  this->heightOffset = layer.heightOffset;
+
37  this->alpha = layer.alpha;
+
38 }
+
39 
+
40 PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent)
+
41  : QLabel(parent){
+
42  this->Tool = nullptr;
+
43  this->setCanvasDimensions(maxWidth, maxHeight);
44  activeLayer = -1;
45 }
46 
@@ -157,7 +157,7 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
69  return this->renderSettings.isFastRenderering();
70 }
71 
-
72 void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){
+
72 void PaintingArea::setCanvasDimensions(int maxWidth, int maxHeight){
73  //set standart parameter
74  this->maxWidth = maxWidth;
75  this->maxHeight = maxHeight;
@@ -171,7 +171,7 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
83 
84 }
85 
-
86 void PaintingArea::setPixelToActive(QColor color, QPoint point){
+
86 void PaintingArea::drawPixelOntoActive(QColor color, QPoint point){
87  layerBundle[static_cast<size_t>(activeLayer)].image->drawPixel(point, color);
88 }
89 
@@ -194,541 +194,565 @@ $(document).ready(function(){initNavTree('_painting_area_8cpp_source.html','');
106  }
107  this->layerBundle.push_back(newLayer);
108  activeLayer = static_cast<int>(layerBundle.size()) - 1;
-
109  historyadd();
-
110  return activeLayer;
-
111 }
+
109  return activeLayer;
+
110 }
+
111 
112 
-
113 
-
114 void PaintingArea::deleteLayer(int idx, bool isTool){
-
115  if(!isTool) {
-
116  updateTools();
-
117  }
-
118  if(idx<static_cast<int>(layerBundle.size())&&idx>=0) {
-
119  this->layerBundle.erase(layerBundle.begin() + idx);
-
120  if(activeLayer>=idx) {
-
121  activeLayer--;
-
122  }
-
123  if(activeLayer < 0 && layerBundle.size()) {
-
124  activeLayer = 0;
-
125  }
-
126  }
-
127 }
-
128 
- -
130  if(activeLayer>=0 && activeLayer < static_cast<int>(layerBundle.size())) {
-
131  this->layerBundle.erase(layerBundle.begin() + activeLayer);
-
132  activeLayer--;
-
133  }
-
134  historyadd();
-
135 }
-
136 
- -
138  updateTools();
-
139  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
-
140  this->activeLayer = idx;
-
141  }
-
142 }
-
143 
-
144 void PaintingArea::setLayerAlpha(int idx, int alpha){
-
145  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
-
146  if(alpha>=0 && alpha<=255) {
-
147  layerBundle[static_cast<size_t>(idx)].alpha = alpha;
-
148  }
-
149  }
-
150 }
- -
152  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
-
153  if(layerBundle[static_cast<size_t>(idx)].image->getTypeOfImage()==ImageType::SHAPEDIMAGE) {
-
154  delete this->Tool;
-
155  this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true);
-
156  isSettingPolygon = true;
-
157  this->guiReference->setToolWidth(5);
-
158  }
-
159  }
-
160 }
-
161 
-
162 // Used to load the image and place it in the widget
-
163 bool PaintingArea::open(const QString &filePath){
-
164  if(this->activeLayer==-1) {
-
165  return false;
-
166  }
-
167  IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
-
168  bool open = active->loadImage(filePath);
-
169  active->calculateVisiblity();
-
170  update();
-
171  return open;
-
172 }
-
173 
- -
175  for(auto layer: layerBundle) {
-
176  delete layer.image;
-
177  }
-
178  layerBundle.clear();
-
179 }
-
180 
-
181 // Save the current image
-
182 bool PaintingArea::save(const QString &filePath, const char*fileFormat){
-
183  if(layerBundle.size()==0) {
-
184  return false;
-
185  }
-
186  this->drawLayers(true);
-
187 
-
188  if(!strcmp(fileFormat,"PNG")) {
-
189  QImage visibleImage = Canvas->convertToFormat(QImage::Format_Indexed8);
-
190  fileFormat = "png";
-
191  if (visibleImage.save(filePath, fileFormat)) {
-
192  return true;
-
193  } else {
-
194  return false;
-
195  }
-
196  }
-
197 
-
198  if (Canvas->save(filePath, fileFormat)) {
-
199  return true;
-
200  } else {
-
201  return false;
-
202  }
-
203 }
-
204 
- -
206  updateTools();
-
207  layerBundle[static_cast<size_t>(activeLayer)].widthOffset += x;
-
208  layerBundle[static_cast<size_t>(activeLayer)].heightOffset += y;
-
209  historyadd();
-
210 }
-
211 
- -
213  updateTools();
-
214  if(idx==1) {
-
215  this->selectLayerUp();
-
216  }else if(idx==-1) {
-
217  this->selectLayerDown();
-
218  }
-
219  guiReference->UpdateGui();
-
220  historyadd();
-
221 }
-
222 
- -
224  updateTools();
-
225  if(a>=0 && a < static_cast<int>(layerBundle.size())) {
-
226  this->setLayerActive(a);
-
227  }
-
228 }
-
229 
- -
231  QColor clr = QColorDialog::getColor(colorPicker.getFirstColor(), nullptr, "Main Color", QColorDialog::DontUseNativeDialog);
-
232  this->colorPicker.setFirstColor(clr);
-
233 }
-
234 
- -
236  QColor clr = QColorDialog::getColor(colorPicker.getSecondColor(), nullptr, "Secondary Color", QColorDialog::DontUseNativeDialog);
-
237  this->colorPicker.setSecondColor(clr);
-
238 }
-
239 
- -
241  this->colorPicker.swapColors();
-
242 }
-
243 
- -
245  delete this->Tool;
-
246  Tool = new IntelliToolPen(this, &colorPicker, &Toolsettings);
-
247 }
-
248 
- -
250  delete this->Tool;
-
251  Tool = new IntelliToolPlainTool(this, &colorPicker, &Toolsettings);
-
252 }
-
253 
- -
255  delete this->Tool;
-
256  Tool = new IntelliToolLine(this, &colorPicker, &Toolsettings);
-
257 }
-
258 
- -
260  delete this->Tool;
-
261  Tool = new IntelliToolRectangle(this, &colorPicker, &Toolsettings);
-
262 }
-
263 
- -
265  delete this->Tool;
-
266  Tool = new IntelliToolCircle(this, &colorPicker, &Toolsettings);
-
267 }
- -
269  delete this->Tool;
-
270  Tool = new IntelliToolPolygon(this, &colorPicker, &Toolsettings);
-
271 }
-
272 
- -
274  delete this->Tool;
-
275  Tool = new IntelliToolFloodFill(this, &colorPicker, &Toolsettings);
-
276 }
-
277 
- -
279  return this->layerBundle[static_cast<size_t>(activeLayer)].width;
+
113 void PaintingArea::deleteLayer(int idx, bool isTool){
+
114  if(!isTool) {
+
115  updateTools();
+
116  }
+
117  if(idx<static_cast<int>(layerBundle.size())&&idx>=0) {
+
118  this->layerBundle.erase(layerBundle.begin() + idx);
+
119  if(activeLayer>=idx) {
+
120  activeLayer--;
+
121  }
+
122  if(activeLayer < 0 && layerBundle.size()) {
+
123  activeLayer = 0;
+
124  }
+
125  }
+
126 }
+
127 
+ +
129  if(activeLayer>=0 && activeLayer < static_cast<int>(layerBundle.size())) {
+
130  this->layerBundle.erase(layerBundle.begin() + activeLayer);
+
131  activeLayer--;
+
132  }
+
133  historyadd();
+
134 }
+
135 
+ +
137  updateTools();
+
138  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
+
139  this->activeLayer = idx;
+
140  }
+
141 }
+
142 
+
143 void PaintingArea::setLayerAlpha(int idx, int alpha){
+
144  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
+
145  if(alpha>=0 && alpha<=255) {
+
146  layerBundle[static_cast<size_t>(idx)].alpha = alpha;
+
147  }
+
148  }
+
149 }
+ +
151  if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
+
152  if(layerBundle[static_cast<size_t>(idx)].image->getTypeOfImage()==ImageType::SHAPEDIMAGE) {
+
153  delete this->Tool;
+
154  this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true);
+
155  isSettingPolygon = true;
+
156  this->guiReference->setToolWidth(5);
+
157  }
+
158  }
+
159 }
+
160 
+
161 // Used to load the image and place it in the widget
+
162 bool PaintingArea::open(const QString &filePath){
+
163  if(this->activeLayer==-1) {
+
164  return false;
+
165  }
+
166  IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
+
167  bool open = active->loadImage(filePath);
+
168  active->calculateVisiblity();
+
169  update();
+
170  return open;
+
171 }
+
172 
+ +
174  for(auto layer: layerBundle) {
+
175  delete layer.image;
+
176  }
+
177  layerBundle.clear();
+
178 }
+
179 
+
180 // Save the current image
+
181 bool PaintingArea::save(const QString &filePath, const char*fileFormat){
+
182  if(layerBundle.size()==0) {
+
183  return false;
+
184  }
+
185  this->drawLayers(true);
+
186 
+
187  if(!strcmp(fileFormat,"PNG")) {
+
188  QImage visibleImage = Canvas->convertToFormat(QImage::Format_Indexed8);
+
189  fileFormat = "png";
+
190  if (visibleImage.save(filePath, fileFormat)) {
+
191  return true;
+
192  } else {
+
193  return false;
+
194  }
+
195  }
+
196 
+
197  if (Canvas->save(filePath, fileFormat)) {
+
198  return true;
+
199  } else {
+
200  return false;
+
201  }
+
202 }
+
203 
+ +
205  updateTools();
+
206  layerBundle[static_cast<size_t>(activeLayer)].widthOffset += x;
+
207  layerBundle[static_cast<size_t>(activeLayer)].heightOffset += y;
+
208  historyadd();
+
209 }
+
210 
+ +
212  updateTools();
+
213  if(idx==1) {
+
214  this->selectLayerUp();
+
215  }else if(idx==-1) {
+
216  this->selectLayerDown();
+
217  }
+
218  guiReference->UpdateGui();
+
219  historyadd();
+
220 }
+
221 
+ +
223  updateTools();
+
224  if(a>=0 && a < static_cast<int>(layerBundle.size())) {
+
225  this->setLayerActive(a);
+
226  }
+
227 }
+
228 
+ +
230  QColor clr = QColorDialog::getColor(colorPicker.getFirstColor(), nullptr, "Main Color", QColorDialog::DontUseNativeDialog);
+
231  this->colorPicker.setFirstColor(clr);
+
232 }
+
233 
+ +
235  QColor clr = QColorDialog::getColor(colorPicker.getSecondColor(), nullptr, "Secondary Color", QColorDialog::DontUseNativeDialog);
+
236  this->colorPicker.setSecondColor(clr);
+
237 }
+
238 
+ +
240  this->colorPicker.swapColors();
+
241 }
+
242 
+ +
244  delete this->Tool;
+
245  Tool = new IntelliToolPen(this, &colorPicker, &Toolsettings);
+
246 }
+
247 
+ +
249  delete this->Tool;
+
250  Tool = new IntelliToolPlainTool(this, &colorPicker, &Toolsettings);
+
251 }
+
252 
+ +
254  delete this->Tool;
+
255  Tool = new IntelliToolLine(this, &colorPicker, &Toolsettings);
+
256 }
+
257 
+ +
259  delete this->Tool;
+
260  Tool = new IntelliToolRectangle(this, &colorPicker, &Toolsettings);
+
261 }
+
262 
+ +
264  delete this->Tool;
+
265  Tool = new IntelliToolCircle(this, &colorPicker, &Toolsettings);
+
266 }
+ +
268  delete this->Tool;
+
269  Tool = new IntelliToolPolygon(this, &colorPicker, &Toolsettings);
+
270 }
+
271 
+ +
273  delete this->Tool;
+
274  Tool = new IntelliToolFloodFill(this, &colorPicker, &Toolsettings);
+
275 }
+
276 
+ +
278  delete this->Tool;
+
279  Tool = new IntelliToolGradient(this, &colorPicker, &Toolsettings);
280 }
281 
- -
283  return this->layerBundle[static_cast<size_t>(activeLayer)].height;
+ +
283  return this->layerBundle[static_cast<size_t>(activeLayer)].width;
284 }
285 
- -
287  return this->maxWidth;
+ +
287  return this->layerBundle[static_cast<size_t>(activeLayer)].height;
288 }
289 
- -
291  return this->maxHeight;
+ +
291  return this->maxWidth;
292 }
293 
- -
295  return this->layerBundle[static_cast<size_t>(activeLayer)].image->getTypeOfImage();
+ +
295  return this->maxHeight;
296 }
297 
- -
299  return this->layerBundle[static_cast<size_t>(activeLayer)].image->getPolygonData();
+ +
299  return this->layerBundle[static_cast<size_t>(activeLayer)].image->getTypeOfImage();
300 }
301 
-
302 // If a mouse button is pressed check if it was the
-
303 // left button and if so store the current position
-
304 // Set that we are currently drawing
-
305 void PaintingArea::mousePressEvent(QMouseEvent*event){
-
306  if(this->activeLayer < 0) {
-
307  return;
-
308  }
-
309  if(Tool == nullptr)
-
310  return;
-
311  int x = event->x() - layerBundle[static_cast<size_t>(activeLayer)].widthOffset - offsetXDimension;
-
312  int y = event->y() - layerBundle[static_cast<size_t>(activeLayer)].heightOffset - offsetYDimension;
-
313  if(event->button() == Qt::LeftButton) {
-
314  Tool->onMouseLeftPressed(x, y);
-
315  }else if(event->button() == Qt::RightButton) {
-
316  Tool->onMouseRightPressed(x, y);
-
317  }
-
318  update();
-
319 }
-
320 
-
321 // When the mouse moves if the left button is clicked
-
322 // we call the drawline function which draws a line
-
323 // from the last position to the current
-
324 void PaintingArea::mouseMoveEvent(QMouseEvent*event){
-
325  if(this->activeLayer < 0) {
-
326  return;
-
327  }
-
328  if(Tool == nullptr)
-
329  return;
-
330  int x = event->x() - layerBundle[static_cast<size_t>(activeLayer)].widthOffset - offsetXDimension;
-
331  int y = event->y() - layerBundle[static_cast<size_t>(activeLayer)].heightOffset - offsetYDimension;
-
332  Tool->onMouseMoved(x, y);
-
333  update();
-
334 }
-
335 
-
336 // If the button is released we set variables to stop drawing
-
337 void PaintingArea::mouseReleaseEvent(QMouseEvent*event){
-
338  if(this->activeLayer < 0)
-
339  return;
-
340  if(Tool == nullptr)
-
341  return;
-
342  int x = event->x() - layerBundle[static_cast<size_t>(activeLayer)].widthOffset - offsetXDimension;
-
343  int y = event->y() - layerBundle[static_cast<size_t>(activeLayer)].heightOffset - offsetYDimension;
-
344  if(event->button() == Qt::LeftButton) {
-
345  Tool->onMouseLeftReleased(x, y);
-
346  }else if(event->button() == Qt::RightButton) {
-
347  Tool->onMouseRightReleased(x, y);
-
348  }
-
349  update();
-
350 }
-
351 
-
352 void PaintingArea::wheelEvent(QWheelEvent*event){
-
353  if(this->activeLayer < 0)
-
354  return;
-
355  if(this->Tool != nullptr) {
-
356  QPoint numDegrees = event->angleDelta() / 8;
-
357  if(!numDegrees.isNull()) {
-
358  QPoint numSteps = numDegrees / 15;
-
359  Tool->onWheelScrolled(numSteps.y() * -1);
-
360  }
-
361  }
-
362 }
-
363 
-
364 // QPainter provides functions to draw on the widget
-
365 // The QPaintEvent is sent to widgets that need to
-
366 // update themselves
-
367 void PaintingArea::paintEvent(QPaintEvent*event){
-
368  this->setFixedSize(QSize(maxWidth * 2,maxHeight * 2));
-
369  this->drawLayers();
-
370 
-
371  QPainter painter(this);
-
372 
-
373  //insert zoom factor here
-
374  painter.scale(1,1);
-
375 
-
376  //calulate image here for scroll
-
377  //Todo set offset in first to parameters and calulate them into mouse position
-
378  painter.drawImage(0, 0, *Canvas, -offsetXDimension, -offsetYDimension);
-
379  update();
-
380 }
-
381 
-
382 void PaintingArea::selectLayerUp(){
-
383  updateTools();
-
384  if(activeLayer != -1 && static_cast<size_t>(activeLayer)<layerBundle.size() - 1) {
-
385  std::swap(layerBundle[static_cast<size_t>(activeLayer)], layerBundle[static_cast<size_t>(activeLayer + 1)]);
-
386  activeLayer++;
-
387  }
-
388 }
-
389 
-
390 void PaintingArea::selectLayerDown(){
-
391  updateTools();
-
392  if(activeLayer>0) {
-
393  std::swap(layerBundle[static_cast<size_t>(activeLayer)], layerBundle[static_cast<size_t>(activeLayer - 1)]);
-
394  activeLayer--;
-
395  }
-
396 }
-
397 
-
398 void PaintingArea::drawLayers(bool forSaving){
-
399  if(forSaving) {
-
400  Canvas->fill(Qt::GlobalColor::transparent);
-
401  }else{
-
402  Canvas->fill(Qt::GlobalColor::black);
-
403  }
-
404  for(size_t i = 0; i<layerBundle.size(); i++) {
-
405  LayerObject layer = layerBundle[i];
-
406  QImage cpy = layer.image->getDisplayable(layer.alpha);
-
407  QColor clr_0;
-
408  QColor clr_1;
-
409  for(int y = 0; y<layer.height; y++) {
-
410  if(layer.heightOffset + y<0) continue;
-
411  if(layer.heightOffset + y>=maxHeight) break;
-
412  for(int x = 0; x<layer.width; x++) {
-
413  if(layer.widthOffset + x<0) continue;
-
414  if(layer.widthOffset + x>=maxWidth) break;
-
415  clr_0 = Canvas->pixelColor(layer.widthOffset + x, layer.heightOffset + y);
-
416  clr_1 = cpy.pixelColor(x,y);
-
417  float t = static_cast<float>(clr_1.alpha()) / 255.f;
-
418  int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
-
419  int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
-
420  int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
-
421  int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
-
422  clr_0.setRed(r);
-
423  clr_0.setGreen(g);
-
424  clr_0.setBlue(b);
-
425  clr_0.setAlpha(a);
-
426 
-
427  Canvas->setPixelColor(layer.widthOffset + x, layer.heightOffset + y, clr_0);
-
428  }
-
429  }
-
430  }
-
431 }
-
432 
-
433 bool PaintingArea::createTempTopLayer(int idx){
-
434  if(idx>=0) {
-
435  LayerObject newLayer;
-
436  newLayer.alpha = 255;
-
437  newLayer.height = layerBundle[static_cast<size_t>(idx)].height;
-
438  newLayer.width = layerBundle[static_cast<size_t>(idx)].width;
-
439  newLayer.heightOffset = layerBundle[static_cast<size_t>(idx)].heightOffset;
-
440  newLayer.widthOffset = layerBundle[static_cast<size_t>(idx)].widthOffset;
-
441  newLayer.image = layerBundle[static_cast<size_t>(idx)].image->getDeepCopy();
-
442  layerBundle.insert(layerBundle.begin() + idx + 1,newLayer);
-
443  return true;
-
444  }
-
445  return false;
-
446 }
-
447 
-
448 IntelliTool* PaintingArea::copyActiveTool(){
-
449  switch(Tool->getTooltype()) {
- - - - - - - -
457  default: return nullptr;
-
458  }
-
459 }
-
460 
- -
462  return activeLayer;
+ +
303  return this->layerBundle[static_cast<size_t>(activeLayer)].image->getPolygonData();
+
304 }
+
305 
+
306 // If a mouse button is pressed check if it was the
+
307 // left button and if so store the current position
+
308 // Set that we are currently drawing
+
309 void PaintingArea::mousePressEvent(QMouseEvent*event){
+
310  if(this->activeLayer < 0) {
+
311  return;
+
312  }
+
313  if(Tool == nullptr)
+
314  return;
+
315  int x = event->x() - layerBundle[static_cast<size_t>(activeLayer)].widthOffset - offsetXDimension;
+
316  int y = event->y() - layerBundle[static_cast<size_t>(activeLayer)].heightOffset - offsetYDimension;
+
317  if(event->button() == Qt::LeftButton) {
+
318  Tool->onMouseLeftPressed(x, y);
+
319  }else if(event->button() == Qt::RightButton) {
+
320  Tool->onMouseRightPressed(x, y);
+
321  }
+
322  update();
+
323 }
+
324 
+
325 // When the mouse moves if the left button is clicked
+
326 // we call the drawline function which draws a line
+
327 // from the last position to the current
+
328 void PaintingArea::mouseMoveEvent(QMouseEvent*event){
+
329  if(this->activeLayer < 0) {
+
330  return;
+
331  }
+
332  if(Tool == nullptr)
+
333  return;
+
334  int x = event->x() - layerBundle[static_cast<size_t>(activeLayer)].widthOffset - offsetXDimension;
+
335  int y = event->y() - layerBundle[static_cast<size_t>(activeLayer)].heightOffset - offsetYDimension;
+
336  Tool->onMouseMoved(x, y);
+
337  update();
+
338 }
+
339 
+
340 // If the button is released we set variables to stop drawing
+
341 void PaintingArea::mouseReleaseEvent(QMouseEvent*event){
+
342  if(this->activeLayer < 0)
+
343  return;
+
344  if(Tool == nullptr)
+
345  return;
+
346  int x = event->x() - layerBundle[static_cast<size_t>(activeLayer)].widthOffset - offsetXDimension;
+
347  int y = event->y() - layerBundle[static_cast<size_t>(activeLayer)].heightOffset - offsetYDimension;
+
348  if(event->button() == Qt::LeftButton) {
+
349  Tool->onMouseLeftReleased(x, y);
+
350  }else if(event->button() == Qt::RightButton) {
+
351  Tool->onMouseRightReleased(x, y);
+
352  }
+
353  update();
+
354 }
+
355 
+
356 void PaintingArea::wheelEvent(QWheelEvent*event){
+
357  if(this->activeLayer < 0)
+
358  return;
+
359  if(this->Tool != nullptr) {
+
360  QPoint numDegrees = event->angleDelta() / 8;
+
361  if(!numDegrees.isNull()) {
+
362  QPoint numSteps = numDegrees / 15;
+
363  Tool->onWheelScrolled(numSteps.y() * -1);
+
364  }
+
365  }
+
366 }
+
367 
+
368 // QPainter provides functions to draw on the widget
+
369 // The QPaintEvent is sent to widgets that need to
+
370 // update themselves
+
371 void PaintingArea::paintEvent(QPaintEvent*event){
+
372  this->setFixedSize(QSize(maxWidth * 2,maxHeight * 2));
+
373  this->drawLayers();
+
374 
+
375  QPainter painter(this);
+
376 
+
377  //insert zoom factor here
+
378  painter.scale(1,1);
+
379 
+
380  //calulate image here for scroll
+
381  //Todo set offset in first to parameters and calulate them into mouse position
+
382  painter.drawImage(0, 0, *Canvas, -offsetXDimension, -offsetYDimension);
+
383  update();
+
384 }
+
385 
+
386 void PaintingArea::selectLayerUp(){
+
387  updateTools();
+
388  if(activeLayer != -1 && static_cast<size_t>(activeLayer)<layerBundle.size() - 1) {
+
389  std::swap(layerBundle[static_cast<size_t>(activeLayer)], layerBundle[static_cast<size_t>(activeLayer + 1)]);
+
390  activeLayer++;
+
391  }
+
392 }
+
393 
+
394 void PaintingArea::selectLayerDown(){
+
395  updateTools();
+
396  if(activeLayer>0) {
+
397  std::swap(layerBundle[static_cast<size_t>(activeLayer)], layerBundle[static_cast<size_t>(activeLayer - 1)]);
+
398  activeLayer--;
+
399  }
+
400 }
+
401 
+
402 void PaintingArea::drawLayers(bool forSaving){
+
403  if(forSaving) {
+
404  Canvas->fill(Qt::GlobalColor::transparent);
+
405  }else{
+
406  Canvas->fill(Qt::GlobalColor::black);
+
407  }
+
408  for(size_t i = 0; i<layerBundle.size(); i++) {
+
409  LayerObject layer = layerBundle[i];
+
410  QImage cpy = layer.image->getDisplayable(layer.alpha);
+
411  QColor clr_0;
+
412  QColor clr_1;
+
413  for(int y = 0; y<layer.height; y++) {
+
414  if(layer.heightOffset + y<0) continue;
+
415  if(layer.heightOffset + y>=maxHeight) break;
+
416  for(int x = 0; x<layer.width; x++) {
+
417  if(layer.widthOffset + x<0) continue;
+
418  if(layer.widthOffset + x>=maxWidth) break;
+
419  clr_0 = Canvas->pixelColor(layer.widthOffset + x, layer.heightOffset + y);
+
420  clr_1 = cpy.pixelColor(x,y);
+
421  float t = static_cast<float>(clr_1.alpha()) / 255.f;
+
422  int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
+
423  int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
+
424  int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
+
425  int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
+
426  clr_0.setRed(r);
+
427  clr_0.setGreen(g);
+
428  clr_0.setBlue(b);
+
429  clr_0.setAlpha(a);
+
430 
+
431  Canvas->setPixelColor(layer.widthOffset + x, layer.heightOffset + y, clr_0);
+
432  }
+
433  }
+
434  }
+
435 }
+
436 
+
437 bool PaintingArea::createTempTopLayer(int idx){
+
438  if(idx>=0) {
+
439  LayerObject newLayer;
+
440  newLayer.alpha = 255;
+
441  newLayer.height = layerBundle[static_cast<size_t>(idx)].height;
+
442  newLayer.width = layerBundle[static_cast<size_t>(idx)].width;
+
443  newLayer.heightOffset = layerBundle[static_cast<size_t>(idx)].heightOffset;
+
444  newLayer.widthOffset = layerBundle[static_cast<size_t>(idx)].widthOffset;
+
445  newLayer.image = layerBundle[static_cast<size_t>(idx)].image->getDeepCopy();
+
446  layerBundle.insert(layerBundle.begin() + idx + 1,newLayer);
+
447  return true;
+
448  }
+
449  return false;
+
450 }
+
451 
+
452 IntelliTool* PaintingArea::copyActiveTool(){
+
453  switch(Tool->getTooltype()) {
+ + + + + + + +
461  default: return nullptr;
+
462  }
463 }
464 
- -
466  if(activeLayer<0) {
-
467  return nullptr;
-
468  }
-
469  return layerBundle[static_cast<size_t>(activeLayer)].image;
-
470 }
-
471 
- -
473  QImage returnImage;
-
474  if(activeLayer<0) {
-
475  returnImage = QImage(QSize(10,10),QImage::Format_ARGB32);
-
476  returnImage.fill(QColor(255,255,255,255));
-
477  }
-
478  else{
-
479  returnImage = layerBundle[static_cast<size_t>(activeLayer)].image->getImageData();
-
480  if(renderSettings.isFastRenderering()) {
-
481  returnImage = returnImage.convertToFormat(QImage::Format_ARGB32);
-
482  }
-
483  }
-
484  return returnImage;
-
485 }
-
486 
-
487 std::vector<LayerObject>* PaintingArea::getLayerBundle(){
-
488  return &layerBundle;
+ +
466  return activeLayer;
+
467 }
+
468 
+ +
470  if(activeLayer<0) {
+
471  return nullptr;
+
472  }
+
473  return layerBundle[static_cast<size_t>(activeLayer)].image;
+
474 }
+
475 
+ +
477  QImage returnImage;
+
478  if(activeLayer<0) {
+
479  returnImage = QImage(QSize(10,10),QImage::Format_ARGB32);
+
480  returnImage.fill(QColor(255,255,255,255));
+
481  }
+
482  else{
+
483  returnImage = layerBundle[static_cast<size_t>(activeLayer)].image->getImageData();
+
484  if(renderSettings.isFastRenderering()) {
+
485  returnImage = returnImage.convertToFormat(QImage::Format_ARGB32);
+
486  }
+
487  }
+
488  return returnImage;
489 }
490 
-
491 void PaintingArea::updateTools(){
-
492  if(Tool!=nullptr) {
-
493  if(Tool->getIsDrawing()) {
-
494  IntelliTool* temp = copyActiveTool();
-
495  delete this->Tool;
-
496  this->Tool = temp;
-
497  }
-
498  if(isSettingPolygon) {
+
491 std::vector<LayerObject>* PaintingArea::getLayerBundle(){
+
492  return &layerBundle;
+
493 }
+
494 
+
495 void PaintingArea::updateTools(){
+
496  if(Tool!=nullptr) {
+
497  if(Tool->getIsDrawing()) {
+
498  IntelliTool* temp = copyActiveTool();
499  delete this->Tool;
-
500  this->Tool = nullptr;
-
501  isSettingPolygon = false;
-
502  }
-
503  }
-
504 }
-
505 
-
506 void PaintingArea::historyadd(){
-
507 
-
508  if (++historyPresent == 100) {
-
509  historyPresent = 0;
-
510  }
-
511  historyMaxFuture = historyPresent;
-
512  if (historyPresent == historyMaxPast)
-
513  if (++historyMaxPast == 100)
-
514  historyMaxPast = 0;
-
515  history[static_cast<size_t>(historyPresent)] = layerBundle;
-
516 }
-
517 
- -
519  if (historyPresent != historyMaxPast) {
-
520  if (--historyPresent == -1)
-
521  historyPresent = 99;
-
522  layerBundle = history[static_cast<size_t>(historyPresent)];
-
523  }
-
524  this->guiReference->UpdateGui();
-
525 }
-
526 
- -
528  if (historyPresent != historyMaxFuture) {
-
529  if (++historyPresent == 100)
-
530  historyPresent = 0;
-
531  layerBundle = history[static_cast<size_t>(historyPresent)];
-
532  }
-
533  this->guiReference->UpdateGui();
-
534 }
+
500  this->Tool = temp;
+
501  }
+
502  if(isSettingPolygon) {
+
503  delete this->Tool;
+
504  this->Tool = nullptr;
+
505  isSettingPolygon = false;
+
506  }
+
507  }
+
508 }
+
509 
+ +
511 
+
512  historyPresent++;
+
513  if (historyPresent == 100) {
+
514  historyPresent = 0;
+
515  }
+
516  historyMaxFuture = historyPresent;
+
517  if (historyPresent == historyMaxPast) {
+
518  historyMaxPast++;
+
519  if (historyMaxPast == 100) {
+
520  historyMaxPast = 0;
+
521  }
+
522  }
+
523  history[static_cast<size_t>(historyPresent)] = layerBundle;
+
524 }
+
525 
+ +
527  if (historyPresent != historyMaxPast) {
+
528  if (--historyPresent == -1)
+
529  historyPresent = 99;
+
530  if (activeLayer == -1)
+
531  activeLayer = 0;
+
532  if (layerBundle.size() > history[static_cast<size_t>(historyPresent)].size())
+
533  activeLayer = static_cast<int>(history[static_cast<size_t>(historyPresent)].size()) - 1;
+
534  if (history[static_cast<size_t>(historyPresent)].size() == 0)
+
535  activeLayer = -1;
+
536  layerBundle = history[static_cast<size_t>(historyPresent)];
+
537  }
+
538  this->guiReference->UpdateGui();
+
539 }
+
540 
+ +
542  if (historyPresent != historyMaxFuture) {
+
543  if (++historyPresent == 100)
+
544  historyPresent = 0;
+
545  if (activeLayer == -1)
+
546  activeLayer = 0;
+
547  if (layerBundle.size() > history[static_cast<size_t>(historyPresent)].size())
+
548  activeLayer = static_cast<int>(history[static_cast<size_t>(historyPresent)].size()) - 1;
+
549  if (history[static_cast<size_t>(historyPresent)].size() == 0)
+
550  activeLayer = -1;
+
551  layerBundle = history[static_cast<size_t>(historyPresent)];
+
552  }
+
553  this->guiReference->UpdateGui();
+
554 }
-
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()
createCircleTool creates a Circle Tool.
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:19
QColor getFirstColor() const
A function to read the primary selected color.
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:37
ImageType
The Types, which an Image can be.
Definition: IntelliImage.h:22
void setRenderSettings(bool isFastRenderingOn)
setRenderSettings updates all Images to the new Rendersetting.
-
IntelliImage * getImageOfActiveLayer()
-
void mouseReleaseEvent(QMouseEvent *event) override
-
void createRectangleTool()
+
IntelliImage * getImageOfActiveLayer()
getImageOfActiveLayer returns the image of the active Layer.
+
void mouseReleaseEvent(QMouseEvent *event) override
mouseReleaseEvent handles a mouse released event
+
void createRectangleTool()
createRectangleTool creates a Rectangle Tool.
virtual void onMouseLeftPressed(int x, int y)
A function managing the left click Pressed of a Mouse. Resetting the current draw....
Definition: IntelliTool.cpp:30
-
bool getIsDrawing() const
- +
bool getIsDrawing() const
getIsDrawing returns if the tool is currently drawing
+
int getMaxWidth()
getMaxWidth gets the max width of the Canvas.
bool isFastRenderering() const
The getfastRenderer gets the value of the flag for the fastRenderer setting.
-
bool save(const QString &filePath, const char *fileFormat)
The save method is used for exporting the current project as one picture.
-
Tooltype getTooltype() const
-
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.
+
Tooltype getTooltype() const
getTooltype returns the tools type
+
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< QPoint > getPolygonDataOfActiveLayer()
getPolygonDataOfActiveLayer get the polygon data 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.
+
int getMaxHeight()
getMaxHeight gets the max height of the Canvas.
+
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.
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.
+
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
+
void createPlainTool()
createPlainTool creates a Plain Tool.
+
void wheelEvent(QWheelEvent *event) override
wheelEvent handles a mouse wheel event
virtual ImageType getTypeOfImage()
Definition: IntelliImage.h:139
The LayerObject struct holds all the information needed to construct a layer.
Definition: PaintingArea.h:23
-
void createPenTool()
+
void createPenTool()
createPenTool creates a Pen Tool.
-
void mousePressEvent(QMouseEvent *event) override
+
void mousePressEvent(QMouseEvent *event) override
mousePressEvent handles a mouse pressed event.
int alpha
alpha - Stores the alpha value of the layer (default=255).
Definition: PaintingArea.h:47
QColor getSecondColor() const
A function to read the secondary selected color.
-
void historyGoBack()
+
int getIndexOfActiveLayer()
getIndexOfActiveLayer returns the index of athe active Layer.
+
void drawPixelOntoActive(QColor color, QPoint point)
drawPixelOntoActive draws a pixel onto the image data of the active Layer.
+
void historyGoBack()
historyGoBack go back in hisotry
The IntelliToolRectangle class represents a tool to draw a rectangle.
-
void createLineTool()
+
void createLineTool()
createLineTool creates a Line Tool.
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:26
-
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.
-
std::vector< LayerObject > * getLayerBundle()
getLayerBundle returns the real active layerbundle (care!)
+
std::vector< LayerObject > * getLayerBundle()
getLayerBundle returns the real active layerbundle (care!)
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
mouseMoveEvent handles a mouse moved event
-
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.
-
ImageType getTypeOfImageRealLayer()
-
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:223
-
PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
-
void setPixelToActive(QColor color, QPoint point)
+
ImageType getTypeOfImageActiveLayer()
getTypeOfImageActiveLayer get the type of the active Layer.
+
void setToolWidth(int value)
setToolWidth stes a width to the tool
+
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
+
void createPolygonTool()
createPolygonTool creates a Polygon Tool.
+
void moveActiveLayer(int idx)
The moveActiveLayer moves the active layer to a specific position in the layer stack.
+
IntelliColorPicker colorPicker
colorPicker a class to manage Tool color.
Definition: PaintingArea.h:286
+
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
-
void deleteAllLayers()
deleteAllLayers deletes all layers
-
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
-
void setLayerDimensions(int maxWidth, int maxHeight)
-
void createFloodFillTool()
-
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
-
void paintEvent(QPaintEvent *event) override
+
void deleteAllLayers()
deleteAllLayers deletes all layers
+
void setCanvasDimensions(int maxWidth, int maxHeight)
setCanvasDimensions sets the dimension of the Canvas
+
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
+
void createFloodFillTool()
createFloodFillTool creates a Floodfill Tool.
+
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
+
void paintEvent(QPaintEvent *event) override
paintEvent handles a painting event
void setFastRendering(bool Updatedsetting)
setFastRendering sets fastRendering to Updatedsetting.
- +
void UpdateGui()
UpdateGui a function to update all gui elements.
bool getRenderSettings()
getRenderSettings updates all Images to the new Rendersetting.
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:222
-
void setPolygon(int idx)
setPolygon is used for setting polygondata, it only works on RASTER images
+
IntelliToolsettings Toolsettings
Toolsettings - a class to manage Tool settings.
Definition: PaintingArea.h:281
+
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:30
virtual void onMouseMoved(int x, int y)
A function managing the mouse moved event. Call this in child classes!
Definition: IntelliTool.cpp:47
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, int alpha=255, ImageType type=ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
The IntelliToolPolygon managed the Drawing of Polygonforms.
-
void historyGoForward()
+
void historyGoForward()
historyGoForward a function to undo the return of the previous state of the project.
virtual void calculateVisiblity()=0
An abstract function that calculates the visiblity of the Image data if needed.
- +
void historyadd()
historyadd adds an hisotry step
+
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:52
The IntelliRasterImage manages a RASTERIMAGE.
-
void setPolygonDataToActive(std::vector< QPoint > points)
+
void setPolygonDataToActive(std::vector< QPoint > points)
setPolygonDataToActive sets polygondata to the active Layer.
+
void createGradientTool()
createGradientTool creates a Gradient Tool.
+
The IntelliToolGradient class that represents a gradient call.
+
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 c8e1e27..11cd012 100644 --- a/docs/html/_painting_area_8h.html +++ b/docs/html/_painting_area_8h.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/_painting_area_8h_source.html b/docs/html/_painting_area_8h_source.html index ca254d1..359c16b 100644 --- a/docs/html/_painting_area_8h_source.html +++ b/docs/html/_painting_area_8h_source.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -153,170 +153,195 @@ $(document).ready(function(){initNavTree('_painting_area_8h_source.html',''); in
177 void colorPickerSwapColors();
178 
-
179 void createPenTool();
-
180 void createPlainTool();
-
181 void createLineTool();
-
182 void createRectangleTool();
-
183 void createCircleTool();
-
184 void createPolygonTool();
-
185 void createFloodFillTool();
-
186 
-
191 int getWidthOfActive();
-
196 int getHeightOfActive();
-
197 
-
198 int getMaxWidth();
-
199 
-
200 int getMaxHeight();
-
201 
- +
182 void createPenTool();
+
183 
+
187 void createPlainTool();
+
188 
+
192 void createLineTool();
+
193 
+
197 void createRectangleTool();
+
198 
+
202 void createCircleTool();
203 
-
204 std::vector<QPoint> getPolygonDataOfRealLayer();
-
205 
- -
207 
- -
209 
- -
215 
-
220 std::vector<LayerObject>* getLayerBundle();
-
221 
- - -
224 
-
225 void historyGoBack();
-
226 void historyGoForward();
-
227 
-
228 void setLayerDimensions(int maxWidth, int maxHeight);
+
207 void createPolygonTool();
+
208 
+
212 void createFloodFillTool();
+
213 
+
217 void createGradientTool();
+
218 
+
223 int getWidthOfActive();
+
228 int getHeightOfActive();
229 
-
230 void setPixelToActive(QColor color, QPoint point);
-
231 
-
232 void setPolygonDataToActive(std::vector<QPoint> points);
-
233 public slots:
-
238 void slotActivateLayer(int a);
-
242 void slotDeleteActiveLayer();
-
243 
-
244 protected:
-
245 void mousePressEvent(QMouseEvent*event) override;
-
246 void mouseMoveEvent(QMouseEvent*event) override;
-
247 void mouseReleaseEvent(QMouseEvent*event) override;
-
248 
-
249 void wheelEvent(QWheelEvent*event) override;
-
250 
-
251 void paintEvent(QPaintEvent*event) override;
-
252 
-
253 private:
-
254 //offset for the displayable
-
255 int offsetXDimension;
-
256 int offsetYDimension;
-
257 
-
258 void selectLayerUp();
-
259 void selectLayerDown();
-
260 IntelliTool* copyActiveTool();
-
261 
-
262 QImage* Canvas;
-
263 QImage ScaledCanvas;
-
264 int maxWidth;
-
265 int maxHeight;
-
266 
-
267 bool isSettingPolygon = false;
-
268 
-
269 IntelliRenderSettings renderSettings;
-
270 IntelliTool* Tool;
-
271 IntelliPhotoGui* guiReference;
-
272 
-
273 std::vector<LayerObject> layerBundle;
-
274 int activeLayer = -1;
-
275 
-
276 void drawLayers(bool forSaving = false);
+
234 int getMaxWidth();
+
235 
+
240 int getMaxHeight();
+
241 
+ +
247 
+
252 std::vector<QPoint> getPolygonDataOfActiveLayer();
+
253 
+ +
259 
+ +
265 
+ +
271 
+
276 std::vector<LayerObject>* getLayerBundle();
277 
-
278 bool createTempTopLayer(int idx);
-
279 
-
280 void updateTools();
-
281 
-
282 std::vector<LayerObject> history[100] = {layerBundle};
-
283 int historyMaxPast = 0;
-
284 int historyMaxFuture = 0;
-
285 int historyPresent = 0;
-
286 
-
287 void historyadd();
-
288 
-
289 };
-
290 
-
291 #endif
+ +
282 
+ +
287 
+
291 void historyadd();
+
292 
+
296 void historyGoBack();
+
297 
+
301 void historyGoForward();
+
302 
+
308 void setCanvasDimensions(int maxWidth, int maxHeight);
+
309 
+
315 void drawPixelOntoActive(QColor color, QPoint point);
+
316 
+
321 void setPolygonDataToActive(std::vector<QPoint> points);
+
322 public slots:
+
327 void slotActivateLayer(int a);
+
331 void slotDeleteActiveLayer();
+
332 
+
333 protected:
+
338 void mousePressEvent(QMouseEvent*event) override;
+
339 
+
344 void mouseMoveEvent(QMouseEvent*event) override;
+
345 
+
350 void mouseReleaseEvent(QMouseEvent*event) override;
+
351 
+
356 void wheelEvent(QWheelEvent*event) override;
+
357 
+
362 void paintEvent(QPaintEvent*event) override;
+
363 
+
364 private:
+
368 int offsetXDimension;
+
369 
+
373 int offsetYDimension;
+
374 
+
378 void selectLayerUp();
+
379 
+
383 void selectLayerDown();
+
384 
+
389 IntelliTool* copyActiveTool();
+
390 
+
394 QImage* Canvas;
+
395 
+
399 QImage ScaledCanvas;
+
400 
+
404 int maxWidth;
+
405 
+
409 int maxHeight;
+
410 
+
414 bool isSettingPolygon = false;
+
415 
+
419 IntelliRenderSettings renderSettings;
+
420 
+
424 IntelliTool* Tool;
+
425 
+
429 IntelliPhotoGui* guiReference;
+
430 
+
434 std::vector<LayerObject> layerBundle;
+
435 
+
439 int activeLayer = -1;
+
440 
+
445 void drawLayers(bool forSaving = false);
+
446 
+
452 bool createTempTopLayer(int idx);
+
453 
+
457 void updateTools();
+
458 
+
462 std::vector<LayerObject> history[100] = {layerBundle};
+
463 
+
467 int historyMaxPast = 0;
+
468 
+
472 int historyMaxFuture = 0;
+
473 
+
477 int historyPresent = 0;
+
478 
+
479 };
+
480 
+
481 #endif
-
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()
createCircleTool creates a Circle Tool.
ImageType
The Types, which an Image can be.
Definition: IntelliImage.h:22
int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffset=0, ImageType type=ImageType::RASTERIMAGE)
The addLayerAt adds a layer to the current project/ painting area at a specific position in the layer...
void setRenderSettings(bool isFastRenderingOn)
setRenderSettings updates all Images to the new Rendersetting.
-
IntelliImage * getImageOfActiveLayer()
-
void mouseReleaseEvent(QMouseEvent *event) override
-
void createRectangleTool()
+
IntelliImage * getImageOfActiveLayer()
getImageOfActiveLayer returns the image of the active Layer.
+
void mouseReleaseEvent(QMouseEvent *event) override
mouseReleaseEvent handles a mouse released event
+
void createRectangleTool()
createRectangleTool creates a Rectangle Tool.
- +
int getMaxWidth()
getMaxWidth gets the max width of the Canvas.
-
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.
+
std::vector< QPoint > getPolygonDataOfActiveLayer()
getPolygonDataOfActiveLayer get the polygon data of the active Layer.
+
The IntelliRenderSettings class which manages the render Settings.
+
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.
+
int getMaxHeight()
getMaxHeight gets the max height of the Canvas.
+
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
+
int getHeightOfActive()
The getHeightOfActive gets the vertical dimensions of the active layer.
+
void createPlainTool()
createPlainTool creates a Plain Tool.
+
void wheelEvent(QWheelEvent *event) override
wheelEvent handles a mouse wheel event
The PaintingArea class manages the methods and stores information about the current painting area,...
Definition: PaintingArea.h:57
The LayerObject struct holds all the information needed to construct a layer.
Definition: PaintingArea.h:23
-
void createPenTool()
-
void mousePressEvent(QMouseEvent *event) override
+
void createPenTool()
createPenTool creates a Pen Tool.
+
void mousePressEvent(QMouseEvent *event) override
mousePressEvent handles a mouse pressed event.
int alpha
alpha - Stores the alpha value of the layer (default=255).
Definition: PaintingArea.h:47
-
void historyGoBack()
-
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 drawPixelOntoActive(QColor color, QPoint point)
drawPixelOntoActive draws a pixel onto the image data of the active Layer.
+
int getIndexOfActiveLayer()
getIndexOfActiveLayer returns the index of athe active Layer.
+
void historyGoBack()
historyGoBack go back in hisotry
+
void createLineTool()
createLineTool creates a Line Tool.
+
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.
-
std::vector< LayerObject > * getLayerBundle()
getLayerBundle returns the real active layerbundle (care!)
+
std::vector< LayerObject > * getLayerBundle()
getLayerBundle returns the real active layerbundle (care!)
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
-
int getNumberOfActiveLayer()
+
void mouseMoveEvent(QMouseEvent *event) override
mouseMoveEvent handles a mouse moved event
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.
-
ImageType getTypeOfImageRealLayer()
-
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:223
-
PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)
PaintingArea is the constructor of the PaintingArea class, which initiates the working environment.
-
void setPixelToActive(QColor color, QPoint point)
+
void slotDeleteActiveLayer()
The slotDeleteActiveLayer method handles the deletion of the active layer.
+
ImageType getTypeOfImageActiveLayer()
getTypeOfImageActiveLayer get the type of the active Layer.
+
bool open(const QString &filePath)
The open method is used for loading a picture into the current layer.
+
void createPolygonTool()
createPolygonTool creates a Polygon Tool.
+
void moveActiveLayer(int idx)
The moveActiveLayer moves the active layer to a specific position in the layer stack.
+
IntelliColorPicker colorPicker
colorPicker a class to manage Tool color.
Definition: PaintingArea.h:286
+
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
-
void deleteAllLayers()
deleteAllLayers deletes all layers
-
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
-
void setLayerDimensions(int maxWidth, int maxHeight)
-
void createFloodFillTool()
-
void slotActivateLayer(int a)
The slotActivateLayer method handles the event of selecting one layer as active.
+
void deleteAllLayers()
deleteAllLayers deletes all layers
+
void setCanvasDimensions(int maxWidth, int maxHeight)
setCanvasDimensions sets the dimension of the Canvas
+
QImage getImageDataOfActiveLayer()
getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer ...
+
void createFloodFillTool()
createFloodFillTool creates a Floodfill Tool.
+
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
paintEvent handles a painting event
bool getRenderSettings()
getRenderSettings updates all Images to the new Rendersetting.
IntelliImage * image
image - Stores the imageData of the current LayerObject.
Definition: PaintingArea.h:27
-
std::vector< QPoint > getPolygonDataOfRealLayer()
-
IntelliToolsettings Toolsettings
Definition: PaintingArea.h:222
-
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.
+
IntelliToolsettings Toolsettings
Toolsettings - a class to manage Tool settings.
Definition: PaintingArea.h:281
+
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:30
int addLayer(int width, int height, int widthOffset=0, int heightOffset=0, int alpha=255, ImageType type=ImageType::RASTERIMAGE)
The addLayer adds a layer to the current project/ painting area.
-
void historyGoForward()
- -
void setPolygonDataToActive(std::vector< QPoint > points)
- +
void historyGoForward()
historyGoForward a function to undo the return of the previous state of the project.
+
void historyadd()
historyadd adds an hisotry step
+ +
void setPolygonDataToActive(std::vector< QPoint > points)
setPolygonDataToActive sets polygondata to the active Layer.
+
void createGradientTool()
createGradientTool creates a Gradient Tool.
+
The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.
diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js index e7e6e6e..28c407f 100644 --- a/docs/html/annotated_dup.js +++ b/docs/html/annotated_dup.js @@ -10,6 +10,7 @@ var annotated_dup = [ "IntelliTool", "class_intelli_tool.html", "class_intelli_tool" ], [ "IntelliToolCircle", "class_intelli_tool_circle.html", "class_intelli_tool_circle" ], [ "IntelliToolFloodFill", "class_intelli_tool_flood_fill.html", "class_intelli_tool_flood_fill" ], + [ "IntelliToolGradient", "class_intelli_tool_gradient.html", "class_intelli_tool_gradient" ], [ "IntelliToolLine", "class_intelli_tool_line.html", "class_intelli_tool_line" ], [ "IntelliToolPen", "class_intelli_tool_pen.html", "class_intelli_tool_pen" ], [ "IntelliToolPlainTool", "class_intelli_tool_plain_tool.html", "class_intelli_tool_plain_tool" ], diff --git a/docs/html/class_intelli_color_picker-members.html b/docs/html/class_intelli_color_picker-members.html index 70ea16b..73d06fa 100644 --- a/docs/html/class_intelli_color_picker-members.html +++ b/docs/html/class_intelli_color_picker-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_color_picker.html b/docs/html/class_intelli_color_picker.html index d3dfb81..f60a452 100644 --- a/docs/html/class_intelli_color_picker.html +++ b/docs/html/class_intelli_color_picker.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_image-members.html b/docs/html/class_intelli_image-members.html index cb06210..96313d4 100644 --- a/docs/html/class_intelli_image-members.html +++ b/docs/html/class_intelli_image-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_image.html b/docs/html/class_intelli_image.html index 9ca305a..968965a 100644 --- a/docs/html/class_intelli_image.html +++ b/docs/html/class_intelli_image.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -163,10 +163,13 @@ Public Member Functions  setImageData overwrites the old imageData the new imageData. More...
  virtual int getWidth () const + getWidth returns the width of the Image. More...
  virtual int getHeight () const + getHeight returns the height of the Image. More...
  virtual bool isFastRendering () const + isFastRendering returns if the Image is in fast rendering mode. More...
 

@@ -632,6 +635,9 @@ Protected Attributes

+

getHeight returns the height of the Image.

+
Returns
The height of the Image in pixel.
+

Definition at line 167 of file IntelliImage.cpp.

@@ -784,6 +790,9 @@ Protected Attributes
+

getWidth returns the width of the Image.

+
Returns
The width of the Image in pixel.
+

Definition at line 163 of file IntelliImage.cpp.

@@ -811,6 +820,9 @@ Protected Attributes
+

isFastRendering returns if the Image is in fast rendering mode.

+
Returns
True if the Image is fast rendered, flase otherwiese.
+

Definition at line 171 of file IntelliImage.cpp.

diff --git a/docs/html/class_intelli_input_dialog-members.html b/docs/html/class_intelli_input_dialog-members.html index b423c22..c14f63f 100644 --- a/docs/html/class_intelli_input_dialog-members.html +++ b/docs/html/class_intelli_input_dialog-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_input_dialog.html b/docs/html/class_intelli_input_dialog.html index 8c2a691..51f7a82 100644 --- a/docs/html/class_intelli_input_dialog.html +++ b/docs/html/class_intelli_input_dialog.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -92,6 +92,9 @@ $(document).ready(function(){initNavTree('class_intelli_input_dialog.html','');
+

The IntelliInputDialog class is a customized Input Dialog to get Integers. + More...

+

#include <IntelliInputDialog.h>

Inheritance diagram for IntelliInputDialog:
@@ -103,23 +106,28 @@ Inheritance diagram for IntelliInputDialog:

Public Slots

void slotCloseEvent () + slotCloseEvent is a slot for catching the close Event. More...
  void slotEingabe () + slotEingabe is a slot for catching the Input Event. More...
  +

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)
 IntelliInputDialog is the baisc constructor to for the InputDialog. More...
 
+

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)
 getInt is a static funktion ยด, which creates an Input Dialog and gets an Integer. More...
 

Detailed Description

-
-

Definition at line 12 of file IntelliInputDialog.h.

+

The IntelliInputDialog class is a customized Input Dialog to get Integers.

+ +

Definition at line 15 of file IntelliInputDialog.h.

Constructor & Destructor Documentation

◆ IntelliInputDialog()

@@ -177,6 +185,20 @@ Static Public Member Functions
+

IntelliInputDialog is the baisc constructor to for the InputDialog.

+
Parameters
+ + + + + + + + +
Title- Title of the Input Dialog.
Label- A Label for the Iput Dialog, to show further information.
value- The standart value in the Input Box.
minValue- The minimal value to read.
maxValue- The maximal value to read.
step- The step size of Values.
ok- A check if the input was okay
+
+
+

Definition at line 3 of file IntelliInputDialog.cpp.

@@ -246,6 +268,21 @@ Static Public Member Functions
+

getInt is a static funktion ยด, which creates an Input Dialog and gets an Integer.

+
Parameters
+ + + + + + + + +
Title- Title of the Input Dialog.
Label- A Label for the Iput Dialog, to show further information.
value- The standart value in the Input Box.
minValue- The minimal value to read.
maxValue- The maximal value to read.
step- The step size of Values.
ok- A check if the input was okay
+
+
+
Returns
+

Definition at line 16 of file IntelliInputDialog.cpp.

@@ -273,6 +310,8 @@ Static Public Member Functions
+

slotCloseEvent is a slot for catching the close Event.

+

Definition at line 74 of file IntelliInputDialog.cpp.

@@ -300,6 +339,8 @@ Static Public Member Functions
+

slotEingabe is a slot for catching the Input Event.

+

Definition at line 78 of file IntelliInputDialog.cpp.

diff --git a/docs/html/class_intelli_photo_gui-members.html b/docs/html/class_intelli_photo_gui-members.html index abeec7e..e34fcbd 100644 --- a/docs/html/class_intelli_photo_gui-members.html +++ b/docs/html/class_intelli_photo_gui-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_photo_gui.html b/docs/html/class_intelli_photo_gui.html index 30c0d5d..99ec3a5 100644 --- a/docs/html/class_intelli_photo_gui.html +++ b/docs/html/class_intelli_photo_gui.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -108,8 +108,10 @@ Public Member Functions  The IntelliPhotoGui method is the constructor and is used to create a new instance of the main program window. More...
  void UpdateGui () + UpdateGui a function to update all gui elements. More...
  void setToolWidth (int value) + setToolWidth stes a width to the tool More...
 

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

-

Definition at line 12 of file IntelliPhotoGui.cpp.

+

Definition at line 14 of file IntelliPhotoGui.cpp.

@@ -171,7 +173,7 @@ Protected Member Functions

The closeEvent function handles closing events.

-

Definition at line 27 of file IntelliPhotoGui.cpp.

+

Definition at line 30 of file IntelliPhotoGui.cpp.

@@ -191,7 +193,15 @@ Protected Member Functions

@@ -140,7 +142,7 @@ Protected Member Functions

-

Definition at line 886 of file IntelliPhotoGui.cpp.

+

setToolWidth stes a width to the tool

+
Parameters
+ + +
value- the width of the tool
+
+
+ +

Definition at line 923 of file IntelliPhotoGui.cpp.

@@ -210,7 +220,9 @@ Protected Member Functions
-

Definition at line 895 of file IntelliPhotoGui.cpp.

+

UpdateGui a function to update all gui elements.

+ +

Definition at line 932 of file IntelliPhotoGui.cpp.

diff --git a/docs/html/class_intelli_raster_image-members.html b/docs/html/class_intelli_raster_image-members.html index 1813074..520e648 100644 --- a/docs/html/class_intelli_raster_image-members.html +++ b/docs/html/class_intelli_raster_image-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_raster_image.html b/docs/html/class_intelli_raster_image.html index 454d71e..cb8e1be 100644 --- a/docs/html/class_intelli_raster_image.html +++ b/docs/html/class_intelli_raster_image.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -171,10 +171,13 @@ Public Member Functions  setImageData overwrites the old imageData the new imageData. More...
  virtual int getWidth () const + getWidth returns the width of the Image. More...
  virtual int getHeight () const + getHeight returns the height of the Image. More...
  virtual bool isFastRendering () const + isFastRendering returns if the Image is in fast rendering mode. More...
  diff --git a/docs/html/class_intelli_render_settings.html b/docs/html/class_intelli_render_settings.html index 5f148f2..0f5ac69 100644 --- a/docs/html/class_intelli_render_settings.html +++ b/docs/html/class_intelli_render_settings.html @@ -26,7 +26,7 @@ @@ -90,6 +90,9 @@ $(document).ready(function(){initNavTree('class_intelli_render_settings.html',''
+

The IntelliRenderSettings class which manages the render Settings. + More...

+

#include <IntelliRenderSettings.h>

diff --git a/docs/html/class_intelli_render_settings-members.html b/docs/html/class_intelli_render_settings-members.html index b6b8a9d..091b12a 100644 --- a/docs/html/class_intelli_render_settings-members.html +++ b/docs/html/class_intelli_render_settings-members.html @@ -26,7 +26,7 @@

IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7

@@ -104,8 +107,9 @@ Public Member Functions

 

Detailed Description

-
-

Definition at line 8 of file IntelliRenderSettings.h.

+

The IntelliRenderSettings class which manages the render Settings.

+ +

Definition at line 10 of file IntelliRenderSettings.h.

Constructor & Destructor Documentation

◆ IntelliRenderSettings()

diff --git a/docs/html/class_intelli_shaped_image-members.html b/docs/html/class_intelli_shaped_image-members.html index f1d8bd8..08029a5 100644 --- a/docs/html/class_intelli_shaped_image-members.html +++ b/docs/html/class_intelli_shaped_image-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_shaped_image.html b/docs/html/class_intelli_shaped_image.html index d082386..35df737 100644 --- a/docs/html/class_intelli_shaped_image.html +++ b/docs/html/class_intelli_shaped_image.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -180,10 +180,13 @@ Public Member Functions  setImageData overwrites the old imageData the new imageData. More...
  virtual int getWidth () const + getWidth returns the width of the Image. More...
  virtual int getHeight () const + getHeight returns the height of the Image. More...
  virtual bool isFastRendering () const + isFastRendering returns if the Image is in fast rendering mode. More...
  diff --git a/docs/html/class_intelli_tool.html b/docs/html/class_intelli_tool.html index 02c3620..52c224a 100644 --- a/docs/html/class_intelli_tool.html +++ b/docs/html/class_intelli_tool.html @@ -26,7 +26,7 @@ @@ -102,13 +102,14 @@ Inheritance diagram for IntelliTool:
-IntelliToolCircle -IntelliToolFloodFill -IntelliToolLine -IntelliToolPen -IntelliToolPlainTool -IntelliToolPolygon -IntelliToolRectangle +IntelliToolCircle +IntelliToolFloodFill +IntelliToolGradient +IntelliToolLine +IntelliToolPen +IntelliToolPlainTool +IntelliToolPolygon +IntelliToolRectangle

diff --git a/docs/html/class_intelli_tool-members.html b/docs/html/class_intelli_tool-members.html index 735dda0..98ce117 100644 --- a/docs/html/class_intelli_tool-members.html +++ b/docs/html/class_intelli_tool-members.html @@ -26,7 +26,7 @@

IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
@@ -117,15 +118,18 @@ Public Types +
enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
+ +

@@ -155,8 +159,10 @@ Public Member Functions

 A function managing the mouse moved event. Call this in child classes! More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + @@ -205,9 +213,12 @@ Protected Attributes

@@ -165,11 +171,13 @@ Protected Attributes

 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
+ +

The Tooltype enum categorising the toosl.

+ @@ -216,7 +227,7 @@ Protected Attributes
Enumerator
CIRCLE 
FLOODFILL 
GRADIENT 
LINE 
PEN 
PLAIN 
NONE 
-

Definition at line 20 of file IntelliTool.h.

+

Definition at line 23 of file IntelliTool.h.

@@ -311,6 +322,9 @@ Protected Attributes
+

getIsDrawing returns if the tool is currently drawing

+
Returns
returns if the tool is currently drawing
+

Definition at line 105 of file IntelliTool.cpp.

@@ -330,6 +344,9 @@ Protected Attributes
+

getTooltype returns the tools type

+
Returns
returns the tool type of the current tool.
+

Definition at line 101 of file IntelliTool.cpp.

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

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

+

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

Definition at line 30 of file IntelliTool.cpp.

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

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

+

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

Definition at line 37 of file IntelliTool.cpp.

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

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

+

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

Definition at line 47 of file IntelliTool.cpp.

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

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

+

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

Definition at line 19 of file IntelliTool.cpp.

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

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

+

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

Definition at line 26 of file IntelliTool.cpp.

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

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

+

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

Definition at line 52 of file IntelliTool.cpp.

@@ -640,7 +657,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 64 of file IntelliTool.h.

+

Definition at line 74 of file IntelliTool.h.

@@ -664,7 +681,9 @@ Protected Attributes
-

Definition at line 52 of file IntelliTool.h.

+

ActiveType the type of the active tool.

+ +

Definition at line 59 of file IntelliTool.h.

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

A pointer to the general PaintingArea to interact with.

-

Definition at line 50 of file IntelliTool.h.

+

Definition at line 54 of file IntelliTool.h.

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

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

-

Definition at line 69 of file IntelliTool.h.

+

Definition at line 79 of file IntelliTool.h.

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

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

-

Definition at line 57 of file IntelliTool.h.

+

Definition at line 64 of file IntelliTool.h.

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

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

-

Definition at line 74 of file IntelliTool.h.

+

Definition at line 84 of file IntelliTool.h.

@@ -792,7 +811,9 @@ Protected Attributes
-

Definition at line 59 of file IntelliTool.h.

+

Toolsettings a refrence to the tool settings.

+ +

Definition at line 69 of file IntelliTool.h.

diff --git a/docs/html/class_intelli_tool.js b/docs/html/class_intelli_tool.js index 662a2c5..f6bb814 100644 --- a/docs/html/class_intelli_tool.js +++ b/docs/html/class_intelli_tool.js @@ -3,6 +3,7 @@ var class_intelli_tool = [ "Tooltype", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f", [ [ "CIRCLE", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491", null ], [ "FLOODFILL", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93", null ], + [ "GRADIENT", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa90f70ea2675c36bd9b0b44a79f37a41f", null ], [ "LINE", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7", null ], [ "PEN", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678", null ], [ "PLAIN", "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5", null ], diff --git a/docs/html/class_intelli_tool.png b/docs/html/class_intelli_tool.png index 9a2a1db7d285d198f67131f8624297d312d1e8c2..4d872f596ead2c7ea03526373450dcc2a05f43f8 100644 GIT binary patch literal 2298 zcmcgueNYp38it{#0w=jtQL2)y;ZCN0pjL$ffh}z~>RA)@)KK{dNLx+;IX*%Hge>PB zO+3`t$y6+exwF@LXZZ3ggzrE?iC-8olmIcrB`F9PlMomBrhBrL3wcH`jLYVE{$G}*U(@&m*@{BylUsx};Sr-$_!y&>I< zI^$Bt)E*5t!wFtgv88+|gER0?xq`oqlKv44D||@}&vU~ngFP?Cul(r#d2@4@;{k%1 z@@M{GWl8y0eMxU0=iG^fH>Z^F&%Zor^VFY6t9Y%naD62CLY(Vp&|+V_hV9#J-KP{ida^Mjk`uHp&&(y$F-{E@W2M?>PHin4x^VLZ{SR-$(OHnj2Cc=6$77=GIAU3ZcOvbgCu;G1T^BI6>ZCcjy8cW^Z z<%;HPLtI)$X;N0ETw&e%s>pt7z~t%b`h$3fyaD2^s1km(FRA|+A`lRyA+A&C;1BO4 zK;)C$cr+phoqZ_q^Z#m%vQrP)tdliRu|RN&j=mY*y#V$TY}bc8WOV+DQlilE*_Ghe zOlJXX3b2;~b!+BUgJj`l2YBD;nofDaY*pRe*-6koZ4rj9MGJt!tSM8YA zOXp~>a6Qrwo4g`)f)no(ne2H@ALO}+wrl|{sMPa*H8dOG0tRQnRxSPErZu?6 zE0#@KJe+*EgwOh+TiQRg4rk?0e8aIm=+UJTiUj$f|TQqHAI7U^*wI8W|g7lxzl4GA#SbpF7-?-M&Y%7{iq-BVbvdp+0rXN~rqc1Kbg~Kf8GOn^Z^YSI~uqN4!8Rg$wnl+H6+MVGE-#O(av&u?@0fb8}6cUb+CB*&(hq z>$??>{!C}4#gK-+ivYu>z|=FfSJ9nynfQFgHP1(p$)7rJBRtDnRzHo&=0$rz&bM&%ymCAIR z86zzUk literal 1396 zcmZ`(Yfuwc6ixs&f=VKz3yLBUaT@C)S{^z`C;} zr9~Xj;2=%eq6jjOC?*(LXysJ|3qlmL;gNtzh@gQWNjFS8(;w}fxp%+&opZi(&dfc_ zI}jPR+{{d=c}Q$H#97A|pgQ+#dyE9M)z! zKG&&07;ZLlN&r|H+>n)C%cB`gclf%L&^bHefi`S)FSr; z^tuQNTRh{xJLSgxAT&YTF-9J$-egG1G)y=F?m-trPHXr*UQB|G-RTM#o({#~-#FJx zW;$qvjS3~pb|DD+6nT*5B@8 zJ#(#PrmNUj^3cY-78=VZllJUEb(|J-sNw&q^FQ+c&`RMbJ5cy^mL15Qnq{w;kG(8= zlTnJ}32>F!L=T%5)Gx~;nAi+c_U2H2L!7YX8wm(;dJ|!#JLnlq^ax%p#5u3y;ep#; zXbjUEmsBAJP9sSj}bQp$9w>$?Mu??@wLcI-?ulq666Y#&y|K1n!5bUk9M!1qiI z(&-Nk^GmA=YF@y8G?@#hUhfY?4_88_W)L8sJOX@G!rwAlD$I- zJm6S7uUTAB()czXmWsRJR=dF%Md16sgxhx2s=+yA1u(SgIE|q=Sm?O4Xb!oxlfh`t z2iM&=z?!X*Zhen2|&{M!a23_+hvn2@5%Yz3Tr{?rG0 z)QcaBq~aP+757lo`*uj$|Iu}YmVYcd%dKCJ6upf0X_jcka@fZ!hk9A_e9TY23ow3w zyW2E)V9&XK*>7FPR$>lN39vZ3BVmF6ppB(djxe^9HHlbvEMfiQLK?JOfB( z)x=$gR3>x2w{X0mRhq&o=C6H6CwXUib*w6T0&9I-$hi>Y5-9FByXxTVN6CLm#EBzD z#+CIgo`7Gcxt5UX=j@{nW9lx%ccPsL6JW3kGErA5-FTCe51=zeGDhz8Ptj*@HWKb_ zeG5qZOE!U?a?5Uca*r^wjbzr6+E4PVBOu!pJTAncgF>^Qqa-f=8~y@yU&TcO+&JfN nwjKSrZCQvTIzU+mb1WE^djm@_JhvGAMPjI-k(7JE$G`gvU}T@3 diff --git a/docs/html/class_intelli_tool_circle-members.html b/docs/html/class_intelli_tool_circle-members.html index 21834ef..da82e76 100644 --- a/docs/html/class_intelli_tool_circle-members.html +++ b/docs/html/class_intelli_tool_circle-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_tool_circle.html b/docs/html/class_intelli_tool_circle.html index a7981de..d13714d 100644 --- a/docs/html/class_intelli_tool_circle.html +++ b/docs/html/class_intelli_tool_circle.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -138,8 +138,10 @@ Public Member Functions  An abstract Destructor. More...
  Tooltype getTooltype () const + getTooltype returns the tools type More...
  bool getIsDrawing () const + getIsDrawing returns if the tool is currently drawing More...
  + + + diff --git a/docs/html/class_intelli_tool_flood_fill-members.html b/docs/html/class_intelli_tool_flood_fill-members.html index f3cf163..a8ad1a6 100644 --- a/docs/html/class_intelli_tool_flood_fill-members.html +++ b/docs/html/class_intelli_tool_flood_fill-members.html @@ -26,7 +26,7 @@ diff --git a/docs/html/class_intelli_tool_flood_fill.html b/docs/html/class_intelli_tool_flood_fill.html index 06daebf..1a5e662 100644 --- a/docs/html/class_intelli_tool_flood_fill.html +++ b/docs/html/class_intelli_tool_flood_fill.html @@ -26,7 +26,7 @@ @@ -138,8 +138,10 @@ Public Member Functions + +

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
 An abstract Destructor. More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + + diff --git a/docs/html/class_intelli_tool_gradient-members.html b/docs/html/class_intelli_tool_gradient-members.html new file mode 100644 index 0000000..71b215b --- /dev/null +++ b/docs/html/class_intelli_tool_gradient-members.html @@ -0,0 +1,123 @@ + + + + + + + +IntelliPhoto: Member List + + + + + + + + + + + + + +
+
+

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
+ + + + + +
+
IntelliPhoto +  0.7 +
+
+ + + + + + + + + +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntelliToolGradient Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + +
activeLayerIntelliToolprotected
ActiveTypeIntelliToolprotected
AreaIntelliToolprotected
CanvasIntelliToolprotected
colorPickerIntelliToolprotected
getIsDrawing() constIntelliTool
getTooltype() constIntelliTool
IntelliTool(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)IntelliTool
IntelliToolGradient(PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)IntelliToolGradient
isDrawingIntelliToolprotected
onMouseLeftPressed(int x, int y) overrideIntelliToolGradientvirtual
onMouseLeftReleased(int x, int y) overrideIntelliToolGradientvirtual
onMouseMoved(int x, int y) overrideIntelliToolGradientvirtual
onMouseRightPressed(int x, int y) overrideIntelliToolGradientvirtual
onMouseRightReleased(int x, int y) overrideIntelliToolGradientvirtual
onWheelScrolled(int value) overrideIntelliToolGradientvirtual
ToolsettingsIntelliToolprotected
Tooltype enum nameIntelliTool
~IntelliTool()=0IntelliToolpure virtual
~IntelliToolGradient() overrideIntelliToolGradientvirtual
+
+ + + + diff --git a/docs/html/class_intelli_tool_gradient.html b/docs/html/class_intelli_tool_gradient.html new file mode 100644 index 0000000..6c20c70 --- /dev/null +++ b/docs/html/class_intelli_tool_gradient.html @@ -0,0 +1,569 @@ + + + + + + + +IntelliPhoto: IntelliToolGradient Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
IntelliPhoto +  0.7 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
IntelliToolGradient Class Reference
+
+
+ +

The IntelliToolGradient class that represents a gradient call. + More...

+ +

#include <IntelliToolGradient.h>

+
+Inheritance diagram for IntelliToolGradient:
+
+
+ + +IntelliTool + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IntelliToolGradient (PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
 IntelliToolGradient basic constructor of the gradient tool. More...
 
virtual ~IntelliToolGradient () override
 ~IntelliToolGradient basic destructor. More...
 
virtual void onMouseRightPressed (int x, int y) override
 A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes! More...
 
virtual void onMouseRightReleased (int x, int y) override
 A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes! More...
 
virtual void onMouseLeftPressed (int x, int y) override
 A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes! More...
 
virtual void onMouseLeftReleased (int x, int y) override
 A function managing the left click Released of a Mouse. Call this in child classes! More...
 
virtual void onWheelScrolled (int value) override
 A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes! More...
 
virtual void onMouseMoved (int x, int y) override
 A function managing the mouse moved event. Call this in child classes! More...
 
- Public Member Functions inherited from IntelliTool
 IntelliTool (PaintingArea *Area, IntelliColorPicker *colorPicker, IntelliToolsettings *Toolsettings)
 A constructor setting the general Painting Area and colorPicker. More...
 
virtual ~IntelliTool ()=0
 An abstract Destructor. More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from IntelliTool
enum  Tooltype {
+  Tooltype::CIRCLE, +Tooltype::FLOODFILL, +Tooltype::GRADIENT, +Tooltype::LINE, +
+  Tooltype::PEN, +Tooltype::PLAIN, +Tooltype::POLYGON, +Tooltype::RECTANGLE, +
+  Tooltype::NONE +
+ }
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
 
LayerObjectCanvas
 A pointer to the drawing canvas of the tool, work on this. More...
 
bool isDrawing = false
 A flag checking if the user is currently drawing or not. More...
 
+

Detailed Description

+

The IntelliToolGradient class that represents a gradient call.

+ +

Definition at line 7 of file IntelliToolGradient.h.

+

Constructor & Destructor Documentation

+ +

◆ IntelliToolGradient()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
IntelliToolGradient::IntelliToolGradient (PaintingAreaArea,
IntelliColorPickercolorPicker,
IntelliToolsettingsToolsettings 
)
+
+ +

IntelliToolGradient basic constructor of the gradient tool.

+
Parameters
+ + + + +
Area- a reference to the paintingArea
colorPicker- a reference to the colorpicker
Toolsettings- a regerence to the Toolsettings
+
+
+ +

Definition at line 6 of file IntelliToolGradient.cpp.

+ +
+
+ +

◆ ~IntelliToolGradient()

+ +
+
+ + + + + +
+ + + + + + + +
IntelliToolGradient::~IntelliToolGradient ()
+
+overridevirtual
+
+ +

~IntelliToolGradient basic destructor.

+ +

Definition at line 13 of file IntelliToolGradient.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ onMouseLeftPressed()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void IntelliToolGradient::onMouseLeftPressed (int x,
int y 
)
+
+overridevirtual
+
+ +

A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes!

+
Parameters
+ + + +
x- The x coordinate relative to the active/canvas layer.
y- The y coordinate relative to the active/canvas layer.
+
+
+ +

Reimplemented from IntelliTool.

+ +

Definition at line 17 of file IntelliToolGradient.cpp.

+ +
+
+ +

◆ onMouseLeftReleased()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void IntelliToolGradient::onMouseLeftReleased (int x,
int y 
)
+
+overridevirtual
+
+ +

A function managing the left click Released of a Mouse. Call this in child classes!

+
Parameters
+ + + +
x- The x coordinate relative to the active/canvas layer.
y- The y coordinate relative to the active/canvas layer.
+
+
+ +

Reimplemented from IntelliTool.

+ +

Definition at line 32 of file IntelliToolGradient.cpp.

+ +
+
+ +

◆ onMouseMoved()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void IntelliToolGradient::onMouseMoved (int x,
int y 
)
+
+overridevirtual
+
+ +

A function managing the mouse moved event. Call this in child classes!

+
Parameters
+ + + +
x- The x coordinate of the new mouse position.
y- The y coordinate of the new mouse position.
+
+
+ +

Reimplemented from IntelliTool.

+ +

Definition at line 43 of file IntelliToolGradient.cpp.

+ +
+
+ +

◆ onMouseRightPressed()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void IntelliToolGradient::onMouseRightPressed (int x,
int y 
)
+
+overridevirtual
+
+ +

A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes!

+
Parameters
+ + + +
x- The x coordinate relative to the active/canvas layer.
y- The y coordinate relative to the active/canvas layer.
+
+
+ +

Reimplemented from IntelliTool.

+ +

Definition at line 28 of file IntelliToolGradient.cpp.

+ +
+
+ +

◆ onMouseRightReleased()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void IntelliToolGradient::onMouseRightReleased (int x,
int y 
)
+
+overridevirtual
+
+ +

A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes!

+
Parameters
+ + + +
x- The x coordinate relative to the active/canvas layer.
y- The y coordinate relative to the active/canvas layer.
+
+
+ +

Reimplemented from IntelliTool.

+ +

Definition at line 39 of file IntelliToolGradient.cpp.

+ +
+
+ +

◆ onWheelScrolled()

+ +
+
+ + + + + +
+ + + + + + + + +
void IntelliToolGradient::onWheelScrolled (int value)
+
+overridevirtual
+
+ +

A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes!

+
Parameters
+ + +
value- The absolute the scroll has changed.
+
+
+ +

Reimplemented from IntelliTool.

+ +

Definition at line 59 of file IntelliToolGradient.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/html/class_intelli_tool_gradient.js b/docs/html/class_intelli_tool_gradient.js new file mode 100644 index 0000000..12afbda --- /dev/null +++ b/docs/html/class_intelli_tool_gradient.js @@ -0,0 +1,11 @@ +var class_intelli_tool_gradient = +[ + [ "IntelliToolGradient", "class_intelli_tool_gradient.html#ad29617596a4dcf09aa8bcc633d627203", null ], + [ "~IntelliToolGradient", "class_intelli_tool_gradient.html#a7d5c812815872b7e394e36362358b539", null ], + [ "onMouseLeftPressed", "class_intelli_tool_gradient.html#a47700908dab413203d06d64175a12cc1", null ], + [ "onMouseLeftReleased", "class_intelli_tool_gradient.html#a6bbe09b64d8cd69e5ff64a3344725b11", null ], + [ "onMouseMoved", "class_intelli_tool_gradient.html#aff3ccbecb7a33514765fdb44c7ce9e4e", null ], + [ "onMouseRightPressed", "class_intelli_tool_gradient.html#aed5ad1f718d53034d944ff8f1e8f9f36", null ], + [ "onMouseRightReleased", "class_intelli_tool_gradient.html#a04315a520c97541d76e7723a07e0a834", null ], + [ "onWheelScrolled", "class_intelli_tool_gradient.html#a11f77ac474b697ebb6bc185560437f6a", null ] +]; \ No newline at end of file diff --git a/docs/html/class_intelli_tool_gradient.png b/docs/html/class_intelli_tool_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..133331028bcc2a88a0b468b09d4383943f6318aa GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^g+Ls@!3-oN1F}FIi2$Dv*Z=?j1DOvWJxWebp8#Zm z@qq&eKC1}X0l6F{L4LsuKt&*M^;C!v0|R4_r;B4q1>@VfH}eiF2)Oc#YySU#(s$2> zij{#@vf*c4WKOf$92XCmchWLF{KTXu9ulf2XW3`?94`;{{_G!gd)xU*x4tnyj;v&U ztbOKll%8s`=6)94#gj^oP1q=56>EC!o!LGWS%YaG-5%Ej%rTaG^VmKrbopj2&t)xv zlh$x9R*5X`HhezEma(Fny+QlkvEzrMU*^?t&7J!1Sii;UL>2?}9)@czf(K?9FhvNv zF=QX&Nbr?lT*Ik+KvHw*6E4mJ6M+)Ni#K-d-o0{dJ5R=~FEtn9@3YJbbD4h3H{Cpc z8`GCLHAk=g;4-fLTBIp?`ip9S^{sWGl5xkcb#8rfEP`k5Iw@&?<1IDb*Y8h%srFs+ zzTvb3_owbOJI9`6kbL*T*R`=T7xu9Ku1K_r{u21u<5+5B`LVNhaZ<<6zpB|?dt?69 qAoG9WjCGAbXM9#XHYMoO6Yd>e5*PK1KAi%FID@CFpUXO@geCw)7{x{a literal 0 HcmV?d00001 diff --git a/docs/html/class_intelli_tool_line-members.html b/docs/html/class_intelli_tool_line-members.html index fc91e17..99238be 100644 --- a/docs/html/class_intelli_tool_line-members.html +++ b/docs/html/class_intelli_tool_line-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_intelli_tool_line.html b/docs/html/class_intelli_tool_line.html index 4231e24..f2a78bb 100644 --- a/docs/html/class_intelli_tool_line.html +++ b/docs/html/class_intelli_tool_line.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -138,8 +138,10 @@ Public Member Functions  An abstract Destructor. More...
  Tooltype getTooltype () const + getTooltype returns the tools type More...
  bool getIsDrawing () const + getIsDrawing returns if the tool is currently drawing More...
  + + + diff --git a/docs/html/class_intelli_tool_pen-members.html b/docs/html/class_intelli_tool_pen-members.html index 71369b5..429bf02 100644 --- a/docs/html/class_intelli_tool_pen-members.html +++ b/docs/html/class_intelli_tool_pen-members.html @@ -26,7 +26,7 @@ diff --git a/docs/html/class_intelli_tool_pen.html b/docs/html/class_intelli_tool_pen.html index b5e1322..09aef62 100644 --- a/docs/html/class_intelli_tool_pen.html +++ b/docs/html/class_intelli_tool_pen.html @@ -26,7 +26,7 @@ @@ -138,8 +138,10 @@ Public Member Functions + +

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
 An abstract Destructor. More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + + diff --git a/docs/html/class_intelli_tool_plain_tool-members.html b/docs/html/class_intelli_tool_plain_tool-members.html index 2c30fb5..93a5b13 100644 --- a/docs/html/class_intelli_tool_plain_tool-members.html +++ b/docs/html/class_intelli_tool_plain_tool-members.html @@ -26,7 +26,7 @@ diff --git a/docs/html/class_intelli_tool_plain_tool.html b/docs/html/class_intelli_tool_plain_tool.html index 4535c8a..db013c6 100644 --- a/docs/html/class_intelli_tool_plain_tool.html +++ b/docs/html/class_intelli_tool_plain_tool.html @@ -26,7 +26,7 @@ @@ -138,8 +138,10 @@ Public Member Functions + +

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
 An abstract Destructor. More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + + diff --git a/docs/html/class_intelli_tool_polygon-members.html b/docs/html/class_intelli_tool_polygon-members.html index f6a0cbd..8ebaa1d 100644 --- a/docs/html/class_intelli_tool_polygon-members.html +++ b/docs/html/class_intelli_tool_polygon-members.html @@ -26,7 +26,7 @@ diff --git a/docs/html/class_intelli_tool_polygon.html b/docs/html/class_intelli_tool_polygon.html index a30c226..5266dcd 100644 --- a/docs/html/class_intelli_tool_polygon.html +++ b/docs/html/class_intelli_tool_polygon.html @@ -26,7 +26,7 @@ @@ -138,8 +138,10 @@ Public Member Functions + +

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
 An abstract Destructor. More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + + diff --git a/docs/html/class_intelli_tool_rectangle-members.html b/docs/html/class_intelli_tool_rectangle-members.html index e64bb08..243556f 100644 --- a/docs/html/class_intelli_tool_rectangle-members.html +++ b/docs/html/class_intelli_tool_rectangle-members.html @@ -26,7 +26,7 @@ diff --git a/docs/html/class_intelli_tool_rectangle.html b/docs/html/class_intelli_tool_rectangle.html index 563a65e..014a204 100644 --- a/docs/html/class_intelli_tool_rectangle.html +++ b/docs/html/class_intelli_tool_rectangle.html @@ -26,7 +26,7 @@ @@ -138,8 +138,10 @@ Public Member Functions + +

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
 An abstract Destructor. More...
 
Tooltype getTooltype () const
 getTooltype returns the tools type More...
 
bool getIsDrawing () const
 getIsDrawing returns if the tool is currently drawing More...
 
+ + + diff --git a/docs/html/class_intelli_toolsettings-members.html b/docs/html/class_intelli_toolsettings-members.html index 01786c9..0787b79 100644 --- a/docs/html/class_intelli_toolsettings-members.html +++ b/docs/html/class_intelli_toolsettings-members.html @@ -26,7 +26,7 @@ diff --git a/docs/html/class_intelli_toolsettings.html b/docs/html/class_intelli_toolsettings.html index 8471e49..70fb0ba 100644 --- a/docs/html/class_intelli_toolsettings.html +++ b/docs/html/class_intelli_toolsettings.html @@ -26,7 +26,7 @@ @@ -90,26 +90,36 @@ $(document).ready(function(){initNavTree('class_intelli_toolsettings.html','');
+

The IntelliToolsettings class managing the settings of the tools, independent of an existing tool. + More...

+

#include <IntelliToolsettings.h>

@@ -148,26 +150,31 @@ Additional Inherited Members

enum  Tooltype {
  Tooltype::CIRCLE, Tooltype::FLOODFILL, +Tooltype::GRADIENT, Tooltype::LINE, -Tooltype::PEN,
-  Tooltype::PLAIN, +  Tooltype::PEN, +Tooltype::PLAIN, Tooltype::POLYGON, Tooltype::RECTANGLE, -Tooltype::NONE +
+  Tooltype::NONE
}
 The Tooltype enum categorising the toosl. More...
 
- Protected Attributes inherited from IntelliTool
PaintingAreaArea
 A pointer to the general PaintingArea to interact with. More...
 
Tooltype ActiveType
 ActiveType the type of the active tool. More...
 
IntelliColorPickercolorPicker
 A pointer to the IntelliColorPicker of the PaintingArea to interact with, and get the colors. More...
 
IntelliToolsettingsToolsettings
 Toolsettings a refrence to the tool settings. More...
 
LayerObjectactiveLayer
 A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. More...
IntelliPhoto -  0.6 +  0.7
IntelliPhoto -  0.6 +  0.7
+ + + + + +

Public Member Functions

 IntelliToolsettings ()
 IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics. More...
 
virtual ~IntelliToolsettings ()
 ~IntelliToolsettings - basic destructor. More...
 
int getLineWidth () const
 getLineWidth returns the width attribute of the line. More...
 
void setLineWidth (int LineWidth)
 setLineWidth sets the width attribute of the line. More...
 
int getInnerAlpha () const
 getInnerAlpha returns the inner alpha value. More...
 
void setInnerAlpha (int innerAlpha)
 setInnerAlpha sets the inner alpha attribute of the Tool. More...
 

Detailed Description

-
-

Definition at line 7 of file IntelliToolsettings.h.

+

The IntelliToolsettings class managing the settings of the tools, independent of an existing tool.

+ +

Definition at line 9 of file IntelliToolsettings.h.

Constructor & Destructor Documentation

◆ IntelliToolsettings()

@@ -126,6 +136,8 @@ Public Member Functions
+

IntelliToolsettings - basic constructor of the IntelliToolsettings, initializing the basics.

+

Definition at line 4 of file IntelliToolsettings.cpp.

@@ -153,6 +165,8 @@ Public Member Functions
+

~IntelliToolsettings - basic destructor.

+

Definition at line 10 of file IntelliToolsettings.cpp.

@@ -173,6 +187,9 @@ Public Member Functions
+

getInnerAlpha returns the inner alpha value.

+
Returns
returns the inner alpha attribute as integer.
+

Definition at line 28 of file IntelliToolsettings.cpp.

@@ -192,6 +209,9 @@ Public Member Functions
+

getLineWidth returns the width attribute of the line.

+
Returns
returns the width attribute as integer.
+

Definition at line 14 of file IntelliToolsettings.cpp.

@@ -212,6 +232,14 @@ Public Member Functions
+

setInnerAlpha sets the inner alpha attribute of the Tool.

+
Parameters
+ + +
innerAlpha- the future inner alpha of the Tool.
+
+
+

Definition at line 32 of file IntelliToolsettings.cpp.

@@ -232,6 +260,14 @@ Public Member Functions
+

setLineWidth sets the width attribute of the line.

+
Parameters
+ + +
LineWidth- the future width of the line
+
+
+

Definition at line 18 of file IntelliToolsettings.cpp.

diff --git a/docs/html/class_painting_area-members.html b/docs/html/class_painting_area-members.html index 5d0b8c7..a507c09 100644 --- a/docs/html/class_painting_area-members.html +++ b/docs/html/class_painting_area-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -97,39 +97,41 @@ $(document).ready(function(){initNavTree('class_painting_area.html',''); initRes colorPickerSwapColors()PaintingArea createCircleTool()PaintingArea createFloodFillTool()PaintingArea - createLineTool()PaintingArea - createPenTool()PaintingArea - createPlainTool()PaintingArea - createPolygonTool()PaintingArea - createRectangleTool()PaintingArea - deleteAllLayers()PaintingArea - deleteLayer(int idx, bool isTool=false)PaintingArea + createGradientTool()PaintingArea + createLineTool()PaintingArea + createPenTool()PaintingArea + createPlainTool()PaintingArea + createPolygonTool()PaintingArea + createRectangleTool()PaintingArea + deleteAllLayers()PaintingArea + deleteLayer(int idx, bool isTool=false)PaintingArea + drawPixelOntoActive(QColor color, QPoint point)PaintingArea getHeightOfActive()PaintingArea getImageDataOfActiveLayer()PaintingArea getImageOfActiveLayer()PaintingArea - getLayerBundle()PaintingArea - getMaxHeight()PaintingArea - getMaxWidth()PaintingArea - getNumberOfActiveLayer()PaintingArea - getPolygonDataOfRealLayer()PaintingArea + getIndexOfActiveLayer()PaintingArea + getLayerBundle()PaintingArea + getMaxHeight()PaintingArea + getMaxWidth()PaintingArea + getPolygonDataOfActiveLayer()PaintingArea getRenderSettings()PaintingArea - getTypeOfImageRealLayer()PaintingArea + getTypeOfImageActiveLayer()PaintingArea getWidthOfActive()PaintingArea - historyGoBack()PaintingArea - historyGoForward()PaintingArea - mouseMoveEvent(QMouseEvent *event) overridePaintingAreaprotected - mousePressEvent(QMouseEvent *event) overridePaintingAreaprotected - mouseReleaseEvent(QMouseEvent *event) overridePaintingAreaprotected - moveActiveLayer(int idx)PaintingArea - movePositionActive(int x, int y)PaintingArea - open(const QString &filePath)PaintingArea - paintEvent(QPaintEvent *event) overridePaintingAreaprotected - PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)PaintingArea - save(const QString &filePath, const char *fileFormat)PaintingArea + historyadd()PaintingArea + historyGoBack()PaintingArea + historyGoForward()PaintingArea + mouseMoveEvent(QMouseEvent *event) overridePaintingAreaprotected + mousePressEvent(QMouseEvent *event) overridePaintingAreaprotected + mouseReleaseEvent(QMouseEvent *event) overridePaintingAreaprotected + moveActiveLayer(int idx)PaintingArea + movePositionActive(int x, int y)PaintingArea + open(const QString &filePath)PaintingArea + paintEvent(QPaintEvent *event) overridePaintingAreaprotected + PaintingArea(int maxWidth=600, int maxHeight=600, QWidget *parent=nullptr)PaintingArea + save(const QString &filePath, const char *fileFormat)PaintingArea + setCanvasDimensions(int maxWidth, int maxHeight)PaintingArea setLayerActive(int idx)PaintingArea setLayerAlpha(int idx, int alpha)PaintingArea - setLayerDimensions(int maxWidth, int maxHeight)PaintingArea - setPixelToActive(QColor color, QPoint point)PaintingArea setPolygon(int idx)PaintingArea setPolygonDataToActive(std::vector< QPoint > points)PaintingArea setRenderSettings(bool isFastRenderingOn)PaintingArea diff --git a/docs/html/class_painting_area.html b/docs/html/class_painting_area.html index 4081997..ea072d1 100644 --- a/docs/html/class_painting_area.html +++ b/docs/html/class_painting_area.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -170,19 +170,29 @@ Public Member Functions  The colorPickerSwitchColor swaps the primary color with the secondary drawing color. More...
  void createPenTool () + createPenTool creates a Pen Tool. More...
  void createPlainTool () + createPlainTool creates a Plain Tool. More...
  void createLineTool () + createLineTool creates a Line Tool. More...
  void createRectangleTool () + createRectangleTool creates a Rectangle Tool. More...
  void createCircleTool () + createCircleTool creates a Circle Tool. More...
  void createPolygonTool () + createPolygonTool creates a Polygon Tool. More...
  void createFloodFillTool () + createFloodFillTool creates a Floodfill Tool. More...
  +void createGradientTool () + createGradientTool creates a Gradient Tool. More...
+  int getWidthOfActive ()  The getWidthOfActive gets the horizontal dimensions of the active layer. More...
  @@ -190,16 +200,22 @@ Public Member Functions  The getHeightOfActive gets the vertical dimensions of the active layer. More...
  int getMaxWidth () + getMaxWidth gets the max width of the Canvas. More...
  int getMaxHeight () + getMaxHeight gets the max height of the Canvas. More...
  -ImageType getTypeOfImageRealLayer () -  -std::vector< QPoint > getPolygonDataOfRealLayer () -  -int getNumberOfActiveLayer () -  +ImageType getTypeOfImageActiveLayer () + getTypeOfImageActiveLayer get the type of the active Layer. More...
+  +std::vector< QPoint > getPolygonDataOfActiveLayer () + getPolygonDataOfActiveLayer get the polygon data of the active Layer. More...
+  +int getIndexOfActiveLayer () + getIndexOfActiveLayer returns the index of athe active Layer. More...
IntelliImagegetImageOfActiveLayer () + getImageOfActiveLayer returns the image of the active Layer. More...
  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...
@@ -207,35 +223,50 @@ Public Member Functions std::vector< LayerObject > * getLayerBundle ()  getLayerBundle returns the real active layerbundle (care!) More...
  +void historyadd () + historyadd adds an hisotry step More...
+  void historyGoBack () + historyGoBack go back in hisotry More...
  void historyGoForward () + historyGoForward a function to undo the return of the previous state of the project. More...
  -void setLayerDimensions (int maxWidth, int maxHeight) -  -void setPixelToActive (QColor color, QPoint point) -  +void setCanvasDimensions (int maxWidth, int maxHeight) + setCanvasDimensions sets the dimension of the Canvas More...
+  +void drawPixelOntoActive (QColor color, QPoint point) + drawPixelOntoActive draws a pixel onto the image data of the active Layer. More...
+  void setPolygonDataToActive (std::vector< QPoint > points) + setPolygonDataToActive sets polygondata to the active Layer. More...
  + +

Public Attributes

IntelliToolsettings Toolsettings
 Toolsettings - a class to manage Tool settings. More...
 
IntelliColorPicker colorPicker
 colorPicker a class to manage Tool color. More...
 
+ + + + +

Protected Member Functions

void mousePressEvent (QMouseEvent *event) override
 mousePressEvent handles a mouse pressed event. More...
 
void mouseMoveEvent (QMouseEvent *event) override
 mouseMoveEvent handles a mouse moved event More...
 
void mouseReleaseEvent (QMouseEvent *event) override
 mouseReleaseEvent handles a mouse released event More...
 
void wheelEvent (QWheelEvent *event) override
 wheelEvent handles a mouse wheel event More...
 
void paintEvent (QPaintEvent *event) override
 paintEvent handles a painting event More...
 

Detailed Description

@@ -285,7 +316,7 @@ Protected Member Functions -

Definition at line 39 of file PaintingArea.cpp.

+

Definition at line 40 of file PaintingArea.cpp.

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

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

-

Definition at line 230 of file PaintingArea.cpp.

+

Definition at line 229 of file PaintingArea.cpp.

@@ -491,7 +522,7 @@ Protected Member Functions

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

-

Definition at line 235 of file PaintingArea.cpp.

+

Definition at line 234 of file PaintingArea.cpp.

@@ -512,7 +543,7 @@ Protected Member Functions

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

-

Definition at line 240 of file PaintingArea.cpp.

+

Definition at line 239 of file PaintingArea.cpp.

@@ -531,7 +562,9 @@ Protected Member Functions
-

Definition at line 264 of file PaintingArea.cpp.

+

createCircleTool creates a Circle Tool.

+ +

Definition at line 263 of file PaintingArea.cpp.

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

Definition at line 273 of file PaintingArea.cpp.

+

createFloodFillTool creates a Floodfill Tool.

+ +

Definition at line 272 of file PaintingArea.cpp.

+ +
+ + +

◆ createGradientTool()

+ +
+
+ + + + + + + +
void PaintingArea::createGradientTool ()
+
+ +

createGradientTool creates a Gradient Tool.

+ +

Definition at line 277 of file PaintingArea.cpp.

@@ -569,7 +625,9 @@ Protected Member Functions
-

Definition at line 254 of file PaintingArea.cpp.

+

createLineTool creates a Line Tool.

+ +

Definition at line 253 of file PaintingArea.cpp.

@@ -588,7 +646,9 @@ Protected Member Functions
-

Definition at line 244 of file PaintingArea.cpp.

+

createPenTool creates a Pen Tool.

+ +

Definition at line 243 of file PaintingArea.cpp.

@@ -607,7 +667,9 @@ Protected Member Functions
-

Definition at line 249 of file PaintingArea.cpp.

+

createPlainTool creates a Plain Tool.

+ +

Definition at line 248 of file PaintingArea.cpp.

@@ -626,7 +688,9 @@ Protected Member Functions
-

Definition at line 268 of file PaintingArea.cpp.

+

createPolygonTool creates a Polygon Tool.

+ +

Definition at line 267 of file PaintingArea.cpp.

@@ -645,7 +709,9 @@ Protected Member Functions
-

Definition at line 259 of file PaintingArea.cpp.

+

createRectangleTool creates a Rectangle Tool.

+ +

Definition at line 258 of file PaintingArea.cpp.

@@ -666,7 +732,7 @@ Protected Member Functions

deleteAllLayers deletes all layers

-

Definition at line 174 of file PaintingArea.cpp.

+

Definition at line 173 of file PaintingArea.cpp.

@@ -705,7 +771,46 @@ Protected Member Functions -

Definition at line 114 of file PaintingArea.cpp.

+

Definition at line 113 of file PaintingArea.cpp.

+ + + + +

◆ drawPixelOntoActive()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void PaintingArea::drawPixelOntoActive (QColor color,
QPoint point 
)
+
+ +

drawPixelOntoActive draws a pixel onto the image data of the active Layer.

+
Parameters
+ + + +
color- the color of the Pixel, which should be created.
point- the Pixelposition.
+
+
+ +

Definition at line 86 of file PaintingArea.cpp.

@@ -725,9 +830,9 @@ Protected Member Functions

The getHeightOfActive gets the vertical dimensions of the active layer.

-
Returns
Returns the vertical pixle count of the active layer
+
Returns
Returns the vertical pixle count of the active layer.
-

Definition at line 282 of file PaintingArea.cpp.

+

Definition at line 286 of file PaintingArea.cpp.

@@ -749,7 +854,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 472 of file PaintingArea.cpp.

+

Definition at line 476 of file PaintingArea.cpp.

@@ -768,6 +873,31 @@ Protected Member Functions
+

getImageOfActiveLayer returns the image of the active Layer.

+
Returns
return the image of the active Layer.
+ +

Definition at line 469 of file PaintingArea.cpp.

+ +
+ + +

◆ getIndexOfActiveLayer()

+ +
+
+ + + + + + + +
int PaintingArea::getIndexOfActiveLayer ()
+
+ +

getIndexOfActiveLayer returns the index of athe active Layer.

+
Returns
return the index of the active Layer.
+

Definition at line 465 of file PaintingArea.cpp.

@@ -790,7 +920,7 @@ Protected Member Functions

getLayerBundle returns the real active layerbundle (care!)

Returns
the reference of the currentLayerBundle
-

Definition at line 487 of file PaintingArea.cpp.

+

Definition at line 491 of file PaintingArea.cpp.

@@ -809,7 +939,10 @@ Protected Member Functions
-

Definition at line 290 of file PaintingArea.cpp.

+

getMaxHeight gets the max height of the Canvas.

+
Returns
return the height of the Canvas.
+ +

Definition at line 294 of file PaintingArea.cpp.

@@ -828,18 +961,21 @@ Protected Member Functions
-

Definition at line 286 of file PaintingArea.cpp.

+

getMaxWidth gets the max width of the Canvas.

+
Returns
return the width of the Canvas.
+ +

Definition at line 290 of file PaintingArea.cpp.

- -

◆ getNumberOfActiveLayer()

+ +

◆ getPolygonDataOfActiveLayer()

- + @@ -847,26 +983,10 @@ Protected Member Functions
int PaintingArea::getNumberOfActiveLayer std::vector< QPoint > PaintingArea::getPolygonDataOfActiveLayer ( )
-

Definition at line 461 of file PaintingArea.cpp.

+

getPolygonDataOfActiveLayer get the polygon data of the active Layer.

+
Returns
return the polygon data of the active Layer.
-
-
- -

◆ getPolygonDataOfRealLayer()

- -
-
- - - - - - - -
std::vector< QPoint > PaintingArea::getPolygonDataOfRealLayer ()
-
- -

Definition at line 298 of file PaintingArea.cpp.

+

Definition at line 302 of file PaintingArea.cpp.

@@ -897,14 +1017,14 @@ Protected Member Functions - -

◆ getTypeOfImageRealLayer()

+ +

◆ getTypeOfImageActiveLayer()

- + @@ -912,7 +1032,10 @@ Protected Member Functions
ImageType PaintingArea::getTypeOfImageRealLayer ImageType PaintingArea::getTypeOfImageActiveLayer ( )
-

Definition at line 294 of file PaintingArea.cpp.

+

getTypeOfImageActiveLayer get the type of the active Layer.

+
Returns
returns the image type of the active layer.
+ +

Definition at line 298 of file PaintingArea.cpp.

@@ -932,9 +1055,30 @@ Protected Member Functions

The getWidthOfActive gets the horizontal dimensions of the active layer.

-
Returns
Returns the horizontal pixle count of the active layer
+
Returns
Returns the horizontal pixle count of the active layer.
-

Definition at line 278 of file PaintingArea.cpp.

+

Definition at line 282 of file PaintingArea.cpp.

+ +
+ + +

◆ historyadd()

+ +
+
+ + + + + + + +
void PaintingArea::historyadd ()
+
+ +

historyadd adds an hisotry step

+ +

Definition at line 510 of file PaintingArea.cpp.

@@ -953,7 +1097,9 @@ Protected Member Functions
-

Definition at line 518 of file PaintingArea.cpp.

+

historyGoBack go back in hisotry

+ +

Definition at line 526 of file PaintingArea.cpp.

@@ -972,7 +1118,9 @@ Protected Member Functions
-

Definition at line 527 of file PaintingArea.cpp.

+

historyGoForward a function to undo the return of the previous state of the project.

+ +

Definition at line 541 of file PaintingArea.cpp.

@@ -1000,7 +1148,15 @@ Protected Member Functions
-

Definition at line 324 of file PaintingArea.cpp.

+

mouseMoveEvent handles a mouse moved event

+
Parameters
+ + +
event- the specific mouse event.
+
+
+ +

Definition at line 328 of file PaintingArea.cpp.

@@ -1028,7 +1184,15 @@ Protected Member Functions
-

Definition at line 305 of file PaintingArea.cpp.

+

mousePressEvent handles a mouse pressed event.

+
Parameters
+ + +
event- the specific mouse event.
+
+
+ +

Definition at line 309 of file PaintingArea.cpp.

@@ -1056,7 +1220,15 @@ Protected Member Functions
-

Definition at line 337 of file PaintingArea.cpp.

+

mouseReleaseEvent handles a mouse released event

+
Parameters
+ + +
event- the specific mouse event.
+
+
+ +

Definition at line 341 of file PaintingArea.cpp.

@@ -1084,7 +1256,7 @@ Protected Member Functions -

Definition at line 212 of file PaintingArea.cpp.

+

Definition at line 211 of file PaintingArea.cpp.

@@ -1123,7 +1295,7 @@ Protected Member Functions -

Definition at line 205 of file PaintingArea.cpp.

+

Definition at line 204 of file PaintingArea.cpp.

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

Definition at line 163 of file PaintingArea.cpp.

+

Definition at line 162 of file PaintingArea.cpp.

@@ -1180,7 +1352,15 @@ Protected Member Functions
-

Definition at line 367 of file PaintingArea.cpp.

+

paintEvent handles a painting event

+
Parameters
+ + +
event- the specific paint event.
+
+
+ +

Definition at line 371 of file PaintingArea.cpp.

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

Definition at line 182 of file PaintingArea.cpp.

+

Definition at line 181 of file PaintingArea.cpp.

+ + + + +

◆ setCanvasDimensions()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void PaintingArea::setCanvasDimensions (int maxWidth,
int maxHeight 
)
+
+ +

setCanvasDimensions sets the dimension of the Canvas

+
Parameters
+ + + +
maxWidth- the width of the Canvas.
maxHeight- the height of the Canvas.
+
+
+ +

Definition at line 72 of file PaintingArea.cpp.

@@ -1248,7 +1467,7 @@ Protected Member Functions -

Definition at line 137 of file PaintingArea.cpp.

+

Definition at line 136 of file PaintingArea.cpp.

@@ -1287,67 +1506,7 @@ Protected Member Functions -

Definition at line 144 of file PaintingArea.cpp.

- - - - -

◆ setLayerDimensions()

- -
-
- - - - - - - - - - - - - - - - - - -
void PaintingArea::setLayerDimensions (int maxWidth,
int maxHeight 
)
-
- -

Definition at line 72 of file PaintingArea.cpp.

- -
-
- -

◆ setPixelToActive()

- -
-
- - - - - - - - - - - - - - - - - - -
void PaintingArea::setPixelToActive (QColor color,
QPoint point 
)
-
- -

Definition at line 86 of file PaintingArea.cpp.

+

Definition at line 143 of file PaintingArea.cpp.

@@ -1375,7 +1534,7 @@ Protected Member Functions -

Definition at line 151 of file PaintingArea.cpp.

+

Definition at line 150 of file PaintingArea.cpp.

@@ -1395,6 +1554,14 @@ Protected Member Functions
+

setPolygonDataToActive sets polygondata to the active Layer.

+
Parameters
+ + +
points- the points of the polygon data.
+
+
+

Definition at line 90 of file PaintingArea.cpp.

@@ -1459,7 +1626,7 @@ Protected Member Functions -

Definition at line 223 of file PaintingArea.cpp.

+

Definition at line 222 of file PaintingArea.cpp.

@@ -1488,7 +1655,7 @@ Protected Member Functions

The slotDeleteActiveLayer method handles the deletion of the active layer.

-

Definition at line 129 of file PaintingArea.cpp.

+

Definition at line 128 of file PaintingArea.cpp.

@@ -1516,7 +1683,15 @@ Protected Member Functions
-

Definition at line 352 of file PaintingArea.cpp.

+

wheelEvent handles a mouse wheel event

+
Parameters
+ + +
event- the specific mouse event.
+
+
+ +

Definition at line 356 of file PaintingArea.cpp.

@@ -1533,7 +1708,9 @@ Protected Member Functions
-

Definition at line 223 of file PaintingArea.h.

+

colorPicker a class to manage Tool color.

+ +

Definition at line 286 of file PaintingArea.h.

@@ -1549,7 +1726,9 @@ Protected Member Functions
-

Definition at line 222 of file PaintingArea.h.

+

Toolsettings - a class to manage Tool settings.

+ +

Definition at line 281 of file PaintingArea.h.

diff --git a/docs/html/class_painting_area.js b/docs/html/class_painting_area.js index aef4cbd..f53644f 100644 --- a/docs/html/class_painting_area.js +++ b/docs/html/class_painting_area.js @@ -9,6 +9,7 @@ var class_painting_area = [ "colorPickerSwapColors", "class_painting_area.html#acff4563d006fda491469bd41778d07eb", null ], [ "createCircleTool", "class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466", null ], [ "createFloodFillTool", "class_painting_area.html#a0b22e18069b524f3e75857d203baf256", null ], + [ "createGradientTool", "class_painting_area.html#ad8636e986fdcdd3146f9f72d3cdb1831", null ], [ "createLineTool", "class_painting_area.html#a240c33a7875addac86080cdfb0db036a", null ], [ "createPenTool", "class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353", null ], [ "createPlainTool", "class_painting_area.html#a3de83443d2d5cf460ff48d0602070938", null ], @@ -16,17 +17,19 @@ var class_painting_area = [ "createRectangleTool", "class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd", null ], [ "deleteAllLayers", "class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491", null ], [ "deleteLayer", "class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630", null ], + [ "drawPixelOntoActive", "class_painting_area.html#af1b7be20235139e4909086696ea74cf7", null ], [ "getHeightOfActive", "class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4", null ], [ "getImageDataOfActiveLayer", "class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423", null ], [ "getImageOfActiveLayer", "class_painting_area.html#acab11ad35d07e9081203d8217d2c0855", null ], + [ "getIndexOfActiveLayer", "class_painting_area.html#a2ea1108ae4e4be995c4df0d378c536e7", null ], [ "getLayerBundle", "class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba", 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 ], + [ "getPolygonDataOfActiveLayer", "class_painting_area.html#ae6eb9b269cdee993dbabd066e4679576", null ], [ "getRenderSettings", "class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097", null ], - [ "getTypeOfImageRealLayer", "class_painting_area.html#a91abd5e92acc5226a21ffc9e0ea36235", null ], + [ "getTypeOfImageActiveLayer", "class_painting_area.html#a63cfff9cd4bc04e0b62d4c76cbf87395", null ], [ "getWidthOfActive", "class_painting_area.html#a675ee91b26b1c58be6d833f279d81597", null ], + [ "historyadd", "class_painting_area.html#acf20e3f5f74a239e6f9b7e2e1200295f", null ], [ "historyGoBack", "class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4", null ], [ "historyGoForward", "class_painting_area.html#aecc72f0f5971244205194934ff721546", null ], [ "mouseMoveEvent", "class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5", null ], @@ -37,10 +40,9 @@ var class_painting_area = [ "open", "class_painting_area.html#a88c7e759aa8375a56129791645f46ea5", null ], [ "paintEvent", "class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7", null ], [ "save", "class_painting_area.html#aa2463d4f403224086acab02903ae407e", null ], + [ "setCanvasDimensions", "class_painting_area.html#a3bfc63de27c54f3edf9feb3af538343c", null ], [ "setLayerActive", "class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9", null ], [ "setLayerAlpha", "class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055", null ], - [ "setLayerDimensions", "class_painting_area.html#a2444acb9a61038fbe0206498d0cae011", null ], - [ "setPixelToActive", "class_painting_area.html#a6bd7eac7e2080b64336e58d0ecf93c71", null ], [ "setPolygon", "class_painting_area.html#aa409492ac26483d618bb33616f2e3f81", null ], [ "setPolygonDataToActive", "class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577", null ], [ "setRenderSettings", "class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd", null ], diff --git a/docs/html/class_unit_test-members.html b/docs/html/class_unit_test-members.html index 327e459..f73ac07 100644 --- a/docs/html/class_unit_test-members.html +++ b/docs/html/class_unit_test-members.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/class_unit_test.html b/docs/html/class_unit_test.html index 1dc432c..76b0527 100644 --- a/docs/html/class_unit_test.html +++ b/docs/html/class_unit_test.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/classes.html b/docs/html/classes.html index d4317da..fdddb71 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -90,40 +90,44 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); }) - - - - - - + - - - - - - - - - - - - - + + + + + + + + + + - - + + + - - - + + + + + + + + + + + + + +
  i  
IntelliRasterImage   IntelliToolLine   
  l  
-
  t  
-
IntelliRenderSettings   IntelliRenderSettings    IntelliToolPen   
IntelliColorPicker   IntelliShapedImage   IntelliToolPlainTool   LayerObject   Triangle   
IntelliImage   IntelliTool   IntelliToolPolygon   
  p  
  u  
-
IntelliInputDialog   
IntelliShapedImage   IntelliToolPlainTool   
IntelliColorPicker   IntelliTool   IntelliToolPolygon   PaintingArea   
IntelliImage    IntelliToolCircle    IntelliToolRectangle   
IntelliPhotoGui   
  t  
+
IntelliInputDialog    IntelliToolFloodFill    IntelliToolsettings   PaintingArea   UnitTest   
IntelliPhotoGui   IntelliToolGradient   
  l  
+
Triangle   
IntelliRasterImage   IntelliToolLine   
  u  
+
LayerObject   
UnitTest   
i | l | p | t | u
diff --git a/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html b/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html index 42b1eb9..30beea4 100644 --- a/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html +++ b/docs/html/dir_13830bfc3dd6736fe878600c9081919f.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html b/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html index cc900dc..7bf2701 100644 --- a/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html +++ b/docs/html/dir_4e4e2e75df7fa6971448b424c011c8b5.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 9c40348..f9bcbab 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html index 2f8e471..1ee21b8 100644 --- a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html +++ b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -101,6 +101,10 @@ Files   file  IntelliToolFloodFill.h [code]   +file  IntelliToolGradient.cpp [code] +  +file  IntelliToolGradient.h [code] +  file  IntelliToolLine.cpp [code]   file  IntelliToolLine.h [code] diff --git a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js index c69fb83..73f5795 100644 --- a/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js +++ b/docs/html/dir_858355f3357c73763e566ff49d1e6a7a.js @@ -12,6 +12,10 @@ var dir_858355f3357c73763e566ff49d1e6a7a = [ "IntelliToolFloodFill.h", "_intelli_tool_flood_fill_8h.html", [ [ "IntelliToolFloodFill", "class_intelli_tool_flood_fill.html", "class_intelli_tool_flood_fill" ] ] ], + [ "IntelliToolGradient.cpp", "_intelli_tool_gradient_8cpp.html", null ], + [ "IntelliToolGradient.h", "_intelli_tool_gradient_8h.html", [ + [ "IntelliToolGradient", "class_intelli_tool_gradient.html", "class_intelli_tool_gradient" ] + ] ], [ "IntelliToolLine.cpp", "_intelli_tool_line_8cpp.html", null ], [ "IntelliToolLine.h", "_intelli_tool_line_8h.html", [ [ "IntelliToolLine", "class_intelli_tool_line.html", "class_intelli_tool_line" ] diff --git a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html index 3b1d7c3..e14c959 100644 --- a/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html +++ b/docs/html/dir_8de6078cba2a961961818cf80b28fd4f.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html b/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html index f88d128..3b4f4ff 100644 --- a/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html +++ b/docs/html/dir_fdbdd9841f9a730f284bb666ff3d8cfe.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/files.html b/docs/html/files.html index 3329e83..9113ec2 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -122,16 +122,18 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });  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 + IntelliToolGradient.cpp + IntelliToolGradient.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 16b4bdc..1fd5e67 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/functions_b.html b/docs/html/functions_b.html index e8d3943..cea168f 100644 --- a/docs/html/functions_b.html +++ b/docs/html/functions_b.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
diff --git a/docs/html/functions_c.html b/docs/html/functions_c.html index a559475..2a7c71e 100644 --- a/docs/html/functions_c.html +++ b/docs/html/functions_c.html @@ -26,7 +26,7 @@
IntelliPhoto -  0.6 +  0.7
@@ -121,6 +121,9 @@ $(document).ready(function(){initNavTree('functions_c.html',''); initResizable()
  • createFloodFillTool() : PaintingArea
  • +
  • createGradientTool() +: PaintingArea +
  • createLineTool() : PaintingArea
  • diff --git a/docs/html/functions_d.html b/docs/html/functions_d.html index 6aff460..3b4caae 100644 --- a/docs/html/functions_d.html +++ b/docs/html/functions_d.html @@ -26,7 +26,7 @@
    IntelliPhoto -  0.6 +  0.7
    @@ -97,6 +97,9 @@ $(document).ready(function(){initNavTree('functions_d.html',''); initResizable()
  • drawPixel() : IntelliImage
  • +
  • drawPixelOntoActive() +: PaintingArea +
  • drawPlain() : IntelliImage
  • diff --git a/docs/html/functions_enum.html b/docs/html/functions_enum.html index e98418d..91071f9 100644 --- a/docs/html/functions_enum.html +++ b/docs/html/functions_enum.html @@ -26,7 +26,7 @@
    IntelliPhoto -  0.6 +  0.7
    diff --git a/docs/html/functions_f.html b/docs/html/functions_f.html index 7caa3ed..cfb2878 100644 --- a/docs/html/functions_f.html +++ b/docs/html/functions_f.html @@ -26,7 +26,7 @@
    IntelliPhoto -  0.6 +  0.7
    diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index 633e9f3..310d9d1 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -26,7 +26,7 @@
    IntelliPhoto -  0.6 +  0.7
    @@ -121,6 +121,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
  • createFloodFillTool() : PaintingArea
  • +
  • createGradientTool() +: PaintingArea +
  • createLineTool() : PaintingArea
  • @@ -152,6 +155,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
  • drawPixel() : IntelliImage
  • +
  • drawPixelOntoActive() +: PaintingArea +
  • drawPlain() : IntelliImage
  • @@ -190,6 +196,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
  • getImageOfActiveLayer() : PaintingArea
  • +
  • getIndexOfActiveLayer() +: PaintingArea +
  • getInnerAlpha() : IntelliToolsettings
  • @@ -211,9 +220,6 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
  • getMaxWidth() : PaintingArea
  • -
  • getNumberOfActiveLayer() -: PaintingArea -
  • getPixelColor() : IntelliImage
  • @@ -225,8 +231,8 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliImage , IntelliShapedImage -
  • getPolygonDataOfRealLayer() -: PaintingArea +
  • getPolygonDataOfActiveLayer() +: PaintingArea
  • getRenderSettings() : PaintingArea @@ -240,8 +246,8 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
  • getTypeOfImage() : IntelliImage
  • -
  • getTypeOfImageRealLayer() -: PaintingArea +
  • getTypeOfImageActiveLayer() +: PaintingArea
  • getWidth() : IntelliImage @@ -253,6 +259,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl

    - h -

      +
    • historyadd() +: PaintingArea +
    • historyGoBack() : PaintingArea
    • @@ -293,6 +302,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
    • IntelliToolFloodFill() : IntelliToolFloodFill
    • +
    • IntelliToolGradient() +: IntelliToolGradient +
    • IntelliToolLine() : IntelliToolLine
    • @@ -354,6 +366,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -364,6 +377,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -374,6 +388,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -384,6 +399,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -394,6 +410,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -404,6 +421,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -437,6 +455,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
    • save() : PaintingArea
    • +
    • setCanvasDimensions() +: PaintingArea +
    • setFastRendering() : IntelliRenderSettings
    • @@ -455,15 +476,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
    • setLayerAlpha() : PaintingArea
    • -
    • setLayerDimensions() -: PaintingArea -
    • setLineWidth() : IntelliToolsettings
    • -
    • setPixelToActive() -: PaintingArea -
    • setPolygon() : IntelliImage , IntelliRasterImage @@ -542,6 +557,9 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
    • ~IntelliToolFloodFill() : IntelliToolFloodFill
    • +
    • ~IntelliToolGradient() +: IntelliToolGradient +
    • ~IntelliToolLine() : IntelliToolLine
    • diff --git a/docs/html/functions_g.html b/docs/html/functions_g.html index 0cc1029..177e968 100644 --- a/docs/html/functions_g.html +++ b/docs/html/functions_g.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -113,6 +113,9 @@ $(document).ready(function(){initNavTree('functions_g.html',''); initResizable()
    • getImageOfActiveLayer() : PaintingArea
    • +
    • getIndexOfActiveLayer() +: PaintingArea +
    • getInnerAlpha() : IntelliToolsettings
    • @@ -134,9 +137,6 @@ $(document).ready(function(){initNavTree('functions_g.html',''); initResizable()
    • getMaxWidth() : PaintingArea
    • -
    • getNumberOfActiveLayer() -: PaintingArea -
    • getPixelColor() : IntelliImage
    • @@ -148,8 +148,8 @@ $(document).ready(function(){initNavTree('functions_g.html',''); initResizable() : IntelliImage , IntelliShapedImage -
    • getPolygonDataOfRealLayer() -: PaintingArea +
    • getPolygonDataOfActiveLayer() +: PaintingArea
    • getRenderSettings() : PaintingArea @@ -163,8 +163,8 @@ $(document).ready(function(){initNavTree('functions_g.html',''); initResizable()
    • getTypeOfImage() : IntelliImage
    • -
    • getTypeOfImageRealLayer() -: PaintingArea +
    • getTypeOfImageActiveLayer() +: PaintingArea
    • getWidth() : IntelliImage diff --git a/docs/html/functions_h.html b/docs/html/functions_h.html index 19efa6c..43b0267 100644 --- a/docs/html/functions_h.html +++ b/docs/html/functions_h.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -91,6 +91,9 @@ $(document).ready(function(){initNavTree('functions_h.html',''); initResizable()
    • heightOffset : LayerObject
    • +
    • historyadd() +: PaintingArea +
    • historyGoBack() : PaintingArea
    • diff --git a/docs/html/functions_i.html b/docs/html/functions_i.html index 4a5af78..5a4c8ad 100644 --- a/docs/html/functions_i.html +++ b/docs/html/functions_i.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -121,6 +121,9 @@ $(document).ready(function(){initNavTree('functions_i.html',''); initResizable()
    • IntelliToolFloodFill() : IntelliToolFloodFill
    • +
    • IntelliToolGradient() +: IntelliToolGradient +
    • IntelliToolLine() : IntelliToolLine
    • diff --git a/docs/html/functions_l.html b/docs/html/functions_l.html index d84b074..8e10476 100644 --- a/docs/html/functions_l.html +++ b/docs/html/functions_l.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_m.html b/docs/html/functions_m.html index f2062e7..a36d9f9 100644 --- a/docs/html/functions_m.html +++ b/docs/html/functions_m.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_o.html b/docs/html/functions_o.html index 307d9b1..9bc25bc 100644 --- a/docs/html/functions_o.html +++ b/docs/html/functions_o.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -89,6 +89,7 @@ $(document).ready(function(){initNavTree('functions_o.html',''); initResizable() : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -99,6 +100,7 @@ $(document).ready(function(){initNavTree('functions_o.html',''); initResizable() : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -109,6 +111,7 @@ $(document).ready(function(){initNavTree('functions_o.html',''); initResizable() : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -119,6 +122,7 @@ $(document).ready(function(){initNavTree('functions_o.html',''); initResizable() : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -129,6 +133,7 @@ $(document).ready(function(){initNavTree('functions_o.html',''); initResizable() : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool @@ -139,6 +144,7 @@ $(document).ready(function(){initNavTree('functions_o.html',''); initResizable() : IntelliTool , IntelliToolCircle , IntelliToolFloodFill +, IntelliToolGradient , IntelliToolLine , IntelliToolPen , IntelliToolPlainTool diff --git a/docs/html/functions_p.html b/docs/html/functions_p.html index 8e0db63..4f61eda 100644 --- a/docs/html/functions_p.html +++ b/docs/html/functions_p.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_r.html b/docs/html/functions_r.html index 160d0fb..6b59d0e 100644 --- a/docs/html/functions_r.html +++ b/docs/html/functions_r.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_s.html b/docs/html/functions_s.html index c7dde47..1cbb7e2 100644 --- a/docs/html/functions_s.html +++ b/docs/html/functions_s.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -88,6 +88,9 @@ $(document).ready(function(){initNavTree('functions_s.html',''); initResizable()
    • save() : PaintingArea
    • +
    • setCanvasDimensions() +: PaintingArea +
    • setFastRendering() : IntelliRenderSettings
    • @@ -106,15 +109,9 @@ $(document).ready(function(){initNavTree('functions_s.html',''); initResizable()
    • setLayerAlpha() : PaintingArea
    • -
    • setLayerDimensions() -: PaintingArea -
    • setLineWidth() : IntelliToolsettings
    • -
    • setPixelToActive() -: PaintingArea -
    • setPolygon() : IntelliImage , IntelliRasterImage diff --git a/docs/html/functions_t.html b/docs/html/functions_t.html index 41239c5..518dd57 100644 --- a/docs/html/functions_t.html +++ b/docs/html/functions_t.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_u.html b/docs/html/functions_u.html index 076052d..12e864d 100644 --- a/docs/html/functions_u.html +++ b/docs/html/functions_u.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index b87f28e..6f3f5c4 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_w.html b/docs/html/functions_w.html index b8848a7..05fbe34 100644 --- a/docs/html/functions_w.html +++ b/docs/html/functions_w.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/functions_~.html b/docs/html/functions_~.html index 462f987..4d8f4f4 100644 --- a/docs/html/functions_~.html +++ b/docs/html/functions_~.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -106,6 +106,9 @@ $(document).ready(function(){initNavTree('functions_~.html',''); initResizable()
    • ~IntelliToolFloodFill() : IntelliToolFloodFill
    • +
    • ~IntelliToolGradient() +: IntelliToolGradient +
    • ~IntelliToolLine() : IntelliToolLine
    • diff --git a/docs/html/globals.html b/docs/html/globals.html index 87b4ebc..d1c576f 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html index 86188c2..1619505 100644 --- a/docs/html/globals_defs.html +++ b/docs/html/globals_defs.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html index 46404d7..25cac97 100644 --- a/docs/html/globals_enum.html +++ b/docs/html/globals_enum.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html index c7dfdaf..f23ab4f 100644 --- a/docs/html/globals_func.html +++ b/docs/html/globals_func.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index 5bcaf58..1fc9652 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -92,26 +92,27 @@ $(document).ready(function(){initNavTree('hierarchy.html',''); initResizable();  CIntelliImageAn abstract class which manages the basic IntelliImage operations  CIntelliRasterImageThe IntelliRasterImage manages a RASTERIMAGE  CIntelliShapedImageThe IntelliShapedImage manages a Shapedimage - CIntelliRenderSettings + CIntelliRenderSettingsWhich manages the render Settings  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 - CQDialog - CIntelliInputDialog - CQLabel - CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project - CQMainWindow - CIntelliPhotoGuiThe IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program - CQObject - CUnitTest - CTriangleThe Triangle struct holds the 3 vertices of a triangle + CIntelliToolGradientThat represents a gradient call + 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 + CIntelliToolsettingsManaging the settings of the tools, independent of an existing tool + CLayerObjectThe LayerObject struct holds all the information needed to construct a layer + CQDialog + CIntelliInputDialogCustomized Input Dialog to get Integers + CQLabel + CPaintingAreaManages the methods and stores information about the current painting area, which is the currently opened project + CQMainWindow + CIntelliPhotoGuiThe IntelliPhotoGui base class handles the graphical user interface and events for the intelliPhoto program + CQObject + CUnitTest + CTriangleThe Triangle struct holds the 3 vertices of a triangle diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js index 6f255e4..3abff8f 100644 --- a/docs/html/hierarchy.js +++ b/docs/html/hierarchy.js @@ -10,6 +10,7 @@ var hierarchy = [ "IntelliTool", "class_intelli_tool.html", [ [ "IntelliToolCircle", "class_intelli_tool_circle.html", null ], [ "IntelliToolFloodFill", "class_intelli_tool_flood_fill.html", null ], + [ "IntelliToolGradient", "class_intelli_tool_gradient.html", null ], [ "IntelliToolLine", "class_intelli_tool_line.html", null ], [ "IntelliToolPen", "class_intelli_tool_pen.html", null ], [ "IntelliToolPlainTool", "class_intelli_tool_plain_tool.html", null ], diff --git a/docs/html/index.html b/docs/html/index.html index 04bbfe3..0dcc8a0 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/main_8cpp.html b/docs/html/main_8cpp.html index 66f51bb..d4bc2c0 100644 --- a/docs/html/main_8cpp.html +++ b/docs/html/main_8cpp.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/main_8cpp_source.html b/docs/html/main_8cpp_source.html index 32ab499..4fd8147 100644 --- a/docs/html/main_8cpp_source.html +++ b/docs/html/main_8cpp_source.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/main_unit_test_8cpp.html b/docs/html/main_unit_test_8cpp.html index 86ec70a..8b49873 100644 --- a/docs/html/main_unit_test_8cpp.html +++ b/docs/html/main_unit_test_8cpp.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/main_unit_test_8cpp_source.html b/docs/html/main_unit_test_8cpp_source.html index 68576d7..016d333 100644 --- a/docs/html/main_unit_test_8cpp_source.html +++ b/docs/html/main_unit_test_8cpp_source.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/namespace_intelli_datamanager.html b/docs/html/namespace_intelli_datamanager.html index 69399c0..c8522e9 100644 --- a/docs/html/namespace_intelli_datamanager.html +++ b/docs/html/namespace_intelli_datamanager.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -92,8 +92,10 @@ $(document).ready(function(){initNavTree('namespace_intelli_datamanager.html',''

      Functions

      bool loadProject (PaintingArea *Canvas, QString filePath="unnamed.idf") + loadProject loads a project from a file, closes current project. More...
        bool saveProject (PaintingArea *Canvas, QString filePath="unnamed.idf") + saveProject saves the current project to a file. More...
       

      Function Documentation

      @@ -123,6 +125,16 @@ Functions
      +

      loadProject loads a project from a file, closes current project.

      +
      Parameters
      + + + +
      Canvas- Reference to the used Canvas.
      filePath- Filepath to the project which should be opened.
      +
      +
      +
      Returns
      True if everything worked, false otherwise.
      +

      Definition at line 50 of file IntelliDatamanager.cpp.

      @@ -153,6 +165,16 @@ Functions
      +

      saveProject saves the current project to a file.

      +
      Parameters
      + + + +
      Canvas- Reference to the used Canvas.
      filePath- Filepath to the project which should be saved.
      +
      +
      +
      Returns
      True if everything worked, false otherwise.
      +

      Definition at line 4 of file IntelliDatamanager.cpp.

      diff --git a/docs/html/namespace_intelli_triangulation.html b/docs/html/namespace_intelli_triangulation.html index 1504aa9..d8948c2 100644 --- a/docs/html/namespace_intelli_triangulation.html +++ b/docs/html/namespace_intelli_triangulation.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html index ed82827..47dfb5a 100644 --- a/docs/html/namespacemembers.html +++ b/docs/html/namespacemembers.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html index e6dfb5e..b11217f 100644 --- a/docs/html/namespacemembers_func.html +++ b/docs/html/namespacemembers_func.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html index 45ce647..2ac439f 100644 --- a/docs/html/namespaces.html +++ b/docs/html/namespaces.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/navtreedata.js b/docs/html/navtreedata.js index 34771ae..666ea19 100644 --- a/docs/html/navtreedata.js +++ b/docs/html/navtreedata.js @@ -56,7 +56,7 @@ var NAVTREE = var NAVTREEINDEX = [ "_intelli_color_picker_8cpp.html", -"class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271" +"class_intelli_tool_rectangle.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/docs/html/navtreeindex0.js b/docs/html/navtreeindex0.js index 0280c00..750f380 100644 --- a/docs/html/navtreeindex0.js +++ b/docs/html/navtreeindex0.js @@ -49,26 +49,30 @@ var NAVTREEINDEX0 = "_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_tool_gradient_8cpp.html":[2,0,0,4,6], +"_intelli_tool_gradient_8cpp_source.html":[2,0,0,4,6], +"_intelli_tool_gradient_8h.html":[2,0,0,4,7], +"_intelli_tool_gradient_8h_source.html":[2,0,0,4,7], +"_intelli_tool_line_8cpp.html":[2,0,0,4,8], +"_intelli_tool_line_8cpp_source.html":[2,0,0,4,8], +"_intelli_tool_line_8h.html":[2,0,0,4,9], +"_intelli_tool_line_8h_source.html":[2,0,0,4,9], +"_intelli_tool_pen_8cpp.html":[2,0,0,4,10], +"_intelli_tool_pen_8cpp_source.html":[2,0,0,4,10], +"_intelli_tool_pen_8h.html":[2,0,0,4,11], +"_intelli_tool_pen_8h_source.html":[2,0,0,4,11], +"_intelli_tool_plain_8cpp.html":[2,0,0,4,12], +"_intelli_tool_plain_8cpp_source.html":[2,0,0,4,12], +"_intelli_tool_plain_8h.html":[2,0,0,4,13], +"_intelli_tool_plain_8h_source.html":[2,0,0,4,13], +"_intelli_tool_polygon_8cpp.html":[2,0,0,4,14], +"_intelli_tool_polygon_8cpp_source.html":[2,0,0,4,14], +"_intelli_tool_polygon_8h.html":[2,0,0,4,15], +"_intelli_tool_polygon_8h_source.html":[2,0,0,4,15], +"_intelli_tool_rectangle_8cpp.html":[2,0,0,4,16], +"_intelli_tool_rectangle_8cpp_source.html":[2,0,0,4,16], +"_intelli_tool_rectangle_8h.html":[2,0,0,4,17], +"_intelli_tool_rectangle_8h_source.html":[2,0,0,4,17], "_intelli_toolsettings_8cpp.html":[2,0,0,2,6], "_intelli_toolsettings_8cpp_source.html":[2,0,0,2,6], "_intelli_toolsettings_8h.html":[2,0,0,2,7], @@ -163,13 +167,14 @@ var NAVTREEINDEX0 = "class_intelli_tool.html#a34b7ef1dde96b94a0ce450a25ae1778c":[1,0,7,5], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f":[1,0,7,0], "class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491":[1,0,7,0,0], -"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7":[1,0,7,0,2], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7":[1,0,7,0,3], "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], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a":[1,0,7,0,7], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa90f70ea2675c36bd9b0b44a79f37a41f":[1,0,7,0,2], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693":[1,0,7,0,8], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678":[1,0,7,0,4], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc":[1,0,7,0,6], +"class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5":[1,0,7,0,5], "class_intelli_tool.html#a4dccfd4460255ccb866f336406a33574":[1,0,7,10], "class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca":[1,0,7,16], "class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f":[1,0,7,17], @@ -200,54 +205,49 @@ var NAVTREEINDEX0 = "class_intelli_tool_flood_fill.html#ac85e3cb6233508ff9612833a8d9e3961":[1,0,9,2], "class_intelli_tool_flood_fill.html#ad58cc7c065123beb6b0270f99e99b991":[1,0,9,7], "class_intelli_tool_flood_fill.html#ada0f7154d119102410a55038763a17e4":[1,0,9,5], -"class_intelli_tool_line.html":[1,0,10], -"class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc":[1,0,10,0], -"class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846":[1,0,10,2], -"class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2":[1,0,10,6], -"class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3":[1,0,10,5], -"class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125":[1,0,10,7], -"class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b":[1,0,10,4], -"class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482":[1,0,10,3], -"class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2":[1,0,10,1], -"class_intelli_tool_pen.html":[1,0,11], -"class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce":[1,0,11,5], -"class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2":[1,0,11,4], -"class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205":[1,0,11,2], -"class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d":[1,0,11,0], -"class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d":[1,0,11,3], -"class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13":[1,0,11,6], -"class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818":[1,0,11,1], -"class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a":[1,0,11,7], -"class_intelli_tool_plain_tool.html":[1,0,12], -"class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8":[1,0,12,6], -"class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2":[1,0,12,0], -"class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658":[1,0,12,1], -"class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9":[1,0,12,2], -"class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400":[1,0,12,3], -"class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1":[1,0,12,5], -"class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c":[1,0,12,4], -"class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d":[1,0,12,7], -"class_intelli_tool_polygon.html":[1,0,13], -"class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499":[1,0,13,1], -"class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922":[1,0,13,4], -"class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b":[1,0,13,6], -"class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21":[1,0,13,3], -"class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5":[1,0,13,0], -"class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17":[1,0,13,7], -"class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427":[1,0,13,5], -"class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d":[1,0,13,2], -"class_intelli_tool_rectangle.html":[1,0,14], -"class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c":[1,0,14,7], -"class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8":[1,0,14,5], -"class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b":[1,0,14,4], -"class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1":[1,0,14,1], -"class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43":[1,0,14,3], -"class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f":[1,0,14,6], -"class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c":[1,0,14,0], -"class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d":[1,0,14,2], -"class_intelli_toolsettings.html":[1,0,15], -"class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69":[1,0,15,0], -"class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f":[1,0,15,5], -"class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56":[1,0,15,1], -"class_intelli_toolsettings.html#a96d267baa782a32784dbeb1b7cd68cc4":[1,0,15,2] +"class_intelli_tool_gradient.html":[1,0,10], +"class_intelli_tool_gradient.html#a04315a520c97541d76e7723a07e0a834":[1,0,10,6], +"class_intelli_tool_gradient.html#a11f77ac474b697ebb6bc185560437f6a":[1,0,10,7], +"class_intelli_tool_gradient.html#a47700908dab413203d06d64175a12cc1":[1,0,10,2], +"class_intelli_tool_gradient.html#a6bbe09b64d8cd69e5ff64a3344725b11":[1,0,10,3], +"class_intelli_tool_gradient.html#a7d5c812815872b7e394e36362358b539":[1,0,10,1], +"class_intelli_tool_gradient.html#ad29617596a4dcf09aa8bcc633d627203":[1,0,10,0], +"class_intelli_tool_gradient.html#aed5ad1f718d53034d944ff8f1e8f9f36":[1,0,10,5], +"class_intelli_tool_gradient.html#aff3ccbecb7a33514765fdb44c7ce9e4e":[1,0,10,4], +"class_intelli_tool_line.html":[1,0,11], +"class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc":[1,0,11,0], +"class_intelli_tool_line.html#a155d676a5f98311217eb095be4759846":[1,0,11,2], +"class_intelli_tool_line.html#a6214918cba5753f89d97de4559a2b9b2":[1,0,11,6], +"class_intelli_tool_line.html#a6cce59f3017936214b10b47252a898a3":[1,0,11,5], +"class_intelli_tool_line.html#aaf1d686e1ec43f41b5186ccfd806b125":[1,0,11,7], +"class_intelli_tool_line.html#abc6324ef0778823fe7e35aef8ae37f9b":[1,0,11,4], +"class_intelli_tool_line.html#ac93f76ff20a1c111a403b298bab02482":[1,0,11,3], +"class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2":[1,0,11,1], +"class_intelli_tool_pen.html":[1,0,12], +"class_intelli_tool_pen.html#a1751e3864a0d36ef42ca55021cae73ce":[1,0,12,5], +"class_intelli_tool_pen.html#a58d1d636497b630647ce0c4d652737c2":[1,0,12,4], +"class_intelli_tool_pen.html#a8ff40aef6d38eb55af31a19322429205":[1,0,12,2], +"class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d":[1,0,12,0], +"class_intelli_tool_pen.html#abda7a22b9766fa4ad254324a53cab94d":[1,0,12,3], +"class_intelli_tool_pen.html#abf8562e8cd2da586afdf4d47b3a4ff13":[1,0,12,6], +"class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818":[1,0,12,1], +"class_intelli_tool_pen.html#afe3626ddff440ab125f4a2465c45427a":[1,0,12,7], +"class_intelli_tool_plain_tool.html":[1,0,13], +"class_intelli_tool_plain_tool.html#a2ae458f1b04eb77a47f6dca5e91e33b8":[1,0,13,6], +"class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2":[1,0,13,0], +"class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658":[1,0,13,1], +"class_intelli_tool_plain_tool.html#ab786dd5fa80af863246013d43c4b7ac9":[1,0,13,2], +"class_intelli_tool_plain_tool.html#ac23f5d0f07e42fd7c2ea3fc1347da400":[1,0,13,3], +"class_intelli_tool_plain_tool.html#acb0c46e16d2c09370a2244a936de38b1":[1,0,13,5], +"class_intelli_tool_plain_tool.html#ad7546a6335bb3bb4cbf0e1883788d41c":[1,0,13,4], +"class_intelli_tool_plain_tool.html#adc004ea421e2cc0ac39cc7a6b6d43d0d":[1,0,13,7], +"class_intelli_tool_polygon.html":[1,0,14], +"class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499":[1,0,14,1], +"class_intelli_tool_polygon.html#a0e3a1135f04c73c159137ae219a38922":[1,0,14,4], +"class_intelli_tool_polygon.html#a47cad87cd02b128b02dc929713bd1d1b":[1,0,14,6], +"class_intelli_tool_polygon.html#a4e1473ff408ae2e11cf6a43f6f575f21":[1,0,14,3], +"class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5":[1,0,14,0], +"class_intelli_tool_polygon.html#a713103300c9f023d64d9eec5ac05dd17":[1,0,14,7], +"class_intelli_tool_polygon.html#aa36b012b48311c36e7cd6771a5081427":[1,0,14,5], +"class_intelli_tool_polygon.html#ad5d3b741be6d0647a9cdc9da2cb8bc3d":[1,0,14,2] }; diff --git a/docs/html/navtreeindex1.js b/docs/html/navtreeindex1.js index 6944368..8ed62c2 100644 --- a/docs/html/navtreeindex1.js +++ b/docs/html/navtreeindex1.js @@ -1,62 +1,78 @@ var NAVTREEINDEX1 = { -"class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271":[1,0,15,4], -"class_intelli_toolsettings.html#abb3ee5a9c8a379167060799d275e65c3":[1,0,15,3], -"class_painting_area.html":[1,0,17], -"class_painting_area.html#a0b22e18069b524f3e75857d203baf256":[1,0,17,8], -"class_painting_area.html#a1274e60a912d2f1dfabcdd1b767fb029":[1,0,17,3], -"class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed":[1,0,17,47], -"class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b":[1,0,17,12], -"class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba":[1,0,17,19], -"class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e":[1,0,17,45], -"class_painting_area.html#a240c33a7875addac86080cdfb0db036a":[1,0,17,9], -"class_painting_area.html#a24280454ebb80db7feba2fd621513353":[1,0,17,22], -"class_painting_area.html#a2444acb9a61038fbe0206498d0cae011":[1,0,17,39], -"class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466":[1,0,17,7], -"class_painting_area.html#a35b5df914acb608cc29717659793359c":[1,0,17,31], -"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,35], -"class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423":[1,0,17,17], -"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,46], -"class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd":[1,0,17,43], -"class_painting_area.html#a675ee91b26b1c58be6d833f279d81597":[1,0,17,26], -"class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4":[1,0,17,27], -"class_painting_area.html#a6bd7eac7e2080b64336e58d0ecf93c71":[1,0,17,40], -"class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055":[1,0,17,38], -"class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec":[1,0,17,44], -"class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9":[1,0,17,37], -"class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90":[1,0,17,23], -"class_painting_area.html#a88c7e759aa8375a56129791645f46ea5":[1,0,17,34], -"class_painting_area.html#a91abd5e92acc5226a21ffc9e0ea36235":[1,0,17,25], -"class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353":[1,0,17,10], -"class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630":[1,0,17,15], -"class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5":[1,0,17,29], -"class_painting_area.html#aa2463d4f403224086acab02903ae407e":[1,0,17,36], -"class_painting_area.html#aa32adc113f77031945f73e33051931e8":[1,0,17,1], -"class_painting_area.html#aa409492ac26483d618bb33616f2e3f81":[1,0,17,41], -"class_painting_area.html#aa811d142df9239ae248679bd70ad6da7":[1,0,17,20], -"class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577":[1,0,17,42], -"class_painting_area.html#abc2f798744f1dc805a651731eb1692ea":[1,0,17,48], -"class_painting_area.html#abd5e3e4d3f2f026383d0a275dc55cbbd":[1,0,17,2], -"class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15":[1,0,17,30], -"class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4":[1,0,17,16], -"class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7":[1,0,17,33], -"class_painting_area.html#acab11ad35d07e9081203d8217d2c0855":[1,0,17,18], -"class_painting_area.html#acff4563d006fda491469bd41778d07eb":[1,0,17,6], -"class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097":[1,0,17,24], -"class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a":[1,0,17,32], -"class_painting_area.html#ae261acaaa346610dfed489dbac17e789":[1,0,17,5], -"class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8":[1,0,17,21], -"class_painting_area.html#aecc72f0f5971244205194934ff721546":[1,0,17,28], -"class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491":[1,0,17,14], -"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], +"class_intelli_tool_rectangle.html":[1,0,15], +"class_intelli_tool_rectangle.html#a445c53a56e859f970e59f5036e221e0c":[1,0,15,7], +"class_intelli_tool_rectangle.html#a480c6804a4963c5a1c3f7ef84b63c1a8":[1,0,15,5], +"class_intelli_tool_rectangle.html#a4b5931071e21eb6949ffe357315e408b":[1,0,15,4], +"class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1":[1,0,15,1], +"class_intelli_tool_rectangle.html#a94460e3ff1c19e80bde922c55f53cc43":[1,0,15,3], +"class_intelli_tool_rectangle.html#ad43f653256a6516b9398f82054be0d7f":[1,0,15,6], +"class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c":[1,0,15,0], +"class_intelli_tool_rectangle.html#ae03c307ccf66cbe3fd59e3657712368d":[1,0,15,2], +"class_intelli_toolsettings.html":[1,0,16], +"class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69":[1,0,16,0], +"class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f":[1,0,16,5], +"class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56":[1,0,16,1], +"class_intelli_toolsettings.html#a96d267baa782a32784dbeb1b7cd68cc4":[1,0,16,2], +"class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271":[1,0,16,4], +"class_intelli_toolsettings.html#abb3ee5a9c8a379167060799d275e65c3":[1,0,16,3], +"class_painting_area.html":[1,0,18], +"class_painting_area.html#a0b22e18069b524f3e75857d203baf256":[1,0,18,8], +"class_painting_area.html#a1274e60a912d2f1dfabcdd1b767fb029":[1,0,18,3], +"class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed":[1,0,18,49], +"class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b":[1,0,18,13], +"class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba":[1,0,18,22], +"class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e":[1,0,18,47], +"class_painting_area.html#a240c33a7875addac86080cdfb0db036a":[1,0,18,10], +"class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466":[1,0,18,7], +"class_painting_area.html#a2ea1108ae4e4be995c4df0d378c536e7":[1,0,18,21], +"class_painting_area.html#a35b5df914acb608cc29717659793359c":[1,0,18,34], +"class_painting_area.html#a3bfc63de27c54f3edf9feb3af538343c":[1,0,18,40], +"class_painting_area.html#a3de83443d2d5cf460ff48d0602070938":[1,0,18,12], +"class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df":[1,0,18,4], +"class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7":[1,0,18,38], +"class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423":[1,0,18,19], +"class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460":[1,0,18,0], +"class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd":[1,0,18,14], +"class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4":[1,0,18,48], +"class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd":[1,0,18,45], +"class_painting_area.html#a63cfff9cd4bc04e0b62d4c76cbf87395":[1,0,18,27], +"class_painting_area.html#a675ee91b26b1c58be6d833f279d81597":[1,0,18,28], +"class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4":[1,0,18,30], +"class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055":[1,0,18,42], +"class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec":[1,0,18,46], +"class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9":[1,0,18,41], +"class_painting_area.html#a88c7e759aa8375a56129791645f46ea5":[1,0,18,37], +"class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353":[1,0,18,11], +"class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630":[1,0,18,16], +"class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5":[1,0,18,32], +"class_painting_area.html#aa2463d4f403224086acab02903ae407e":[1,0,18,39], +"class_painting_area.html#aa32adc113f77031945f73e33051931e8":[1,0,18,1], +"class_painting_area.html#aa409492ac26483d618bb33616f2e3f81":[1,0,18,43], +"class_painting_area.html#aa811d142df9239ae248679bd70ad6da7":[1,0,18,23], +"class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577":[1,0,18,44], +"class_painting_area.html#abc2f798744f1dc805a651731eb1692ea":[1,0,18,50], +"class_painting_area.html#abd5e3e4d3f2f026383d0a275dc55cbbd":[1,0,18,2], +"class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15":[1,0,18,33], +"class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4":[1,0,18,18], +"class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7":[1,0,18,36], +"class_painting_area.html#acab11ad35d07e9081203d8217d2c0855":[1,0,18,20], +"class_painting_area.html#acf20e3f5f74a239e6f9b7e2e1200295f":[1,0,18,29], +"class_painting_area.html#acff4563d006fda491469bd41778d07eb":[1,0,18,6], +"class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097":[1,0,18,26], +"class_painting_area.html#ad8636e986fdcdd3146f9f72d3cdb1831":[1,0,18,9], +"class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a":[1,0,18,35], +"class_painting_area.html#ae261acaaa346610dfed489dbac17e789":[1,0,18,5], +"class_painting_area.html#ae6eb9b269cdee993dbabd066e4679576":[1,0,18,25], +"class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8":[1,0,18,24], +"class_painting_area.html#aecc72f0f5971244205194934ff721546":[1,0,18,31], +"class_painting_area.html#af1b7be20235139e4909086696ea74cf7":[1,0,18,17], +"class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491":[1,0,18,15], +"class_unit_test.html":[1,0,20], +"class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,20,2], +"class_unit_test.html#a67ddaff817b55a624741d32550052f4b":[1,0,20,0], +"class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,20,1], +"class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf":[1,0,20,3], "classes.html":[1,1], "dir_13830bfc3dd6736fe878600c9081919f.html":[2,0,0,3], "dir_4e4e2e75df7fa6971448b424c011c8b5.html":[2,0,0,0], @@ -65,8 +81,8 @@ var NAVTREEINDEX1 = "dir_8de6078cba2a961961818cf80b28fd4f.html":[2,0,0,2], "dir_fdbdd9841f9a730f284bb666ff3d8cfe.html":[2,0,0,1], "files.html":[2,0], -"functions.html":[1,3,0,0], "functions.html":[1,3,0], +"functions.html":[1,3,0,0], "functions_b.html":[1,3,0,1], "functions_c.html":[1,3,0,2], "functions_d.html":[1,3,0,3], @@ -104,19 +120,19 @@ var NAVTREEINDEX1 = "namespacemembers_func.html":[0,1,1], "namespaces.html":[0,0], "pages.html":[], -"struct_layer_object.html":[1,0,16], -"struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc":[1,0,16,4], -"struct_layer_object.html#a0c4519287423c097acb2a0764913f7d0":[1,0,16,0], -"struct_layer_object.html#a2b8ffdba5ec6fb69eb6f59e97aced98a":[1,0,16,1], -"struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56":[1,0,16,2], -"struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96":[1,0,16,7], -"struct_layer_object.html#ae0003fb815e50ed587a9897988befc90":[1,0,16,3], -"struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83":[1,0,16,5], -"struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897":[1,0,16,6], -"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_layer_object.html":[1,0,17], +"struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc":[1,0,17,4], +"struct_layer_object.html#a0c4519287423c097acb2a0764913f7d0":[1,0,17,0], +"struct_layer_object.html#a2b8ffdba5ec6fb69eb6f59e97aced98a":[1,0,17,1], +"struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56":[1,0,17,2], +"struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96":[1,0,17,7], +"struct_layer_object.html#ae0003fb815e50ed587a9897988befc90":[1,0,17,3], +"struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83":[1,0,17,5], +"struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897":[1,0,17,6], +"struct_triangle.html":[1,0,19], +"struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b":[1,0,19,0], +"struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7":[1,0,19,1], +"struct_triangle.html#addb8aaab314d79f3617acca01e12872a":[1,0,19,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 1a874fb..27bec62 100644 --- a/docs/html/search/all_10.js +++ b/docs/html/search/all_10.js @@ -1,6 +1,6 @@ var searchData= [ - ['unittest_187',['UnitTest',['../class_unit_test.html',1,'UnitTest'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], - ['updategui_188',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_189',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['unittest_193',['UnitTest',['../class_unit_test.html',1,'UnitTest'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], + ['updategui_194',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_195',['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 8546872..aa0541e 100644 --- a/docs/html/search/all_11.js +++ b/docs/html/search/all_11.js @@ -1,6 +1,6 @@ var searchData= [ - ['wheelevent_190',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], - ['width_191',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_192',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['wheelevent_196',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]], + ['width_197',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_198',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js index 5308458..b1d9a13 100644 --- a/docs/html/search/all_12.js +++ b/docs/html/search/all_12.js @@ -1,18 +1,19 @@ var searchData= [ - ['_7eintellicolorpicker_193',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_194',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_195',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_196',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_197',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_198',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_199',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_200',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_201',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_202',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_203',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_204',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_205',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_206',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], - ['_7eunittest_207',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] + ['_7eintellicolorpicker_199',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_200',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_201',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_202',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_203',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_204',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_205',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolgradient_206',['~IntelliToolGradient',['../class_intelli_tool_gradient.html#a7d5c812815872b7e394e36362358b539',1,'IntelliToolGradient']]], + ['_7eintellitoolline_207',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_208',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_209',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_210',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_211',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_212',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_213',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], + ['_7eunittest_214',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] ]; diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js index 8cbb3f5..dd342a2 100644 --- a/docs/html/search/all_2.js +++ b/docs/html/search/all_2.js @@ -13,9 +13,10 @@ var searchData= ['copy_18',['copy',['../class_intelli_raster_image.html#a6c27fa0d323a1a81d0c4c93c9161f81e',1,'IntelliRasterImage::copy()'],['../class_intelli_shaped_image.html#aee38adc7db9e3fd40e083247219bef05',1,'IntelliShapedImage::copy()']]], ['createcircletool_19',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], ['createfloodfilltool_20',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], - ['createlinetool_21',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], - ['createpentool_22',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], - ['createplaintool_23',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], - ['createpolygontool_24',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], - ['createrectangletool_25',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] + ['creategradienttool_21',['createGradientTool',['../class_painting_area.html#ad8636e986fdcdd3146f9f72d3cdb1831',1,'PaintingArea']]], + ['createlinetool_22',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], + ['createpentool_23',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], + ['createplaintool_24',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], + ['createpolygontool_25',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], + ['createrectangletool_26',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js index 7583853..76a4d20 100644 --- a/docs/html/search/all_3.js +++ b/docs/html/search/all_3.js @@ -1,9 +1,10 @@ var searchData= [ - ['deletealllayers_26',['deleteAllLayers',['../class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491',1,'PaintingArea']]], - ['deletelayer_27',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], - ['drawline_28',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], - ['drawpixel_29',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], - ['drawplain_30',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], - ['drawpoint_31',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] + ['deletealllayers_27',['deleteAllLayers',['../class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491',1,'PaintingArea']]], + ['deletelayer_28',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], + ['drawline_29',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], + ['drawpixel_30',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], + ['drawpixelontoactive_31',['drawPixelOntoActive',['../class_painting_area.html#af1b7be20235139e4909086696ea74cf7',1,'PaintingArea']]], + ['drawplain_32',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], + ['drawpoint_33',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] ]; diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index 11a85e5..a298432 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['fastrenderering_32',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]], - ['floodfill_33',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] + ['fastrenderering_34',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]], + ['floodfill_35',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] ]; diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js index 9c3c2d1..fdd5574 100644 --- a/docs/html/search/all_5.js +++ b/docs/html/search/all_5.js @@ -1,30 +1,31 @@ var searchData= [ - ['getdeepcopy_34',['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_35',['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_36',['getFirstColor',['../class_intelli_color_picker.html#aeb08029a0c946ed0402c9c11a91965b1',1,'IntelliColorPicker']]], - ['getheight_37',['getHeight',['../class_intelli_image.html#a895bbe107ad2958aca6eebf9af3eb7f1',1,'IntelliImage']]], - ['getheightofactive_38',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], - ['getimagedata_39',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], - ['getimagedataofactivelayer_40',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], - ['getimageofactivelayer_41',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], - ['getinneralpha_42',['getInnerAlpha',['../class_intelli_toolsettings.html#a96d267baa782a32784dbeb1b7cd68cc4',1,'IntelliToolsettings']]], - ['getint_43',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], - ['getisdrawing_44',['getIsDrawing',['../class_intelli_tool.html#af90f0965efbc5c25126691e998f39ca3',1,'IntelliTool']]], - ['getlayerbundle_45',['getLayerBundle',['../class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba',1,'PaintingArea']]], - ['getlinewidth_46',['getLineWidth',['../class_intelli_toolsettings.html#abb3ee5a9c8a379167060799d275e65c3',1,'IntelliToolsettings']]], - ['getmaxheight_47',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], - ['getmaxwidth_48',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], - ['getnumberofactivelayer_49',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], - ['getpixelcolor_50',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], - ['getpolygon_51',['getPolygon',['../class_intelli_raster_image.html#af19828176178cc1dece5160d726d946e',1,'IntelliRasterImage::getPolygon()'],['../class_intelli_shaped_image.html#aeff4b2331f4244f170c70526d8ca819b',1,'IntelliShapedImage::getPolygon()']]], - ['getpolygondata_52',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], - ['getpolygondataofreallayer_53',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], - ['getrendersettings_54',['getRenderSettings',['../class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097',1,'PaintingArea']]], - ['getsecondcolor_55',['getSecondColor',['../class_intelli_color_picker.html#ab41abe8fb7e184db2c33e792f09792e0',1,'IntelliColorPicker']]], - ['gettooltype_56',['getTooltype',['../class_intelli_tool.html#adf5c06ad2b2c0d745fb68cf80e7e5694',1,'IntelliTool']]], - ['gettypeofimage_57',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], - ['gettypeofimagereallayer_58',['getTypeOfImageRealLayer',['../class_painting_area.html#a91abd5e92acc5226a21ffc9e0ea36235',1,'PaintingArea']]], - ['getwidth_59',['getWidth',['../class_intelli_image.html#aea7b5f173968b330ef034bedb9426520',1,'IntelliImage']]], - ['getwidthofactive_60',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] + ['getdeepcopy_36',['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_37',['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_38',['getFirstColor',['../class_intelli_color_picker.html#aeb08029a0c946ed0402c9c11a91965b1',1,'IntelliColorPicker']]], + ['getheight_39',['getHeight',['../class_intelli_image.html#a895bbe107ad2958aca6eebf9af3eb7f1',1,'IntelliImage']]], + ['getheightofactive_40',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], + ['getimagedata_41',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], + ['getimagedataofactivelayer_42',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], + ['getimageofactivelayer_43',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], + ['getindexofactivelayer_44',['getIndexOfActiveLayer',['../class_painting_area.html#a2ea1108ae4e4be995c4df0d378c536e7',1,'PaintingArea']]], + ['getinneralpha_45',['getInnerAlpha',['../class_intelli_toolsettings.html#a96d267baa782a32784dbeb1b7cd68cc4',1,'IntelliToolsettings']]], + ['getint_46',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], + ['getisdrawing_47',['getIsDrawing',['../class_intelli_tool.html#af90f0965efbc5c25126691e998f39ca3',1,'IntelliTool']]], + ['getlayerbundle_48',['getLayerBundle',['../class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba',1,'PaintingArea']]], + ['getlinewidth_49',['getLineWidth',['../class_intelli_toolsettings.html#abb3ee5a9c8a379167060799d275e65c3',1,'IntelliToolsettings']]], + ['getmaxheight_50',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], + ['getmaxwidth_51',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], + ['getpixelcolor_52',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], + ['getpolygon_53',['getPolygon',['../class_intelli_raster_image.html#af19828176178cc1dece5160d726d946e',1,'IntelliRasterImage::getPolygon()'],['../class_intelli_shaped_image.html#aeff4b2331f4244f170c70526d8ca819b',1,'IntelliShapedImage::getPolygon()']]], + ['getpolygondata_54',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], + ['getpolygondataofactivelayer_55',['getPolygonDataOfActiveLayer',['../class_painting_area.html#ae6eb9b269cdee993dbabd066e4679576',1,'PaintingArea']]], + ['getrendersettings_56',['getRenderSettings',['../class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097',1,'PaintingArea']]], + ['getsecondcolor_57',['getSecondColor',['../class_intelli_color_picker.html#ab41abe8fb7e184db2c33e792f09792e0',1,'IntelliColorPicker']]], + ['gettooltype_58',['getTooltype',['../class_intelli_tool.html#adf5c06ad2b2c0d745fb68cf80e7e5694',1,'IntelliTool']]], + ['gettypeofimage_59',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], + ['gettypeofimageactivelayer_60',['getTypeOfImageActiveLayer',['../class_painting_area.html#a63cfff9cd4bc04e0b62d4c76cbf87395',1,'PaintingArea']]], + ['getwidth_61',['getWidth',['../class_intelli_image.html#aea7b5f173968b330ef034bedb9426520',1,'IntelliImage']]], + ['getwidthofactive_62',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]], + ['gradient_63',['GRADIENT',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa90f70ea2675c36bd9b0b44a79f37a41f',1,'IntelliTool']]] ]; diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js index d13f807..abc17cc 100644 --- a/docs/html/search/all_6.js +++ b/docs/html/search/all_6.js @@ -1,7 +1,8 @@ var searchData= [ - ['height_61',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], - ['heightoffset_62',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]], - ['historygoback_63',['historyGoBack',['../class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4',1,'PaintingArea']]], - ['historygoforward_64',['historyGoForward',['../class_painting_area.html#aecc72f0f5971244205194934ff721546',1,'PaintingArea']]] + ['height_64',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], + ['heightoffset_65',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]], + ['historyadd_66',['historyadd',['../class_painting_area.html#acf20e3f5f74a239e6f9b7e2e1200295f',1,'PaintingArea']]], + ['historygoback_67',['historyGoBack',['../class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4',1,'PaintingArea']]], + ['historygoforward_68',['historyGoForward',['../class_painting_area.html#aecc72f0f5971244205194934ff721546',1,'PaintingArea']]] ]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index ec772e5..32e0788 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -1,65 +1,68 @@ var searchData= [ - ['image_65',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], - ['imagedata_66',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], - ['imagetype_67',['ImageType',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0',1,'IntelliImage.h']]], - ['intellicolorpicker_68',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'IntelliColorPicker'],['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker::IntelliColorPicker()']]], - ['intellicolorpicker_2ecpp_69',['IntelliColorPicker.cpp',['../_intelli_color_picker_8cpp.html',1,'']]], - ['intellicolorpicker_2eh_70',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], - ['intellidatamanager_71',['IntelliDatamanager',['../namespace_intelli_datamanager.html',1,'']]], - ['intellidatamanager_2ecpp_72',['IntelliDatamanager.cpp',['../_intelli_datamanager_8cpp.html',1,'']]], - ['intellidatamanager_2eh_73',['IntelliDatamanager.h',['../_intelli_datamanager_8h.html',1,'']]], - ['intelliimage_74',['IntelliImage',['../class_intelli_image.html',1,'IntelliImage'],['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage::IntelliImage()']]], - ['intelliimage_2ecpp_75',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], - ['intelliimage_2eh_76',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], - ['intelliinputdialog_77',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'IntelliInputDialog'],['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog::IntelliInputDialog()']]], - ['intelliinputdialog_2ecpp_78',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], - ['intelliinputdialog_2eh_79',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], - ['intelliphotogui_80',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'IntelliPhotoGui'],['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui::IntelliPhotoGui()']]], - ['intelliphotogui_2ecpp_81',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], - ['intelliphotogui_2eh_82',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], - ['intellirasterimage_83',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'IntelliRasterImage'],['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage::IntelliRasterImage()']]], - ['intellirasterimage_2ecpp_84',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], - ['intellirasterimage_2eh_85',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], - ['intellirendersettings_86',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'IntelliRenderSettings'],['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings::IntelliRenderSettings()']]], - ['intellirendersettings_2ecpp_87',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], - ['intellirendersettings_2eh_88',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], - ['intellishapedimage_89',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'IntelliShapedImage'],['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage::IntelliShapedImage()']]], - ['intellishapedimage_2ecpp_90',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], - ['intellishapedimage_2eh_91',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], - ['intellitool_92',['IntelliTool',['../class_intelli_tool.html',1,'IntelliTool'],['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool::IntelliTool()']]], - ['intellitool_2ecpp_93',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], - ['intellitool_2eh_94',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], - ['intellitoolcircle_95',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'IntelliToolCircle'],['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle::IntelliToolCircle()']]], - ['intellitoolcircle_2ecpp_96',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], - ['intellitoolcircle_2eh_97',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], - ['intellitoolfloodfill_98',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'IntelliToolFloodFill'],['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill::IntelliToolFloodFill()']]], - ['intellitoolfloodfill_2ecpp_99',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], - ['intellitoolfloodfill_2eh_100',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], - ['intellitoolline_101',['IntelliToolLine',['../class_intelli_tool_line.html',1,'IntelliToolLine'],['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine::IntelliToolLine()']]], - ['intellitoolline_2ecpp_102',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], - ['intellitoolline_2eh_103',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], - ['intellitoolpen_104',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'IntelliToolPen'],['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen::IntelliToolPen()']]], - ['intellitoolpen_2ecpp_105',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], - ['intellitoolpen_2eh_106',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], - ['intellitoolplain_2ecpp_107',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], - ['intellitoolplain_2eh_108',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], - ['intellitoolplaintool_109',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'IntelliToolPlainTool'],['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool::IntelliToolPlainTool()']]], - ['intellitoolpolygon_110',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'IntelliToolPolygon'],['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon::IntelliToolPolygon()']]], - ['intellitoolpolygon_2ecpp_111',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], - ['intellitoolpolygon_2eh_112',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], - ['intellitoolrectangle_113',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'IntelliToolRectangle'],['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle::IntelliToolRectangle()']]], - ['intellitoolrectangle_2ecpp_114',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], - ['intellitoolrectangle_2eh_115',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], - ['intellitoolsettings_116',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'IntelliToolsettings'],['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings::IntelliToolsettings()']]], - ['intellitoolsettings_2ecpp_117',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], - ['intellitoolsettings_2eh_118',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], - ['intellitriangulation_119',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]], - ['intellitriangulation_2ecpp_120',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], - ['intellitriangulation_2eh_121',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]], - ['isdrawing_122',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]], - ['isfastrenderering_123',['isFastRenderering',['../class_intelli_render_settings.html#a38fd592c4948d2e47b95bb6fabc34073',1,'IntelliRenderSettings']]], - ['isfastrendering_124',['isFastRendering',['../class_intelli_image.html#a47941bed3060d8df5f2edce8c7f046cb',1,'IntelliImage']]], - ['isinpolygon_125',['isInPolygon',['../namespace_intelli_triangulation.html#ac276696f29d141ed34614c1c3b1c040f',1,'IntelliTriangulation']]], - ['isintriangle_126',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] + ['image_69',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], + ['imagedata_70',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], + ['imagetype_71',['ImageType',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0',1,'IntelliImage.h']]], + ['intellicolorpicker_72',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'IntelliColorPicker'],['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker::IntelliColorPicker()']]], + ['intellicolorpicker_2ecpp_73',['IntelliColorPicker.cpp',['../_intelli_color_picker_8cpp.html',1,'']]], + ['intellicolorpicker_2eh_74',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], + ['intellidatamanager_75',['IntelliDatamanager',['../namespace_intelli_datamanager.html',1,'']]], + ['intellidatamanager_2ecpp_76',['IntelliDatamanager.cpp',['../_intelli_datamanager_8cpp.html',1,'']]], + ['intellidatamanager_2eh_77',['IntelliDatamanager.h',['../_intelli_datamanager_8h.html',1,'']]], + ['intelliimage_78',['IntelliImage',['../class_intelli_image.html',1,'IntelliImage'],['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage::IntelliImage()']]], + ['intelliimage_2ecpp_79',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], + ['intelliimage_2eh_80',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], + ['intelliinputdialog_81',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'IntelliInputDialog'],['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog::IntelliInputDialog()']]], + ['intelliinputdialog_2ecpp_82',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], + ['intelliinputdialog_2eh_83',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], + ['intelliphotogui_84',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'IntelliPhotoGui'],['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui::IntelliPhotoGui()']]], + ['intelliphotogui_2ecpp_85',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], + ['intelliphotogui_2eh_86',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], + ['intellirasterimage_87',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'IntelliRasterImage'],['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage::IntelliRasterImage()']]], + ['intellirasterimage_2ecpp_88',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], + ['intellirasterimage_2eh_89',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], + ['intellirendersettings_90',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'IntelliRenderSettings'],['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings::IntelliRenderSettings()']]], + ['intellirendersettings_2ecpp_91',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], + ['intellirendersettings_2eh_92',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], + ['intellishapedimage_93',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'IntelliShapedImage'],['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage::IntelliShapedImage()']]], + ['intellishapedimage_2ecpp_94',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], + ['intellishapedimage_2eh_95',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], + ['intellitool_96',['IntelliTool',['../class_intelli_tool.html',1,'IntelliTool'],['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool::IntelliTool()']]], + ['intellitool_2ecpp_97',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], + ['intellitool_2eh_98',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], + ['intellitoolcircle_99',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'IntelliToolCircle'],['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle::IntelliToolCircle()']]], + ['intellitoolcircle_2ecpp_100',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], + ['intellitoolcircle_2eh_101',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], + ['intellitoolfloodfill_102',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'IntelliToolFloodFill'],['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill::IntelliToolFloodFill()']]], + ['intellitoolfloodfill_2ecpp_103',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], + ['intellitoolfloodfill_2eh_104',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], + ['intellitoolgradient_105',['IntelliToolGradient',['../class_intelli_tool_gradient.html',1,'IntelliToolGradient'],['../class_intelli_tool_gradient.html#ad29617596a4dcf09aa8bcc633d627203',1,'IntelliToolGradient::IntelliToolGradient()']]], + ['intellitoolgradient_2ecpp_106',['IntelliToolGradient.cpp',['../_intelli_tool_gradient_8cpp.html',1,'']]], + ['intellitoolgradient_2eh_107',['IntelliToolGradient.h',['../_intelli_tool_gradient_8h.html',1,'']]], + ['intellitoolline_108',['IntelliToolLine',['../class_intelli_tool_line.html',1,'IntelliToolLine'],['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine::IntelliToolLine()']]], + ['intellitoolline_2ecpp_109',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], + ['intellitoolline_2eh_110',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], + ['intellitoolpen_111',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'IntelliToolPen'],['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen::IntelliToolPen()']]], + ['intellitoolpen_2ecpp_112',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], + ['intellitoolpen_2eh_113',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], + ['intellitoolplain_2ecpp_114',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], + ['intellitoolplain_2eh_115',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], + ['intellitoolplaintool_116',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'IntelliToolPlainTool'],['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool::IntelliToolPlainTool()']]], + ['intellitoolpolygon_117',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'IntelliToolPolygon'],['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon::IntelliToolPolygon()']]], + ['intellitoolpolygon_2ecpp_118',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], + ['intellitoolpolygon_2eh_119',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], + ['intellitoolrectangle_120',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'IntelliToolRectangle'],['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle::IntelliToolRectangle()']]], + ['intellitoolrectangle_2ecpp_121',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], + ['intellitoolrectangle_2eh_122',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], + ['intellitoolsettings_123',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'IntelliToolsettings'],['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings::IntelliToolsettings()']]], + ['intellitoolsettings_2ecpp_124',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], + ['intellitoolsettings_2eh_125',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], + ['intellitriangulation_126',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]], + ['intellitriangulation_2ecpp_127',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], + ['intellitriangulation_2eh_128',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]], + ['isdrawing_129',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]], + ['isfastrenderering_130',['isFastRenderering',['../class_intelli_render_settings.html#a38fd592c4948d2e47b95bb6fabc34073',1,'IntelliRenderSettings']]], + ['isfastrendering_131',['isFastRendering',['../class_intelli_image.html#a47941bed3060d8df5f2edce8c7f046cb',1,'IntelliImage']]], + ['isinpolygon_132',['isInPolygon',['../namespace_intelli_triangulation.html#ac276696f29d141ed34614c1c3b1c040f',1,'IntelliTriangulation']]], + ['isintriangle_133',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js index 265168a..baab99a 100644 --- a/docs/html/search/all_8.js +++ b/docs/html/search/all_8.js @@ -1,7 +1,7 @@ var searchData= [ - ['layerobject_127',['LayerObject',['../struct_layer_object.html',1,'LayerObject'],['../struct_layer_object.html#a0c4519287423c097acb2a0764913f7d0',1,'LayerObject::LayerObject()'],['../struct_layer_object.html#a2b8ffdba5ec6fb69eb6f59e97aced98a',1,'LayerObject::LayerObject(const LayerObject &layer)']]], - ['line_128',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]], - ['loadimage_129',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]], - ['loadproject_130',['loadProject',['../namespace_intelli_datamanager.html#a41920e07aa9e0b2756323779f7fe8de2',1,'IntelliDatamanager']]] + ['layerobject_134',['LayerObject',['../struct_layer_object.html',1,'LayerObject'],['../struct_layer_object.html#a0c4519287423c097acb2a0764913f7d0',1,'LayerObject::LayerObject()'],['../struct_layer_object.html#a2b8ffdba5ec6fb69eb6f59e97aced98a',1,'LayerObject::LayerObject(const LayerObject &layer)']]], + ['line_135',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]], + ['loadimage_136',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]], + ['loadproject_137',['loadProject',['../namespace_intelli_datamanager.html#a41920e07aa9e0b2756323779f7fe8de2',1,'IntelliDatamanager']]] ]; diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index 04b2e19..76d4400 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -1,11 +1,11 @@ var searchData= [ - ['main_131',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], - ['main_2ecpp_132',['main.cpp',['../main_8cpp.html',1,'']]], - ['mainunittest_2ecpp_133',['mainUnitTest.cpp',['../main_unit_test_8cpp.html',1,'']]], - ['mousemoveevent_134',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], - ['mousepressevent_135',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], - ['mousereleaseevent_136',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], - ['moveactivelayer_137',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], - ['movepositionactive_138',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] + ['main_138',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['main_2ecpp_139',['main.cpp',['../main_8cpp.html',1,'']]], + ['mainunittest_2ecpp_140',['mainUnitTest.cpp',['../main_unit_test_8cpp.html',1,'']]], + ['mousemoveevent_141',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], + ['mousepressevent_142',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], + ['mousereleaseevent_143',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], + ['moveactivelayer_144',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], + ['movepositionactive_145',['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 558db72..2e0e9b9 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,4 +1,4 @@ var searchData= [ - ['none_139',['NONE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693',1,'IntelliTool']]] + ['none_146',['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 91a875a..16eb85a 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,10 +1,10 @@ var searchData= [ - ['onmouseleftpressed_140',['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_141',['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_142',['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_143',['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_144',['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_145',['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_146',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['onmouseleftpressed_147',['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_gradient.html#a47700908dab413203d06d64175a12cc1',1,'IntelliToolGradient::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_148',['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_gradient.html#a6bbe09b64d8cd69e5ff64a3344725b11',1,'IntelliToolGradient::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_149',['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_gradient.html#aff3ccbecb7a33514765fdb44c7ce9e4e',1,'IntelliToolGradient::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_150',['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_gradient.html#aed5ad1f718d53034d944ff8f1e8f9f36',1,'IntelliToolGradient::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_151',['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_gradient.html#a04315a520c97541d76e7723a07e0a834',1,'IntelliToolGradient::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_152',['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_gradient.html#a11f77ac474b697ebb6bc185560437f6a',1,'IntelliToolGradient::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_153',['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 9af0a1d..91f3ec4 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,12 +1,12 @@ var searchData= [ - ['paintevent_147',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_148',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], - ['paintingarea_2ecpp_149',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_150',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], - ['pen_151',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['pi_152',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], - ['plain_153',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_154',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], - ['polygondata_155',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['paintevent_154',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_155',['PaintingArea',['../class_painting_area.html',1,'PaintingArea'],['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea::PaintingArea()']]], + ['paintingarea_2ecpp_156',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_157',['PaintingArea.h',['../_painting_area_8h.html',1,'']]], + ['pen_158',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['pi_159',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]], + ['plain_160',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_161',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]], + ['polygondata_162',['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 0445796..a51bf9e 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,6 +1,6 @@ var searchData= [ - ['rasterimage_156',['RASTERIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0add5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage.h']]], - ['rectangle_157',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], - ['resizeimage_158',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['rasterimage_163',['RASTERIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0add5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage.h']]], + ['rectangle_164',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]], + ['resizeimage_165',['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 5713cd5..7663685 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,26 +1,25 @@ var searchData= [ - ['save_159',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['saveproject_160',['saveProject',['../namespace_intelli_datamanager.html#ac02f6f47ff8785ad9d49588baaca3d54',1,'IntelliDatamanager']]], - ['setfastrendering_161',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], - ['setfirstcolor_162',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setimagedata_163',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], - ['setinneralpha_164',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], - ['setlayeractive_165',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_166',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlayerdimensions_167',['setLayerDimensions',['../class_painting_area.html#a2444acb9a61038fbe0206498d0cae011',1,'PaintingArea']]], - ['setlinewidth_168',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], - ['setpixeltoactive_169',['setPixelToActive',['../class_painting_area.html#a6bd7eac7e2080b64336e58d0ecf93c71',1,'PaintingArea']]], - ['setpolygon_170',['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()']]], - ['setpolygondatatoactive_171',['setPolygonDataToActive',['../class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577',1,'PaintingArea']]], - ['setrendersettings_172',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], - ['setsecondcolor_173',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['settoolwidth_174',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], - ['shapedimage_175',['SHAPEDIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0ac065b60ec4cf443808263527bdc0df37',1,'IntelliImage.h']]], - ['sign_176',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_177',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotcloseevent_178',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], - ['slotdeleteactivelayer_179',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['sloteingabe_180',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], - ['swapcolors_181',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['save_166',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['saveproject_167',['saveProject',['../namespace_intelli_datamanager.html#ac02f6f47ff8785ad9d49588baaca3d54',1,'IntelliDatamanager']]], + ['setcanvasdimensions_168',['setCanvasDimensions',['../class_painting_area.html#a3bfc63de27c54f3edf9feb3af538343c',1,'PaintingArea']]], + ['setfastrendering_169',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_170',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_171',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_172',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_173',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_174',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_175',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_176',['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()']]], + ['setpolygondatatoactive_177',['setPolygonDataToActive',['../class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577',1,'PaintingArea']]], + ['setrendersettings_178',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_179',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_180',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['shapedimage_181',['SHAPEDIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0ac065b60ec4cf443808263527bdc0df37',1,'IntelliImage.h']]], + ['sign_182',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_183',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_184',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_185',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_186',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_187',['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 037e584..95ce2e5 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -1,8 +1,8 @@ var searchData= [ - ['toolsettings_182',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['tooltype_183',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], - ['triangle_184',['Triangle',['../struct_triangle.html',1,'']]], - ['tst_5funittest_2ecpp_185',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]], - ['typeofimage_186',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_188',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['tooltype_189',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]], + ['triangle_190',['Triangle',['../struct_triangle.html',1,'']]], + ['tst_5funittest_2ecpp_191',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]], + ['typeofimage_192',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] ]; diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js index 16123f6..6e08262 100644 --- a/docs/html/search/classes_0.js +++ b/docs/html/search/classes_0.js @@ -1,19 +1,20 @@ var searchData= [ - ['intellicolorpicker_208',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'']]], - ['intelliimage_209',['IntelliImage',['../class_intelli_image.html',1,'']]], - ['intelliinputdialog_210',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'']]], - ['intelliphotogui_211',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'']]], - ['intellirasterimage_212',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'']]], - ['intellirendersettings_213',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'']]], - ['intellishapedimage_214',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'']]], - ['intellitool_215',['IntelliTool',['../class_intelli_tool.html',1,'']]], - ['intellitoolcircle_216',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'']]], - ['intellitoolfloodfill_217',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'']]], - ['intellitoolline_218',['IntelliToolLine',['../class_intelli_tool_line.html',1,'']]], - ['intellitoolpen_219',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'']]], - ['intellitoolplaintool_220',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'']]], - ['intellitoolpolygon_221',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'']]], - ['intellitoolrectangle_222',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'']]], - ['intellitoolsettings_223',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'']]] + ['intellicolorpicker_215',['IntelliColorPicker',['../class_intelli_color_picker.html',1,'']]], + ['intelliimage_216',['IntelliImage',['../class_intelli_image.html',1,'']]], + ['intelliinputdialog_217',['IntelliInputDialog',['../class_intelli_input_dialog.html',1,'']]], + ['intelliphotogui_218',['IntelliPhotoGui',['../class_intelli_photo_gui.html',1,'']]], + ['intellirasterimage_219',['IntelliRasterImage',['../class_intelli_raster_image.html',1,'']]], + ['intellirendersettings_220',['IntelliRenderSettings',['../class_intelli_render_settings.html',1,'']]], + ['intellishapedimage_221',['IntelliShapedImage',['../class_intelli_shaped_image.html',1,'']]], + ['intellitool_222',['IntelliTool',['../class_intelli_tool.html',1,'']]], + ['intellitoolcircle_223',['IntelliToolCircle',['../class_intelli_tool_circle.html',1,'']]], + ['intellitoolfloodfill_224',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html',1,'']]], + ['intellitoolgradient_225',['IntelliToolGradient',['../class_intelli_tool_gradient.html',1,'']]], + ['intellitoolline_226',['IntelliToolLine',['../class_intelli_tool_line.html',1,'']]], + ['intellitoolpen_227',['IntelliToolPen',['../class_intelli_tool_pen.html',1,'']]], + ['intellitoolplaintool_228',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html',1,'']]], + ['intellitoolpolygon_229',['IntelliToolPolygon',['../class_intelli_tool_polygon.html',1,'']]], + ['intellitoolrectangle_230',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html',1,'']]], + ['intellitoolsettings_231',['IntelliToolsettings',['../class_intelli_toolsettings.html',1,'']]] ]; diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js index 865744a..8deafad 100644 --- a/docs/html/search/classes_1.js +++ b/docs/html/search/classes_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['layerobject_224',['LayerObject',['../struct_layer_object.html',1,'']]] + ['layerobject_232',['LayerObject',['../struct_layer_object.html',1,'']]] ]; diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js index 8e25604..dad78c5 100644 --- a/docs/html/search/classes_2.js +++ b/docs/html/search/classes_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['paintingarea_225',['PaintingArea',['../class_painting_area.html',1,'']]] + ['paintingarea_233',['PaintingArea',['../class_painting_area.html',1,'']]] ]; diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js index c0fa3d4..0ada2ee 100644 --- a/docs/html/search/classes_3.js +++ b/docs/html/search/classes_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['triangle_226',['Triangle',['../struct_triangle.html',1,'']]] + ['triangle_234',['Triangle',['../struct_triangle.html',1,'']]] ]; diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js index 168580a..acd76d1 100644 --- a/docs/html/search/classes_4.js +++ b/docs/html/search/classes_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['unittest_227',['UnitTest',['../class_unit_test.html',1,'']]] + ['unittest_235',['UnitTest',['../class_unit_test.html',1,'']]] ]; diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js index 46b47dd..91d04f8 100644 --- a/docs/html/search/defines_0.js +++ b/docs/html/search/defines_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['pi_434',['pi',['../_intelli_triangulation_8cpp.html#a1daf785e3f68d293c7caa1c756d5cb74',1,'IntelliTriangulation.cpp']]] + ['pi_449',['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 418f00f..f493f28 100644 --- a/docs/html/search/enums_0.js +++ b/docs/html/search/enums_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['imagetype_422',['ImageType',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0',1,'IntelliImage.h']]] + ['imagetype_436',['ImageType',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0',1,'IntelliImage.h']]] ]; diff --git a/docs/html/search/enums_1.js b/docs/html/search/enums_1.js index 0fcac70..17714f6 100644 --- a/docs/html/search/enums_1.js +++ b/docs/html/search/enums_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['tooltype_423',['Tooltype',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8f',1,'IntelliTool']]] + ['tooltype_437',['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 43f6fe3..40de1b3 100644 --- a/docs/html/search/enumvalues_0.js +++ b/docs/html/search/enumvalues_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['circle_424',['CIRCLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa0af50777920c1401ab975cab64c4d491',1,'IntelliTool']]] + ['circle_438',['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 7a79a5b..14eada2 100644 --- a/docs/html/search/enumvalues_1.js +++ b/docs/html/search/enumvalues_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['floodfill_425',['FLOODFILL',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa526904ea67131c56718f9882518b5d93',1,'IntelliTool']]] + ['floodfill_439',['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 8254d01..d737ec3 100644 --- a/docs/html/search/enumvalues_2.js +++ b/docs/html/search/enumvalues_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['line_426',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] + ['gradient_440',['GRADIENT',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa90f70ea2675c36bd9b0b44a79f37a41f',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_3.js b/docs/html/search/enumvalues_3.js index 931da76..1b89798 100644 --- a/docs/html/search/enumvalues_3.js +++ b/docs/html/search/enumvalues_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['none_427',['NONE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693',1,'IntelliTool']]] + ['line_441',['LINE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa17b8ef2c330f1430e00c9de5469fc7e7',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_4.js b/docs/html/search/enumvalues_4.js index 4c9844c..ec80303 100644 --- a/docs/html/search/enumvalues_4.js +++ b/docs/html/search/enumvalues_4.js @@ -1,6 +1,4 @@ var searchData= [ - ['pen_428',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], - ['plain_429',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], - ['polygon_430',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] + ['none_442',['NONE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fab50339a10e1de285ac99d4c3990b8693',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_5.js b/docs/html/search/enumvalues_5.js index c3994d2..e6c2912 100644 --- a/docs/html/search/enumvalues_5.js +++ b/docs/html/search/enumvalues_5.js @@ -1,5 +1,6 @@ var searchData= [ - ['rasterimage_431',['RASTERIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0add5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage.h']]], - ['rectangle_432',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] + ['pen_443',['PEN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fad3fa1aa45b9fe56e1fc1b558d8ed6678',1,'IntelliTool']]], + ['plain_444',['PLAIN',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faf62eb0bf5e5c72e80983fbbac1cb70e5',1,'IntelliTool']]], + ['polygon_445',['POLYGON',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8faecdc92bf56d960b73b02ee40125758bc',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_6.js b/docs/html/search/enumvalues_6.js index 4daefac..9888fa1 100644 --- a/docs/html/search/enumvalues_6.js +++ b/docs/html/search/enumvalues_6.js @@ -1,4 +1,5 @@ var searchData= [ - ['shapedimage_433',['SHAPEDIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0ac065b60ec4cf443808263527bdc0df37',1,'IntelliImage.h']]] + ['rasterimage_446',['RASTERIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0add5823fd73c42c0154fa2abbd70283b9',1,'IntelliImage.h']]], + ['rectangle_447',['RECTANGLE',['../class_intelli_tool.html#a3fbd2584566b3cefcf3c070ae0b69d8fa8e8e58fe94ab307a826e087028a7c01a',1,'IntelliTool']]] ]; diff --git a/docs/html/search/enumvalues_7.html b/docs/html/search/enumvalues_7.html new file mode 100644 index 0000000..5d5ce7e --- /dev/null +++ b/docs/html/search/enumvalues_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
      +
      Loading...
      +
      + +
      Searching...
      +
      No Matches
      + +
      + + diff --git a/docs/html/search/enumvalues_7.js b/docs/html/search/enumvalues_7.js new file mode 100644 index 0000000..c52e40b --- /dev/null +++ b/docs/html/search/enumvalues_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['shapedimage_448',['SHAPEDIMAGE',['../_intelli_image_8h.html#a3154c405c975616503bac23f51b78fc0ac065b60ec4cf443808263527bdc0df37',1,'IntelliImage.h']]] +]; diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js index 71329b8..7a75c60 100644 --- a/docs/html/search/files_0.js +++ b/docs/html/search/files_0.js @@ -1,39 +1,41 @@ var searchData= [ - ['intellicolorpicker_2ecpp_230',['IntelliColorPicker.cpp',['../_intelli_color_picker_8cpp.html',1,'']]], - ['intellicolorpicker_2eh_231',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], - ['intellidatamanager_2ecpp_232',['IntelliDatamanager.cpp',['../_intelli_datamanager_8cpp.html',1,'']]], - ['intellidatamanager_2eh_233',['IntelliDatamanager.h',['../_intelli_datamanager_8h.html',1,'']]], - ['intelliimage_2ecpp_234',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], - ['intelliimage_2eh_235',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], - ['intelliinputdialog_2ecpp_236',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], - ['intelliinputdialog_2eh_237',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], - ['intelliphotogui_2ecpp_238',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], - ['intelliphotogui_2eh_239',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], - ['intellirasterimage_2ecpp_240',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], - ['intellirasterimage_2eh_241',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], - ['intellirendersettings_2ecpp_242',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], - ['intellirendersettings_2eh_243',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], - ['intellishapedimage_2ecpp_244',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], - ['intellishapedimage_2eh_245',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], - ['intellitool_2ecpp_246',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], - ['intellitool_2eh_247',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], - ['intellitoolcircle_2ecpp_248',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], - ['intellitoolcircle_2eh_249',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], - ['intellitoolfloodfill_2ecpp_250',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], - ['intellitoolfloodfill_2eh_251',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], - ['intellitoolline_2ecpp_252',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], - ['intellitoolline_2eh_253',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], - ['intellitoolpen_2ecpp_254',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], - ['intellitoolpen_2eh_255',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], - ['intellitoolplain_2ecpp_256',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], - ['intellitoolplain_2eh_257',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], - ['intellitoolpolygon_2ecpp_258',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], - ['intellitoolpolygon_2eh_259',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], - ['intellitoolrectangle_2ecpp_260',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], - ['intellitoolrectangle_2eh_261',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], - ['intellitoolsettings_2ecpp_262',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], - ['intellitoolsettings_2eh_263',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], - ['intellitriangulation_2ecpp_264',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], - ['intellitriangulation_2eh_265',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]] + ['intellicolorpicker_2ecpp_238',['IntelliColorPicker.cpp',['../_intelli_color_picker_8cpp.html',1,'']]], + ['intellicolorpicker_2eh_239',['IntelliColorPicker.h',['../_intelli_color_picker_8h.html',1,'']]], + ['intellidatamanager_2ecpp_240',['IntelliDatamanager.cpp',['../_intelli_datamanager_8cpp.html',1,'']]], + ['intellidatamanager_2eh_241',['IntelliDatamanager.h',['../_intelli_datamanager_8h.html',1,'']]], + ['intelliimage_2ecpp_242',['IntelliImage.cpp',['../_intelli_image_8cpp.html',1,'']]], + ['intelliimage_2eh_243',['IntelliImage.h',['../_intelli_image_8h.html',1,'']]], + ['intelliinputdialog_2ecpp_244',['IntelliInputDialog.cpp',['../_intelli_input_dialog_8cpp.html',1,'']]], + ['intelliinputdialog_2eh_245',['IntelliInputDialog.h',['../_intelli_input_dialog_8h.html',1,'']]], + ['intelliphotogui_2ecpp_246',['IntelliPhotoGui.cpp',['../_intelli_photo_gui_8cpp.html',1,'']]], + ['intelliphotogui_2eh_247',['IntelliPhotoGui.h',['../_intelli_photo_gui_8h.html',1,'']]], + ['intellirasterimage_2ecpp_248',['IntelliRasterImage.cpp',['../_intelli_raster_image_8cpp.html',1,'']]], + ['intellirasterimage_2eh_249',['IntelliRasterImage.h',['../_intelli_raster_image_8h.html',1,'']]], + ['intellirendersettings_2ecpp_250',['IntelliRenderSettings.cpp',['../_intelli_render_settings_8cpp.html',1,'']]], + ['intellirendersettings_2eh_251',['IntelliRenderSettings.h',['../_intelli_render_settings_8h.html',1,'']]], + ['intellishapedimage_2ecpp_252',['IntelliShapedImage.cpp',['../_intelli_shaped_image_8cpp.html',1,'']]], + ['intellishapedimage_2eh_253',['IntelliShapedImage.h',['../_intelli_shaped_image_8h.html',1,'']]], + ['intellitool_2ecpp_254',['IntelliTool.cpp',['../_intelli_tool_8cpp.html',1,'']]], + ['intellitool_2eh_255',['IntelliTool.h',['../_intelli_tool_8h.html',1,'']]], + ['intellitoolcircle_2ecpp_256',['IntelliToolCircle.cpp',['../_intelli_tool_circle_8cpp.html',1,'']]], + ['intellitoolcircle_2eh_257',['IntelliToolCircle.h',['../_intelli_tool_circle_8h.html',1,'']]], + ['intellitoolfloodfill_2ecpp_258',['IntelliToolFloodFill.cpp',['../_intelli_tool_flood_fill_8cpp.html',1,'']]], + ['intellitoolfloodfill_2eh_259',['IntelliToolFloodFill.h',['../_intelli_tool_flood_fill_8h.html',1,'']]], + ['intellitoolgradient_2ecpp_260',['IntelliToolGradient.cpp',['../_intelli_tool_gradient_8cpp.html',1,'']]], + ['intellitoolgradient_2eh_261',['IntelliToolGradient.h',['../_intelli_tool_gradient_8h.html',1,'']]], + ['intellitoolline_2ecpp_262',['IntelliToolLine.cpp',['../_intelli_tool_line_8cpp.html',1,'']]], + ['intellitoolline_2eh_263',['IntelliToolLine.h',['../_intelli_tool_line_8h.html',1,'']]], + ['intellitoolpen_2ecpp_264',['IntelliToolPen.cpp',['../_intelli_tool_pen_8cpp.html',1,'']]], + ['intellitoolpen_2eh_265',['IntelliToolPen.h',['../_intelli_tool_pen_8h.html',1,'']]], + ['intellitoolplain_2ecpp_266',['IntelliToolPlain.cpp',['../_intelli_tool_plain_8cpp.html',1,'']]], + ['intellitoolplain_2eh_267',['IntelliToolPlain.h',['../_intelli_tool_plain_8h.html',1,'']]], + ['intellitoolpolygon_2ecpp_268',['IntelliToolPolygon.cpp',['../_intelli_tool_polygon_8cpp.html',1,'']]], + ['intellitoolpolygon_2eh_269',['IntelliToolPolygon.h',['../_intelli_tool_polygon_8h.html',1,'']]], + ['intellitoolrectangle_2ecpp_270',['IntelliToolRectangle.cpp',['../_intelli_tool_rectangle_8cpp.html',1,'']]], + ['intellitoolrectangle_2eh_271',['IntelliToolRectangle.h',['../_intelli_tool_rectangle_8h.html',1,'']]], + ['intellitoolsettings_2ecpp_272',['IntelliToolsettings.cpp',['../_intelli_toolsettings_8cpp.html',1,'']]], + ['intellitoolsettings_2eh_273',['IntelliToolsettings.h',['../_intelli_toolsettings_8h.html',1,'']]], + ['intellitriangulation_2ecpp_274',['IntelliTriangulation.cpp',['../_intelli_triangulation_8cpp.html',1,'']]], + ['intellitriangulation_2eh_275',['IntelliTriangulation.h',['../_intelli_triangulation_8h.html',1,'']]] ]; diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js index 31e051b..7fd2c39 100644 --- a/docs/html/search/files_1.js +++ b/docs/html/search/files_1.js @@ -1,5 +1,5 @@ var searchData= [ - ['main_2ecpp_266',['main.cpp',['../main_8cpp.html',1,'']]], - ['mainunittest_2ecpp_267',['mainUnitTest.cpp',['../main_unit_test_8cpp.html',1,'']]] + ['main_2ecpp_276',['main.cpp',['../main_8cpp.html',1,'']]], + ['mainunittest_2ecpp_277',['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 c7a198e..6cf5345 100644 --- a/docs/html/search/files_2.js +++ b/docs/html/search/files_2.js @@ -1,5 +1,5 @@ var searchData= [ - ['paintingarea_2ecpp_268',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], - ['paintingarea_2eh_269',['PaintingArea.h',['../_painting_area_8h.html',1,'']]] + ['paintingarea_2ecpp_278',['PaintingArea.cpp',['../_painting_area_8cpp.html',1,'']]], + ['paintingarea_2eh_279',['PaintingArea.h',['../_painting_area_8h.html',1,'']]] ]; diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js index dd72fba..0acfd2d 100644 --- a/docs/html/search/files_3.js +++ b/docs/html/search/files_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['tst_5funittest_2ecpp_270',['tst_unittest.cpp',['../tst__unittest_8cpp.html',1,'']]] + ['tst_5funittest_2ecpp_280',['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 d680e26..a7c6fbc 100644 --- a/docs/html/search/functions_0.js +++ b/docs/html/search/functions_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['addlayer_271',['addLayer',['../class_painting_area.html#abd5e3e4d3f2f026383d0a275dc55cbbd',1,'PaintingArea']]], - ['addlayerat_272',['addLayerAt',['../class_painting_area.html#a1274e60a912d2f1dfabcdd1b767fb029',1,'PaintingArea']]] + ['addlayer_281',['addLayer',['../class_painting_area.html#abd5e3e4d3f2f026383d0a275dc55cbbd',1,'PaintingArea']]], + ['addlayerat_282',['addLayerAt',['../class_painting_area.html#a1274e60a912d2f1dfabcdd1b767fb029',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js index dad549a..4150c2e 100644 --- a/docs/html/search/functions_1.js +++ b/docs/html/search/functions_1.js @@ -1,17 +1,18 @@ var searchData= [ - ['calculatetriangles_273',['calculateTriangles',['../namespace_intelli_triangulation.html#acdaf1ed598e868b25e9e06d580da32e5',1,'IntelliTriangulation']]], - ['calculatevisiblity_274',['calculateVisiblity',['../class_intelli_image.html#aebbced93f4744fad81b7f141b21f4ab2',1,'IntelliImage::calculateVisiblity()'],['../class_intelli_raster_image.html#a87cf2d360c129d64a5db0db85818eb60',1,'IntelliRasterImage::calculateVisiblity()']]], - ['closeevent_275',['closeEvent',['../class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13',1,'IntelliPhotoGui']]], - ['colorpickersetfirstcolor_276',['colorPickerSetFirstColor',['../class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df',1,'PaintingArea']]], - ['colorpickersetsecondcolor_277',['colorPickerSetSecondColor',['../class_painting_area.html#ae261acaaa346610dfed489dbac17e789',1,'PaintingArea']]], - ['colorpickerswapcolors_278',['colorPickerSwapColors',['../class_painting_area.html#acff4563d006fda491469bd41778d07eb',1,'PaintingArea']]], - ['copy_279',['copy',['../class_intelli_raster_image.html#a6c27fa0d323a1a81d0c4c93c9161f81e',1,'IntelliRasterImage::copy()'],['../class_intelli_shaped_image.html#aee38adc7db9e3fd40e083247219bef05',1,'IntelliShapedImage::copy()']]], - ['createcircletool_280',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], - ['createfloodfilltool_281',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], - ['createlinetool_282',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], - ['createpentool_283',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], - ['createplaintool_284',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], - ['createpolygontool_285',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], - ['createrectangletool_286',['createRectangleTool',['../class_painting_area.html#a5b04ce62ce024e307f54e0281f7ae4bd',1,'PaintingArea']]] + ['calculatetriangles_283',['calculateTriangles',['../namespace_intelli_triangulation.html#acdaf1ed598e868b25e9e06d580da32e5',1,'IntelliTriangulation']]], + ['calculatevisiblity_284',['calculateVisiblity',['../class_intelli_image.html#aebbced93f4744fad81b7f141b21f4ab2',1,'IntelliImage::calculateVisiblity()'],['../class_intelli_raster_image.html#a87cf2d360c129d64a5db0db85818eb60',1,'IntelliRasterImage::calculateVisiblity()']]], + ['closeevent_285',['closeEvent',['../class_intelli_photo_gui.html#a2cf48070236ae8b35245e7f30482ef13',1,'IntelliPhotoGui']]], + ['colorpickersetfirstcolor_286',['colorPickerSetFirstColor',['../class_painting_area.html#a4735d4cf1dc58a9096d904e74c39c4df',1,'PaintingArea']]], + ['colorpickersetsecondcolor_287',['colorPickerSetSecondColor',['../class_painting_area.html#ae261acaaa346610dfed489dbac17e789',1,'PaintingArea']]], + ['colorpickerswapcolors_288',['colorPickerSwapColors',['../class_painting_area.html#acff4563d006fda491469bd41778d07eb',1,'PaintingArea']]], + ['copy_289',['copy',['../class_intelli_raster_image.html#a6c27fa0d323a1a81d0c4c93c9161f81e',1,'IntelliRasterImage::copy()'],['../class_intelli_shaped_image.html#aee38adc7db9e3fd40e083247219bef05',1,'IntelliShapedImage::copy()']]], + ['createcircletool_290',['createCircleTool',['../class_painting_area.html#a2d9f4b3585f7dd1acb11f432ca503466',1,'PaintingArea']]], + ['createfloodfilltool_291',['createFloodFillTool',['../class_painting_area.html#a0b22e18069b524f3e75857d203baf256',1,'PaintingArea']]], + ['creategradienttool_292',['createGradientTool',['../class_painting_area.html#ad8636e986fdcdd3146f9f72d3cdb1831',1,'PaintingArea']]], + ['createlinetool_293',['createLineTool',['../class_painting_area.html#a240c33a7875addac86080cdfb0db036a',1,'PaintingArea']]], + ['createpentool_294',['createPenTool',['../class_painting_area.html#a96c6248e343e44b61cf2625cb6d21353',1,'PaintingArea']]], + ['createplaintool_295',['createPlainTool',['../class_painting_area.html#a3de83443d2d5cf460ff48d0602070938',1,'PaintingArea']]], + ['createpolygontool_296',['createPolygonTool',['../class_painting_area.html#a13c2f94644bea9c2d3123d0b7898f34b',1,'PaintingArea']]], + ['createrectangletool_297',['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 53b209e..fd659e3 100644 --- a/docs/html/search/functions_2.js +++ b/docs/html/search/functions_2.js @@ -1,9 +1,10 @@ var searchData= [ - ['deletealllayers_287',['deleteAllLayers',['../class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491',1,'PaintingArea']]], - ['deletelayer_288',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], - ['drawline_289',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], - ['drawpixel_290',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], - ['drawplain_291',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], - ['drawpoint_292',['drawPoint',['../class_intelli_image.html#a2e787f1b333b59401643936ebb3dcfe1',1,'IntelliImage']]] + ['deletealllayers_298',['deleteAllLayers',['../class_painting_area.html#af4701dee7ce672d91ed1e80cdd1e7491',1,'PaintingArea']]], + ['deletelayer_299',['deleteLayer',['../class_painting_area.html#a9b7dc8b8dc0b301ce58206aa76fb1630',1,'PaintingArea']]], + ['drawline_300',['drawLine',['../class_intelli_image.html#af8eddbd9aa54c8d37590d1d4bf8dce31',1,'IntelliImage']]], + ['drawpixel_301',['drawPixel',['../class_intelli_image.html#af3c859f5c409e37051edfd9e9fbca056',1,'IntelliImage']]], + ['drawpixelontoactive_302',['drawPixelOntoActive',['../class_painting_area.html#af1b7be20235139e4909086696ea74cf7',1,'PaintingArea']]], + ['drawplain_303',['drawPlain',['../class_intelli_image.html#a6be622810dc2bc756054bb5769becb06',1,'IntelliImage']]], + ['drawpoint_304',['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 3c61aa3..e0b420c 100644 --- a/docs/html/search/functions_3.js +++ b/docs/html/search/functions_3.js @@ -1,30 +1,30 @@ var searchData= [ - ['getdeepcopy_293',['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_294',['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_295',['getFirstColor',['../class_intelli_color_picker.html#aeb08029a0c946ed0402c9c11a91965b1',1,'IntelliColorPicker']]], - ['getheight_296',['getHeight',['../class_intelli_image.html#a895bbe107ad2958aca6eebf9af3eb7f1',1,'IntelliImage']]], - ['getheightofactive_297',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], - ['getimagedata_298',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], - ['getimagedataofactivelayer_299',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], - ['getimageofactivelayer_300',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], - ['getinneralpha_301',['getInnerAlpha',['../class_intelli_toolsettings.html#a96d267baa782a32784dbeb1b7cd68cc4',1,'IntelliToolsettings']]], - ['getint_302',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], - ['getisdrawing_303',['getIsDrawing',['../class_intelli_tool.html#af90f0965efbc5c25126691e998f39ca3',1,'IntelliTool']]], - ['getlayerbundle_304',['getLayerBundle',['../class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba',1,'PaintingArea']]], - ['getlinewidth_305',['getLineWidth',['../class_intelli_toolsettings.html#abb3ee5a9c8a379167060799d275e65c3',1,'IntelliToolsettings']]], - ['getmaxheight_306',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], - ['getmaxwidth_307',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], - ['getnumberofactivelayer_308',['getNumberOfActiveLayer',['../class_painting_area.html#a24280454ebb80db7feba2fd621513353',1,'PaintingArea']]], - ['getpixelcolor_309',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], - ['getpolygon_310',['getPolygon',['../class_intelli_raster_image.html#af19828176178cc1dece5160d726d946e',1,'IntelliRasterImage::getPolygon()'],['../class_intelli_shaped_image.html#aeff4b2331f4244f170c70526d8ca819b',1,'IntelliShapedImage::getPolygon()']]], - ['getpolygondata_311',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], - ['getpolygondataofreallayer_312',['getPolygonDataOfRealLayer',['../class_painting_area.html#a7ae21fd031ee1c04f92e042e86be0a90',1,'PaintingArea']]], - ['getrendersettings_313',['getRenderSettings',['../class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097',1,'PaintingArea']]], - ['getsecondcolor_314',['getSecondColor',['../class_intelli_color_picker.html#ab41abe8fb7e184db2c33e792f09792e0',1,'IntelliColorPicker']]], - ['gettooltype_315',['getTooltype',['../class_intelli_tool.html#adf5c06ad2b2c0d745fb68cf80e7e5694',1,'IntelliTool']]], - ['gettypeofimage_316',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], - ['gettypeofimagereallayer_317',['getTypeOfImageRealLayer',['../class_painting_area.html#a91abd5e92acc5226a21ffc9e0ea36235',1,'PaintingArea']]], - ['getwidth_318',['getWidth',['../class_intelli_image.html#aea7b5f173968b330ef034bedb9426520',1,'IntelliImage']]], - ['getwidthofactive_319',['getWidthOfActive',['../class_painting_area.html#a675ee91b26b1c58be6d833f279d81597',1,'PaintingArea']]] + ['getdeepcopy_305',['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_306',['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_307',['getFirstColor',['../class_intelli_color_picker.html#aeb08029a0c946ed0402c9c11a91965b1',1,'IntelliColorPicker']]], + ['getheight_308',['getHeight',['../class_intelli_image.html#a895bbe107ad2958aca6eebf9af3eb7f1',1,'IntelliImage']]], + ['getheightofactive_309',['getHeightOfActive',['../class_painting_area.html#ac576f58aad03b4dcd47611b6a4b9abb4',1,'PaintingArea']]], + ['getimagedata_310',['getImageData',['../class_intelli_image.html#ad66fbe380ffe0e073a8cd760f8285fe3',1,'IntelliImage']]], + ['getimagedataofactivelayer_311',['getImageDataOfActiveLayer',['../class_painting_area.html#a4f484ff3ca7ae202ab57a00f52551423',1,'PaintingArea']]], + ['getimageofactivelayer_312',['getImageOfActiveLayer',['../class_painting_area.html#acab11ad35d07e9081203d8217d2c0855',1,'PaintingArea']]], + ['getindexofactivelayer_313',['getIndexOfActiveLayer',['../class_painting_area.html#a2ea1108ae4e4be995c4df0d378c536e7',1,'PaintingArea']]], + ['getinneralpha_314',['getInnerAlpha',['../class_intelli_toolsettings.html#a96d267baa782a32784dbeb1b7cd68cc4',1,'IntelliToolsettings']]], + ['getint_315',['getInt',['../class_intelli_input_dialog.html#a480ac2f5b8f7b9bc1cd7b30df84c2a62',1,'IntelliInputDialog']]], + ['getisdrawing_316',['getIsDrawing',['../class_intelli_tool.html#af90f0965efbc5c25126691e998f39ca3',1,'IntelliTool']]], + ['getlayerbundle_317',['getLayerBundle',['../class_painting_area.html#a1452c4bf2ebf188d8af019a862f3d8ba',1,'PaintingArea']]], + ['getlinewidth_318',['getLineWidth',['../class_intelli_toolsettings.html#abb3ee5a9c8a379167060799d275e65c3',1,'IntelliToolsettings']]], + ['getmaxheight_319',['getMaxHeight',['../class_painting_area.html#aa811d142df9239ae248679bd70ad6da7',1,'PaintingArea']]], + ['getmaxwidth_320',['getMaxWidth',['../class_painting_area.html#aeb082c1cda3edb6b68d8ee45cf4822f8',1,'PaintingArea']]], + ['getpixelcolor_321',['getPixelColor',['../class_intelli_image.html#a4576ebb6d863321c816293d7b7f9fd3f',1,'IntelliImage']]], + ['getpolygon_322',['getPolygon',['../class_intelli_raster_image.html#af19828176178cc1dece5160d726d946e',1,'IntelliRasterImage::getPolygon()'],['../class_intelli_shaped_image.html#aeff4b2331f4244f170c70526d8ca819b',1,'IntelliShapedImage::getPolygon()']]], + ['getpolygondata_323',['getPolygonData',['../class_intelli_image.html#aaf9f3e8db8666850024bee9aad9966ba',1,'IntelliImage::getPolygonData()'],['../class_intelli_shaped_image.html#ae4518c7f5a105cc4f33fabb60c794a93',1,'IntelliShapedImage::getPolygonData()']]], + ['getpolygondataofactivelayer_324',['getPolygonDataOfActiveLayer',['../class_painting_area.html#ae6eb9b269cdee993dbabd066e4679576',1,'PaintingArea']]], + ['getrendersettings_325',['getRenderSettings',['../class_painting_area.html#ad631e87a1e7fe2b60f546b0f34995097',1,'PaintingArea']]], + ['getsecondcolor_326',['getSecondColor',['../class_intelli_color_picker.html#ab41abe8fb7e184db2c33e792f09792e0',1,'IntelliColorPicker']]], + ['gettooltype_327',['getTooltype',['../class_intelli_tool.html#adf5c06ad2b2c0d745fb68cf80e7e5694',1,'IntelliTool']]], + ['gettypeofimage_328',['getTypeOfImage',['../class_intelli_image.html#af6b09c8d1d6b54a7e8a4e7286f3e503f',1,'IntelliImage']]], + ['gettypeofimageactivelayer_329',['getTypeOfImageActiveLayer',['../class_painting_area.html#a63cfff9cd4bc04e0b62d4c76cbf87395',1,'PaintingArea']]], + ['getwidth_330',['getWidth',['../class_intelli_image.html#aea7b5f173968b330ef034bedb9426520',1,'IntelliImage']]], + ['getwidthofactive_331',['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 6d2300b..9280718 100644 --- a/docs/html/search/functions_4.js +++ b/docs/html/search/functions_4.js @@ -1,5 +1,6 @@ var searchData= [ - ['historygoback_320',['historyGoBack',['../class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4',1,'PaintingArea']]], - ['historygoforward_321',['historyGoForward',['../class_painting_area.html#aecc72f0f5971244205194934ff721546',1,'PaintingArea']]] + ['historyadd_332',['historyadd',['../class_painting_area.html#acf20e3f5f74a239e6f9b7e2e1200295f',1,'PaintingArea']]], + ['historygoback_333',['historyGoBack',['../class_painting_area.html#a6a6083ca9fece2b185b592f941a91aa4',1,'PaintingArea']]], + ['historygoforward_334',['historyGoForward',['../class_painting_area.html#aecc72f0f5971244205194934ff721546',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js index b6fb2de..25a65f1 100644 --- a/docs/html/search/functions_5.js +++ b/docs/html/search/functions_5.js @@ -1,23 +1,24 @@ var searchData= [ - ['intellicolorpicker_322',['IntelliColorPicker',['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker']]], - ['intelliimage_323',['IntelliImage',['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage']]], - ['intelliinputdialog_324',['IntelliInputDialog',['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog']]], - ['intelliphotogui_325',['IntelliPhotoGui',['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui']]], - ['intellirasterimage_326',['IntelliRasterImage',['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage']]], - ['intellirendersettings_327',['IntelliRenderSettings',['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings']]], - ['intellishapedimage_328',['IntelliShapedImage',['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage']]], - ['intellitool_329',['IntelliTool',['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool']]], - ['intellitoolcircle_330',['IntelliToolCircle',['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle']]], - ['intellitoolfloodfill_331',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill']]], - ['intellitoolline_332',['IntelliToolLine',['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine']]], - ['intellitoolpen_333',['IntelliToolPen',['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen']]], - ['intellitoolplaintool_334',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool']]], - ['intellitoolpolygon_335',['IntelliToolPolygon',['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon']]], - ['intellitoolrectangle_336',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], - ['intellitoolsettings_337',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], - ['isfastrenderering_338',['isFastRenderering',['../class_intelli_render_settings.html#a38fd592c4948d2e47b95bb6fabc34073',1,'IntelliRenderSettings']]], - ['isfastrendering_339',['isFastRendering',['../class_intelli_image.html#a47941bed3060d8df5f2edce8c7f046cb',1,'IntelliImage']]], - ['isinpolygon_340',['isInPolygon',['../namespace_intelli_triangulation.html#ac276696f29d141ed34614c1c3b1c040f',1,'IntelliTriangulation']]], - ['isintriangle_341',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] + ['intellicolorpicker_335',['IntelliColorPicker',['../class_intelli_color_picker.html#a0d1247bdd87add1396ea5d9acaad79ae',1,'IntelliColorPicker']]], + ['intelliimage_336',['IntelliImage',['../class_intelli_image.html#a2c6632ff35ee0a7094a8a289eb3a8652',1,'IntelliImage']]], + ['intelliinputdialog_337',['IntelliInputDialog',['../class_intelli_input_dialog.html#aa276ec605b08b19d70c54654cc606cc5',1,'IntelliInputDialog']]], + ['intelliphotogui_338',['IntelliPhotoGui',['../class_intelli_photo_gui.html#ad2aaec3c1517a9aaa461b54e341b97e0',1,'IntelliPhotoGui']]], + ['intellirasterimage_339',['IntelliRasterImage',['../class_intelli_raster_image.html#ae779b571372296f1922af818ba003413',1,'IntelliRasterImage']]], + ['intellirendersettings_340',['IntelliRenderSettings',['../class_intelli_render_settings.html#a4a01de6e5e8e516a7eae51d6f1f66529',1,'IntelliRenderSettings']]], + ['intellishapedimage_341',['IntelliShapedImage',['../class_intelli_shaped_image.html#ae2e612a1fa52d7f878b34a7a7022d8e9',1,'IntelliShapedImage']]], + ['intellitool_342',['IntelliTool',['../class_intelli_tool.html#a08ef094271ce6248b42f888472463526',1,'IntelliTool']]], + ['intellitoolcircle_343',['IntelliToolCircle',['../class_intelli_tool_circle.html#a835327842fb71cb6a505e260ac5b69c8',1,'IntelliToolCircle']]], + ['intellitoolfloodfill_344',['IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a0b283b1b0135ff909a7199be9da9c076',1,'IntelliToolFloodFill']]], + ['intellitoolgradient_345',['IntelliToolGradient',['../class_intelli_tool_gradient.html#ad29617596a4dcf09aa8bcc633d627203',1,'IntelliToolGradient']]], + ['intellitoolline_346',['IntelliToolLine',['../class_intelli_tool_line.html#a111e83e0f0fec7d4ff773ba9f235e4dc',1,'IntelliToolLine']]], + ['intellitoolpen_347',['IntelliToolPen',['../class_intelli_tool_pen.html#a9f885143d6bb7adda3dcd3707d59e14d',1,'IntelliToolPen']]], + ['intellitoolplaintool_348',['IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a816bcd6aea046994420969bed8b139d2',1,'IntelliToolPlainTool']]], + ['intellitoolpolygon_349',['IntelliToolPolygon',['../class_intelli_tool_polygon.html#a63b8c7514a87d4608533fbb557ee0db5',1,'IntelliToolPolygon']]], + ['intellitoolrectangle_350',['IntelliToolRectangle',['../class_intelli_tool_rectangle.html#ada06457247d5b173888a9a520b31ec5c',1,'IntelliToolRectangle']]], + ['intellitoolsettings_351',['IntelliToolsettings',['../class_intelli_toolsettings.html#a5560602964ab95380967d63ab7ec6e69',1,'IntelliToolsettings']]], + ['isfastrenderering_352',['isFastRenderering',['../class_intelli_render_settings.html#a38fd592c4948d2e47b95bb6fabc34073',1,'IntelliRenderSettings']]], + ['isfastrendering_353',['isFastRendering',['../class_intelli_image.html#a47941bed3060d8df5f2edce8c7f046cb',1,'IntelliImage']]], + ['isinpolygon_354',['isInPolygon',['../namespace_intelli_triangulation.html#ac276696f29d141ed34614c1c3b1c040f',1,'IntelliTriangulation']]], + ['isintriangle_355',['isInTriangle',['../namespace_intelli_triangulation.html#ac150fee67fd41a451bd2592f10e00197',1,'IntelliTriangulation']]] ]; diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js index 5af1a37..44d490d 100644 --- a/docs/html/search/functions_6.js +++ b/docs/html/search/functions_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['layerobject_342',['LayerObject',['../struct_layer_object.html#a0c4519287423c097acb2a0764913f7d0',1,'LayerObject::LayerObject()'],['../struct_layer_object.html#a2b8ffdba5ec6fb69eb6f59e97aced98a',1,'LayerObject::LayerObject(const LayerObject &layer)']]], - ['loadimage_343',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]], - ['loadproject_344',['loadProject',['../namespace_intelli_datamanager.html#a41920e07aa9e0b2756323779f7fe8de2',1,'IntelliDatamanager']]] + ['layerobject_356',['LayerObject',['../struct_layer_object.html#a0c4519287423c097acb2a0764913f7d0',1,'LayerObject::LayerObject()'],['../struct_layer_object.html#a2b8ffdba5ec6fb69eb6f59e97aced98a',1,'LayerObject::LayerObject(const LayerObject &layer)']]], + ['loadimage_357',['loadImage',['../class_intelli_image.html#ae231800aba38c96074bbe9bb6e341d4e',1,'IntelliImage']]], + ['loadproject_358',['loadProject',['../namespace_intelli_datamanager.html#a41920e07aa9e0b2756323779f7fe8de2',1,'IntelliDatamanager']]] ]; diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js index 26c0af1..7243a62 100644 --- a/docs/html/search/functions_7.js +++ b/docs/html/search/functions_7.js @@ -1,9 +1,9 @@ var searchData= [ - ['main_345',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], - ['mousemoveevent_346',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], - ['mousepressevent_347',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], - ['mousereleaseevent_348',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], - ['moveactivelayer_349',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], - ['movepositionactive_350',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] + ['main_359',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['mousemoveevent_360',['mouseMoveEvent',['../class_painting_area.html#aa22e274b6094a9619f196cd7b49526b5',1,'PaintingArea']]], + ['mousepressevent_361',['mousePressEvent',['../class_painting_area.html#abfe445f8d9b70ae42bfeda874127dd15',1,'PaintingArea']]], + ['mousereleaseevent_362',['mouseReleaseEvent',['../class_painting_area.html#a35b5df914acb608cc29717659793359c',1,'PaintingArea']]], + ['moveactivelayer_363',['moveActiveLayer',['../class_painting_area.html#ae05f6893fb44bfcb34018573a609cd1a',1,'PaintingArea']]], + ['movepositionactive_364',['movePositionActive',['../class_painting_area.html#ac6d089f4357b22d9a9906fd4771de3e7',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js index 7880a8f..1c10ddd 100644 --- a/docs/html/search/functions_8.js +++ b/docs/html/search/functions_8.js @@ -1,10 +1,10 @@ var searchData= [ - ['onmouseleftpressed_351',['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_352',['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_353',['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_354',['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_355',['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_356',['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_357',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] + ['onmouseleftpressed_365',['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_gradient.html#a47700908dab413203d06d64175a12cc1',1,'IntelliToolGradient::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_366',['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_gradient.html#a6bbe09b64d8cd69e5ff64a3344725b11',1,'IntelliToolGradient::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_367',['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_gradient.html#aff3ccbecb7a33514765fdb44c7ce9e4e',1,'IntelliToolGradient::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_368',['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_gradient.html#aed5ad1f718d53034d944ff8f1e8f9f36',1,'IntelliToolGradient::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_369',['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_gradient.html#a04315a520c97541d76e7723a07e0a834',1,'IntelliToolGradient::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_370',['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_gradient.html#a11f77ac474b697ebb6bc185560437f6a',1,'IntelliToolGradient::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_371',['open',['../class_painting_area.html#a88c7e759aa8375a56129791645f46ea5',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js index 0eb1a73..8286b76 100644 --- a/docs/html/search/functions_9.js +++ b/docs/html/search/functions_9.js @@ -1,5 +1,5 @@ var searchData= [ - ['paintevent_358',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], - ['paintingarea_359',['PaintingArea',['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea']]] + ['paintevent_372',['paintEvent',['../class_painting_area.html#a4a8138b9508ee4ec87a7fca9160368a7',1,'PaintingArea']]], + ['paintingarea_373',['PaintingArea',['../class_painting_area.html#a4fa0ec23e78cc59f28c823584c721460',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js index 001058a..f3ff82c 100644 --- a/docs/html/search/functions_a.js +++ b/docs/html/search/functions_a.js @@ -1,4 +1,4 @@ var searchData= [ - ['resizeimage_360',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] + ['resizeimage_374',['resizeImage',['../class_intelli_image.html#a177403ab9585d4ba31984a644c54d310',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js index 5ceca88..f512a67 100644 --- a/docs/html/search/functions_b.js +++ b/docs/html/search/functions_b.js @@ -1,25 +1,24 @@ var searchData= [ - ['save_361',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], - ['saveproject_362',['saveProject',['../namespace_intelli_datamanager.html#ac02f6f47ff8785ad9d49588baaca3d54',1,'IntelliDatamanager']]], - ['setfastrendering_363',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], - ['setfirstcolor_364',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], - ['setimagedata_365',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], - ['setinneralpha_366',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], - ['setlayeractive_367',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], - ['setlayeralpha_368',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], - ['setlayerdimensions_369',['setLayerDimensions',['../class_painting_area.html#a2444acb9a61038fbe0206498d0cae011',1,'PaintingArea']]], - ['setlinewidth_370',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], - ['setpixeltoactive_371',['setPixelToActive',['../class_painting_area.html#a6bd7eac7e2080b64336e58d0ecf93c71',1,'PaintingArea']]], - ['setpolygon_372',['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()']]], - ['setpolygondatatoactive_373',['setPolygonDataToActive',['../class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577',1,'PaintingArea']]], - ['setrendersettings_374',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], - ['setsecondcolor_375',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], - ['settoolwidth_376',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], - ['sign_377',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], - ['slotactivatelayer_378',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], - ['slotcloseevent_379',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], - ['slotdeleteactivelayer_380',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], - ['sloteingabe_381',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], - ['swapcolors_382',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] + ['save_375',['save',['../class_painting_area.html#aa2463d4f403224086acab02903ae407e',1,'PaintingArea']]], + ['saveproject_376',['saveProject',['../namespace_intelli_datamanager.html#ac02f6f47ff8785ad9d49588baaca3d54',1,'IntelliDatamanager']]], + ['setcanvasdimensions_377',['setCanvasDimensions',['../class_painting_area.html#a3bfc63de27c54f3edf9feb3af538343c',1,'PaintingArea']]], + ['setfastrendering_378',['setFastRendering',['../class_intelli_render_settings.html#a5ffb878b77e5d448ffe4eb03a8397ac2',1,'IntelliRenderSettings']]], + ['setfirstcolor_379',['setFirstColor',['../class_intelli_color_picker.html#a7e2ddbbbfbed383f06b24e5bf6b27ae8',1,'IntelliColorPicker']]], + ['setimagedata_380',['setImageData',['../class_intelli_image.html#ab09c64e7559f3db32ca3b20ba6339268',1,'IntelliImage']]], + ['setinneralpha_381',['setInnerAlpha',['../class_intelli_toolsettings.html#a9a61f3de61efeba2287f8b32941f4271',1,'IntelliToolsettings']]], + ['setlayeractive_382',['setLayerActive',['../class_painting_area.html#a79eb059829f27e8cdb3a54c5cd3d12c9',1,'PaintingArea']]], + ['setlayeralpha_383',['setLayerAlpha',['../class_painting_area.html#a6c7e0865e684ae1089ee283b4399d055',1,'PaintingArea']]], + ['setlinewidth_384',['setLineWidth',['../class_intelli_toolsettings.html#a73fa94c85c6c2fdc1a33975a33304a6f',1,'IntelliToolsettings']]], + ['setpolygon_385',['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()']]], + ['setpolygondatatoactive_386',['setPolygonDataToActive',['../class_painting_area.html#aac7d7bca37e0d7c7d077b65224795577',1,'PaintingArea']]], + ['setrendersettings_387',['setRenderSettings',['../class_painting_area.html#a63be0831e5b6ceb8cc622d83aa28f0bd',1,'PaintingArea']]], + ['setsecondcolor_388',['setSecondColor',['../class_intelli_color_picker.html#a86bf4a940e4a0e465e30cbdf28748931',1,'IntelliColorPicker']]], + ['settoolwidth_389',['setToolWidth',['../class_intelli_photo_gui.html#a343f8ebf5d27b7242208747de6c92497',1,'IntelliPhotoGui']]], + ['sign_390',['sign',['../namespace_intelli_triangulation.html#af9af549a7faff35a74c1265b290ea0ca',1,'IntelliTriangulation']]], + ['slotactivatelayer_391',['slotActivateLayer',['../class_painting_area.html#a71ac281e0de263208d4a3b9de74258ec',1,'PaintingArea']]], + ['slotcloseevent_392',['slotCloseEvent',['../class_intelli_input_dialog.html#ae59e68446caab323945ea725f69e89b0',1,'IntelliInputDialog']]], + ['slotdeleteactivelayer_393',['slotDeleteActiveLayer',['../class_painting_area.html#a1ff0b9c1227531943c9cec2c546fae5e',1,'PaintingArea']]], + ['sloteingabe_394',['slotEingabe',['../class_intelli_input_dialog.html#a23f837147e6aab3d8e0aff9d0f7012bd',1,'IntelliInputDialog']]], + ['swapcolors_395',['swapColors',['../class_intelli_color_picker.html#aec499265ae28ce1b54be88222e74292e',1,'IntelliColorPicker']]] ]; diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js index 117acc9..53e4779 100644 --- a/docs/html/search/functions_c.js +++ b/docs/html/search/functions_c.js @@ -1,6 +1,6 @@ var searchData= [ - ['unittest_383',['UnitTest',['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], - ['updategui_384',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], - ['updaterenderersetting_385',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] + ['unittest_396',['UnitTest',['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()'],['../class_unit_test.html#a67ddaff817b55a624741d32550052f4b',1,'UnitTest::UnitTest()']]], + ['updategui_397',['UpdateGui',['../class_intelli_photo_gui.html#a1dbef8d4688227aa9455aea52db00bf4',1,'IntelliPhotoGui']]], + ['updaterenderersetting_398',['updateRendererSetting',['../class_intelli_image.html#ae4dbaefabce4ec5bec37f5b95e2f62e2',1,'IntelliImage']]] ]; diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js index 1ed7642..75d60d9 100644 --- a/docs/html/search/functions_d.js +++ b/docs/html/search/functions_d.js @@ -1,4 +1,4 @@ var searchData= [ - ['wheelevent_386',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] + ['wheelevent_399',['wheelEvent',['../class_painting_area.html#a632848d99f44d33d7da2618fbc6775a4',1,'PaintingArea']]] ]; diff --git a/docs/html/search/functions_e.js b/docs/html/search/functions_e.js index e27cd95..c1ffa0c 100644 --- a/docs/html/search/functions_e.js +++ b/docs/html/search/functions_e.js @@ -1,18 +1,19 @@ var searchData= [ - ['_7eintellicolorpicker_387',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], - ['_7eintelliimage_388',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], - ['_7eintellirasterimage_389',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], - ['_7eintellishapedimage_390',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], - ['_7eintellitool_391',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], - ['_7eintellitoolcircle_392',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], - ['_7eintellitoolfloodfill_393',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], - ['_7eintellitoolline_394',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], - ['_7eintellitoolpen_395',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], - ['_7eintellitoolplaintool_396',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], - ['_7eintellitoolpolygon_397',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], - ['_7eintellitoolrectangle_398',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], - ['_7eintellitoolsettings_399',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], - ['_7epaintingarea_400',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], - ['_7eunittest_401',['~UnitTest',['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()'],['../class_unit_test.html#afa0bdd3e2ac33cd52e697406339a2edf',1,'UnitTest::~UnitTest()']]] + ['_7eintellicolorpicker_400',['~IntelliColorPicker',['../class_intelli_color_picker.html#a40b975268a1f05249e8a49dde9a862ff',1,'IntelliColorPicker']]], + ['_7eintelliimage_401',['~IntelliImage',['../class_intelli_image.html#ac398bfa9ddd3185508a1e36ee15d80cc',1,'IntelliImage']]], + ['_7eintellirasterimage_402',['~IntelliRasterImage',['../class_intelli_raster_image.html#a844a2b58c43f7e01f2ca116286371bc8',1,'IntelliRasterImage']]], + ['_7eintellishapedimage_403',['~IntelliShapedImage',['../class_intelli_shaped_image.html#a43d63d8a814852d377ee2030658fbab9',1,'IntelliShapedImage']]], + ['_7eintellitool_404',['~IntelliTool',['../class_intelli_tool.html#a57fb1b27d364c9e3696eb928b75fa9f2',1,'IntelliTool']]], + ['_7eintellitoolcircle_405',['~IntelliToolCircle',['../class_intelli_tool_circle.html#a7a03b65b95d7b5d72e6a92c95f068954',1,'IntelliToolCircle']]], + ['_7eintellitoolfloodfill_406',['~IntelliToolFloodFill',['../class_intelli_tool_flood_fill.html#a83b1bd8be0cbb32cdf61a9597ec849ba',1,'IntelliToolFloodFill']]], + ['_7eintellitoolgradient_407',['~IntelliToolGradient',['../class_intelli_tool_gradient.html#a7d5c812815872b7e394e36362358b539',1,'IntelliToolGradient']]], + ['_7eintellitoolline_408',['~IntelliToolLine',['../class_intelli_tool_line.html#acb600b0f4e9225ebce2937c2b7abb4c2',1,'IntelliToolLine']]], + ['_7eintellitoolpen_409',['~IntelliToolPen',['../class_intelli_tool_pen.html#ac77a025515d0fed6954556fe2b444818',1,'IntelliToolPen']]], + ['_7eintellitoolplaintool_410',['~IntelliToolPlainTool',['../class_intelli_tool_plain_tool.html#a91fe568be05c075814d67440472bb658',1,'IntelliToolPlainTool']]], + ['_7eintellitoolpolygon_411',['~IntelliToolPolygon',['../class_intelli_tool_polygon.html#a087cbf2254010989df6106a357471499',1,'IntelliToolPolygon']]], + ['_7eintellitoolrectangle_412',['~IntelliToolRectangle',['../class_intelli_tool_rectangle.html#a7dc1463e726a21255e6297241dc71fb1',1,'IntelliToolRectangle']]], + ['_7eintellitoolsettings_413',['~IntelliToolsettings',['../class_intelli_toolsettings.html#a927e50594a459c952d06acd34c0eff56',1,'IntelliToolsettings']]], + ['_7epaintingarea_414',['~PaintingArea',['../class_painting_area.html#aa32adc113f77031945f73e33051931e8',1,'PaintingArea']]], + ['_7eunittest_415',['~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 1eb2052..91456d0 100644 --- a/docs/html/search/namespaces_0.js +++ b/docs/html/search/namespaces_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['intellidatamanager_228',['IntelliDatamanager',['../namespace_intelli_datamanager.html',1,'']]], - ['intellitriangulation_229',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]] + ['intellidatamanager_236',['IntelliDatamanager',['../namespace_intelli_datamanager.html',1,'']]], + ['intellitriangulation_237',['IntelliTriangulation',['../namespace_intelli_triangulation.html',1,'']]] ]; diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js index d716a11..8c5d1bd 100644 --- a/docs/html/search/searchdata.js +++ b/docs/html/search/searchdata.js @@ -7,7 +7,7 @@ var indexSectionsWithContent = 4: "acdghilmoprsuw~", 5: "abcfhiptw", 6: "it", - 7: "cflnprs", + 7: "cfglnprs", 8: "p" }; diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js index 3ce4bd0..6d575f8 100644 --- a/docs/html/search/variables_0.js +++ b/docs/html/search/variables_0.js @@ -1,8 +1,8 @@ var searchData= [ - ['a_402',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], - ['activelayer_403',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], - ['activetype_404',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], - ['alpha_405',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], - ['area_406',['Area',['../class_intelli_tool.html#ab4c2698a0f9f25fb6639ec760d2d0289',1,'IntelliTool']]] + ['a_416',['A',['../struct_triangle.html#a4fe8b39e0144ebff908b7718c2f2751b',1,'Triangle']]], + ['activelayer_417',['activeLayer',['../class_intelli_tool.html#aedccdad01b2bc6ec84fad3582251ff5d',1,'IntelliTool']]], + ['activetype_418',['ActiveType',['../class_intelli_tool.html#a631388999f36013628e13b9de87a6f7b',1,'IntelliTool']]], + ['alpha_419',['alpha',['../struct_layer_object.html#a402cb1d9f20436032fe080681b80eb56',1,'LayerObject']]], + ['area_420',['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 8e4fbd8..084680f 100644 --- a/docs/html/search/variables_1.js +++ b/docs/html/search/variables_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['b_407',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] + ['b_421',['B',['../struct_triangle.html#a64fa6a90a6131f12a1a3054bf86647d7',1,'Triangle']]] ]; diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js index b29041f..81caaee 100644 --- a/docs/html/search/variables_2.js +++ b/docs/html/search/variables_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['c_408',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], - ['canvas_409',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], - ['colorpicker_410',['colorPicker',['../class_painting_area.html#a132535c4e16052c1472cf1b9f3e096ed',1,'PaintingArea::colorPicker()'],['../class_intelli_tool.html#ae2e0ac394611a361ab4ef2fe55c03fef',1,'IntelliTool::colorPicker()']]] + ['c_422',['C',['../struct_triangle.html#addb8aaab314d79f3617acca01e12872a',1,'Triangle']]], + ['canvas_423',['Canvas',['../class_intelli_tool.html#a144d469cc03584f501194529a1b53c77',1,'IntelliTool']]], + ['colorpicker_424',['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 dbb6a70..66376a9 100644 --- a/docs/html/search/variables_3.js +++ b/docs/html/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['fastrenderering_411',['fastRenderering',['../class_intelli_image.html#aa63d34c7932113d021653980ee018671',1,'IntelliImage']]] + ['fastrenderering_425',['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 e14ca07..36426b4 100644 --- a/docs/html/search/variables_4.js +++ b/docs/html/search/variables_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['height_412',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], - ['heightoffset_413',['heightOffset',['../struct_layer_object.html#a08bacdcd64a0ae0eb5376f55329954bc',1,'LayerObject']]] + ['height_426',['height',['../struct_layer_object.html#ae0003fb815e50ed587a9897988befc90',1,'LayerObject']]], + ['heightoffset_427',['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 ff08882..e269799 100644 --- a/docs/html/search/variables_5.js +++ b/docs/html/search/variables_5.js @@ -1,6 +1,6 @@ var searchData= [ - ['image_414',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], - ['imagedata_415',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], - ['isdrawing_416',['isDrawing',['../class_intelli_tool.html#a555aa8a74992327f740dd69b3bb0ccca',1,'IntelliTool']]] + ['image_428',['image',['../struct_layer_object.html#af01a139bc8edfdbb338393874e89bd83',1,'LayerObject']]], + ['imagedata_429',['imageData',['../class_intelli_image.html#a2431be82e9e85dd34b62a7f7cba053c2',1,'IntelliImage']]], + ['isdrawing_430',['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 a7ffecc..c95e56f 100644 --- a/docs/html/search/variables_6.js +++ b/docs/html/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['polygondata_417',['polygonData',['../class_intelli_shaped_image.html#a727d19ce314c0874be6b0633a3a603c8',1,'IntelliShapedImage']]] + ['polygondata_431',['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 b1d7f1e..d455425 100644 --- a/docs/html/search/variables_7.js +++ b/docs/html/search/variables_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['toolsettings_418',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], - ['typeofimage_419',['TypeOfImage',['../class_intelli_image.html#ac460f75e1fa7e44b00a65e7fddac5b80',1,'IntelliImage']]] + ['toolsettings_432',['Toolsettings',['../class_painting_area.html#abc2f798744f1dc805a651731eb1692ea',1,'PaintingArea::Toolsettings()'],['../class_intelli_tool.html#a55f6b45b416b7d790fa8bc09603bf67f',1,'IntelliTool::Toolsettings()']]], + ['typeofimage_433',['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 3dd3c0a..34c35a5 100644 --- a/docs/html/search/variables_8.js +++ b/docs/html/search/variables_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['width_420',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], - ['widthoffset_421',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] + ['width_434',['width',['../struct_layer_object.html#af261813df52ff0b0c82bfa57efeb9897',1,'LayerObject']]], + ['widthoffset_435',['widthOffset',['../struct_layer_object.html#a72b44d27c7bbb60dde14f04ec240ab96',1,'LayerObject']]] ]; diff --git a/docs/html/struct_layer_object-members.html b/docs/html/struct_layer_object-members.html index cb50987..c99aa32 100644 --- a/docs/html/struct_layer_object-members.html +++ b/docs/html/struct_layer_object-members.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/struct_layer_object.html b/docs/html/struct_layer_object.html index ab0d6bd..431bbd6 100644 --- a/docs/html/struct_layer_object.html +++ b/docs/html/struct_layer_object.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -144,7 +144,7 @@ Public Attributes
      -

      Definition at line 22 of file PaintingArea.cpp.

      +

      Definition at line 23 of file PaintingArea.cpp.

      @@ -164,7 +164,7 @@ Public Attributes
      -

      Definition at line 26 of file PaintingArea.cpp.

      +

      Definition at line 27 of file PaintingArea.cpp.

      diff --git a/docs/html/struct_triangle-members.html b/docs/html/struct_triangle-members.html index a2dd0b5..c45831a 100644 --- a/docs/html/struct_triangle-members.html +++ b/docs/html/struct_triangle-members.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/struct_triangle.html b/docs/html/struct_triangle.html index 3a29f34..8a3a68e 100644 --- a/docs/html/struct_triangle.html +++ b/docs/html/struct_triangle.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/tst__unittest_8cpp.html b/docs/html/tst__unittest_8cpp.html index 5b92983..6dd0e71 100644 --- a/docs/html/tst__unittest_8cpp.html +++ b/docs/html/tst__unittest_8cpp.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      diff --git a/docs/html/tst__unittest_8cpp_source.html b/docs/html/tst__unittest_8cpp_source.html index 442adb9..d07a191 100644 --- a/docs/html/tst__unittest_8cpp_source.html +++ b/docs/html/tst__unittest_8cpp_source.html @@ -26,7 +26,7 @@
      IntelliPhoto -  0.6 +  0.7
      @@ -1782,23 +1782,23 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
      1697 #include "tst_unittest.moc"
      -
      void createCircleTool()
      +
      void createCircleTool()
      createCircleTool creates a Circle Tool.
      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:19
      QColor getFirstColor() const
      A function to read the primary selected color.
      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:37
      -
      void createRectangleTool()
      +
      void createRectangleTool()
      createRectangleTool creates a Rectangle Tool.
      virtual void onMouseLeftPressed(int x, int y)
      A function managing the left click Pressed of a Mouse. Resetting the current draw....
      Definition: IntelliTool.cpp:30
      -
      void setLayerAlpha(int idx, int alpha)
      The setAlphaOfLayer method sets the alpha value of a specific layer.
      +
      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.
      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.
      +
      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.
      @@ -1806,14 +1806,14 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
      The IntelliShapedImage manages a Shapedimage.
      -
      void createPlainTool()
      +
      void createPlainTool()
      createPlainTool creates a Plain Tool.
      The PaintingArea class manages the methods and stores information about the current painting area,...
      Definition: PaintingArea.h:57
      -
      void createPenTool()
      +
      void createPenTool()
      createPenTool creates a Pen Tool.
      QColor getSecondColor() const
      A function to read the secondary selected color.
      The IntelliToolRectangle class represents a tool to draw a rectangle.
      -
      void createLineTool()
      +
      void createLineTool()
      createLineTool creates a Line Tool.
      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:26
      @@ -1822,11 +1822,11 @@ $(document).ready(function(){initNavTree('tst__unittest_8cpp_source.html',''); i
      void setFirstColor(QColor Color)
      A function to set the primary color.
      -
      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:223
      +
      void createPolygonTool()
      createPolygonTool creates a Polygon Tool.
      +
      void moveActiveLayer(int idx)
      The moveActiveLayer moves the active layer to a specific position in the layer stack.
      +
      IntelliColorPicker colorPicker
      colorPicker a class to manage Tool color.
      Definition: PaintingArea.h:286
      -
      void createFloodFillTool()
      +
      void createFloodFillTool()
      createFloodFillTool creates a Floodfill Tool.
      The IntelliToolFloodFill class represents a tool to flood FIll a certian area.
      diff --git a/src/GUI/IntelliInputDialog.h b/src/GUI/IntelliInputDialog.h index 9d89ca7..95c41f4 100644 --- a/src/GUI/IntelliInputDialog.h +++ b/src/GUI/IntelliInputDialog.h @@ -16,7 +16,7 @@ class IntelliInputDialog : public QDialog { Q_OBJECT public: - /*! +/*! * \brief IntelliInputDialog is the baisc constructor to for the InputDialog * \param Title - Title of the Input Dialog. * \param Label - A Label for the Iput Dialog, to show further information. diff --git a/src/GUI/IntelliPhotoGui.cpp b/src/GUI/IntelliPhotoGui.cpp index 08f53bd..fd1936d 100644 --- a/src/GUI/IntelliPhotoGui.cpp +++ b/src/GUI/IntelliPhotoGui.cpp @@ -105,7 +105,7 @@ void IntelliPhotoGui::slotCreateNewRasterLayer(){ // Create New Layer if (ok1&&ok2) { paintingArea->addLayer(width,height,0,0,255,ImageType::RASTERIMAGE); - paintingArea->historyadd(); + paintingArea->historyadd(); UpdateGui(); } } @@ -125,7 +125,7 @@ void IntelliPhotoGui::slotCreateNewShapedLayer(){ // Create New Layer if (ok1&&ok2) { paintingArea->addLayer(width, height, 0, 0,255, ImageType::SHAPEDIMAGE); - paintingArea->historyadd(); + paintingArea->historyadd(); UpdateGui(); } } @@ -162,7 +162,7 @@ void IntelliPhotoGui::slotDeleteLayer(){ // Create New Layer if(ok1) { paintingArea->deleteLayer(layerNumber - 1); - paintingArea->historyadd(); + paintingArea->historyadd(); UpdateGui(); } } @@ -335,7 +335,7 @@ void IntelliPhotoGui::slotEnterPressed(){ void IntelliPhotoGui::slotResetToolButtons(){ CircleButton->setChecked(false); FloodFillButton->setChecked(false); - GradientButton->setChecked(false); + GradientButton->setChecked(false); LineButton->setChecked(false); PenButton->setChecked(false); PlainButton->setChecked(false); @@ -389,8 +389,8 @@ void IntelliPhotoGui::createActions(){ actionSaveAs.append(action); } - // Set exporter to actions - QAction*pngSaveAction = new QAction("PNG-8...", this); + // Set exporter to actions + QAction*pngSaveAction = new QAction("PNG-8...", this); pngSaveAction->setData("PNG"); // When clicked call IntelliPhotoGui::save() connect(pngSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); @@ -419,7 +419,7 @@ void IntelliPhotoGui::createActions(){ connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer())); // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() - actionDeleteLayer = new QAction(tr("&Delete Layer"), this); + actionDeleteLayer = new QAction(tr("&Delete Layer"), this); actionDeleteLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_D)); connect(actionDeleteLayer, SIGNAL(triggered()), this, SLOT(slotDeleteLayer())); @@ -428,52 +428,52 @@ void IntelliPhotoGui::createActions(){ connect(actionChangeDim, SIGNAL(triggered()), this, SLOT(slotChangeDim())); connect(dimCanvas, SIGNAL(clicked()), this, SLOT(slotChangeDim())); - actionSetActiveLayer = new QAction(tr("&Set Active"), this); + actionSetActiveLayer = new QAction(tr("&Set Active"), this); actionSetActiveLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); connect(actionSetActiveLayer, SIGNAL(triggered()), this, SLOT(slotSetActiveLayer())); - actionSetActiveAlpha = new QAction(tr("&Set Alpha"), this); + actionSetActiveAlpha = new QAction(tr("&Set Alpha"), this); actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha())); - actionSetPolygon = new QAction(tr("&Set Polygon Data"), this); + actionSetPolygon = new QAction(tr("&Set Polygon Data"), 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 = new QAction(tr("&Move Up"), this); actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up)); connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp())); - actionMovePositionDown = new QAction(tr("&Move Down"), this); + actionMovePositionDown = new QAction(tr("&Move Down"), this); actionMovePositionDown->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down)); connect(actionMovePositionDown, SIGNAL(triggered()), this, SLOT(slotPositionMoveDown())); - actionMovePositionLeft = new QAction(tr("&Move Left"), this); + actionMovePositionLeft = new QAction(tr("&Move Left"), this); actionMovePositionLeft->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left)); connect(actionMovePositionLeft, SIGNAL(triggered()), this, SLOT(slotPositionMoveLeft())); - actionMovePositionRight = new QAction(tr("&Move Right"), this); + actionMovePositionRight = new QAction(tr("&Move Right"), this); actionMovePositionRight->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right)); connect(actionMovePositionRight, SIGNAL(triggered()), this, SLOT(slotPositionMoveRight())); - actionMoveLayerUp = new QAction(tr("&Move Forth"), this); + actionMoveLayerUp = new QAction(tr("&Move Forth"), this); actionMoveLayerUp->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Up)); connect(actionMoveLayerUp, SIGNAL(triggered()), this, SLOT(slotMoveLayerUp())); - actionMoveLayerDown = new QAction(tr("&Move Back"), this); + actionMoveLayerDown = new QAction(tr("&Move Back"), this); actionMoveLayerDown->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_Down)); connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown())); - // Create Update RenderSettings Actions here - actionUpdateFastRenderSettingsOn = new QAction(tr("&On"), this); - actionUpdateFastRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A)); - connect(actionUpdateFastRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOn())); + // Create Update RenderSettings Actions here + actionUpdateFastRenderSettingsOn = new QAction(tr("&On"), this); + actionUpdateFastRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A)); + connect(actionUpdateFastRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOn())); - actionUpdateFastRenderSettingsOff = new QAction(tr("&Off"), this); - actionUpdateFastRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D)); - connect(actionUpdateFastRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOff())); + actionUpdateFastRenderSettingsOff = new QAction(tr("&Off"), this); + actionUpdateFastRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D)); + connect(actionUpdateFastRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOff())); - // Create Color Actions here + // Create Color Actions here actionColorPickerFirstColor = new QAction(tr("&Main"), this); actionColorPickerFirstColor->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); connect(actionColorPickerFirstColor, SIGNAL(triggered()), this, SLOT(slotSetFirstColor())); @@ -489,81 +489,81 @@ void IntelliPhotoGui::createActions(){ connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor())); connect(SwitchColorButton, SIGNAL(clicked()), this, SLOT(slotSwapColor())); - // Create Tool actions down here + // Create Tool actions down here actionCreatePlainTool = new QAction(tr("&Plain"), this); actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P)); - connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); 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)); - connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool())); actionCreateGradientTool = new QAction(tr("&Gradient"),this); - actionCreateGradientTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_G)); - connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); + actionCreateGradientTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_G)); + connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons())); connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool())); // Create about action and tie to IntelliPhotoGui::about() - actionAboutDialog = new QAction(tr("&About"), this); + actionAboutDialog = new QAction(tr("&About"), this); connect(actionAboutDialog, SIGNAL(triggered()), this, SLOT(slotAboutDialog())); // Create about Qt action and tie to IntelliPhotoGui::aboutQt() - actionAboutQtDialog = new QAction(tr("About &Qt"), this); + actionAboutQtDialog = new QAction(tr("About &Qt"), this); connect(actionAboutQtDialog, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed())); - connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool())); - connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool())); - connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool())); - connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool())); - connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool())); - connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool())); - connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool())); - connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); + connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons())); connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool())); actionSetWidth = new QAction(tr("&Set Width"),this); @@ -574,11 +574,11 @@ void IntelliPhotoGui::createActions(){ actionSetInnerAlpha->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); connect(actionSetInnerAlpha, SIGNAL(triggered()), this, SLOT(slotSetInnerAlpha())); - actionGoBack = new QAction(tr("&Undo"),this); + actionGoBack = new QAction(tr("&Undo"),this); actionGoBack->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Z)); connect(actionGoBack, SIGNAL(triggered()), this, SLOT(slotGoBack())); - actionGoForward = new QAction(tr("&Redo"),this); + actionGoForward = new QAction(tr("&Redo"),this); actionGoForward->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Y)); connect(actionGoForward, SIGNAL(triggered()), this, SLOT(slotGoForward())); } @@ -586,31 +586,31 @@ void IntelliPhotoGui::createActions(){ // Create the menubar void IntelliPhotoGui::createMenus(){ // Create Save As option and the list of file types - saveAsMenu = new QMenu(tr("&Export As"), this); + saveAsMenu = new QMenu(tr("&Export As"), this); foreach (QAction * action, actionSaveAs) saveAsMenu->addAction(action); - // Attach all actions to file menu + // Attach all actions to file menu fileMenu = new QMenu(tr("&File"), this); fileMenu->addAction(actionOpen); fileMenu->addMenu(saveAsMenu); fileMenu->addSeparator(); fileMenu->addAction(actionExit); - // Attach the save project option to file menu - QAction*projectSaveAction = new QAction("Save Project", this); - projectSaveAction->setData("idf"); - connect(projectSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); - projectSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); - fileMenu->addAction(projectSaveAction); + // Attach the save project option to file menu + QAction*projectSaveAction = new QAction("Save Project", this); + projectSaveAction->setData("idf"); + connect(projectSaveAction, SIGNAL(triggered()), this, SLOT(slotSave())); + projectSaveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); + fileMenu->addAction(projectSaveAction); - // Attach all actions to Render Settings + // Attach all actions to Render Settings renderMenu = new QMenu(tr("&Fast Renderer"), this); - renderMenu->addAction(actionUpdateFastRenderSettingsOn); - renderMenu->addAction(actionUpdateFastRenderSettingsOff); + renderMenu->addAction(actionUpdateFastRenderSettingsOn); + renderMenu->addAction(actionUpdateFastRenderSettingsOff); - // Attach all Layer Creations to Menu - layerCreationMenu = new QMenu(tr("&Create Layer"), this); + // Attach all Layer Creations to Menu + layerCreationMenu = new QMenu(tr("&Create Layer"), this); layerCreationMenu->addAction(actionCreateNewRasterLayer); layerCreationMenu->addAction(actionCreateNewShapedLayer); @@ -622,7 +622,7 @@ void IntelliPhotoGui::createMenus(){ layerMenu->addAction(actionSetActiveLayer); layerMenu->addAction(actionSetPolygon); layerMenu->addSeparator(); - layerMenu->addAction(actionMovePositionUp); + layerMenu->addAction(actionMovePositionUp); layerMenu->addAction(actionMovePositionDown); layerMenu->addAction(actionMovePositionLeft); layerMenu->addAction(actionMovePositionRight); @@ -631,14 +631,14 @@ void IntelliPhotoGui::createMenus(){ layerMenu->addSeparator(); layerMenu->addAction(actionDeleteLayer); - // Attach all Color Options + // 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("&Tool Selection"), this); + // Attach all Tool Creation Actions + toolCreationMenu = new QMenu(tr("&Tool Selection"), this); toolCreationMenu->addAction(actionCreateCircleTool); toolCreationMenu->addAction(actionCreateFloodFillTool); toolCreationMenu->addAction(actionCreateGradientTool); @@ -648,20 +648,20 @@ void IntelliPhotoGui::createMenus(){ toolCreationMenu->addAction(actionCreatePolygonTool); toolCreationMenu->addAction(actionCreateRectangleTool); - // Attach all Tool Setting Actions - toolSettingsMenu = new QMenu(tr("&Tool Settings"), this); + // Attach all Tool Setting Actions + toolSettingsMenu = new QMenu(tr("&Tool Settings"), this); toolSettingsMenu->addAction(actionSetWidth); toolSettingsMenu->addAction(actionSetInnerAlpha); - // Attach all Tool Options + // Attach all Tool Options toolMenu = new QMenu(tr("&Tools"), this); toolMenu->addMenu(toolCreationMenu); - toolMenu->addMenu(toolSettingsMenu); + toolMenu->addMenu(toolSettingsMenu); // Attach all actions to Options optionMenu = new QMenu(tr("&Options"), this); optionMenu->addAction(actionGoBack); - optionMenu->addAction(actionGoForward); + optionMenu->addAction(actionGoForward); optionMenu->addSeparator(); optionMenu->addMenu(renderMenu); optionMenu->addAction(actionChangeDim); @@ -674,9 +674,9 @@ void IntelliPhotoGui::createMenus(){ // Add menu items to the menubar menuBar()->addMenu(fileMenu); menuBar()->addMenu(optionMenu); - menuBar()->addMenu(layerMenu); - menuBar()->addMenu(toolMenu); - menuBar()->addMenu(colorMenu); + menuBar()->addMenu(layerMenu); + menuBar()->addMenu(toolMenu); + menuBar()->addMenu(colorMenu); menuBar()->addMenu(helpMenu); } @@ -694,10 +694,10 @@ void IntelliPhotoGui::createGui(){ paintingArea = new PaintingArea(1280, 720); paintingArea->guiReference = this; - QScreen *screen = QGuiApplication::primaryScreen(); - QRect screenGeometry = screen->geometry(); - Buttonsize.setWidth(screenGeometry.width()/20); - Buttonsize.setHeight(screenGeometry.height()/20); + QScreen*screen = QGuiApplication::primaryScreen(); + QRect screenGeometry = screen->geometry(); + Buttonsize.setWidth(screenGeometry.width() / 20); + Buttonsize.setHeight(screenGeometry.height() / 20); preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg"); CircleButton = new QPushButton(); @@ -713,12 +713,12 @@ void IntelliPhotoGui::createGui(){ FloodFillButton->setIconSize(Buttonsize); FloodFillButton->setCheckable(true); - preview = QPixmap(":/Icons/Buttons/icons/gradient-tool.svg"); - GradientButton = new QPushButton(); - GradientButton->setFixedSize(Buttonsize); - GradientButton->setIcon(preview); - GradientButton->setIconSize(Buttonsize); - GradientButton->setCheckable(true); + preview = QPixmap(":/Icons/Buttons/icons/gradient-tool.svg"); + GradientButton = new QPushButton(); + GradientButton->setFixedSize(Buttonsize); + GradientButton->setIcon(preview); + GradientButton->setIconSize(Buttonsize); + GradientButton->setCheckable(true); preview = QPixmap(":/Icons/Buttons/icons/line-tool.svg"); LineButton = new QPushButton(); @@ -791,10 +791,10 @@ void IntelliPhotoGui::createGui(){ SwitchColorButton->setIcon(preview); SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height())); - ActiveLayerLabel = new QLabel(); + ActiveLayerLabel = new QLabel(); QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1); - ActiveLayerLabel->setText(string); - ActiveLayerLabel->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3); + ActiveLayerLabel->setText(string); + ActiveLayerLabel->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); if(activePicture) { @@ -845,7 +845,7 @@ void IntelliPhotoGui::createGui(){ mainLayout->addWidget(FirstColorButton,9,2,1,1); mainLayout->addWidget(SecondColorButton,9,3,1,1); mainLayout->addWidget(SwitchColorButton,10,2,1,2); - mainLayout->addWidget(ActiveLayerLabel,11,2,1,2); + mainLayout->addWidget(ActiveLayerLabel,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); @@ -931,7 +931,7 @@ void IntelliPhotoGui::setToolWidth(int value){ void IntelliPhotoGui::UpdateGui(){ QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1); - ActiveLayerLabel->setText(string); + ActiveLayerLabel->setText(string); IntelliImage* activePicture = paintingArea->getImageOfActiveLayer(); if(activePicture) { @@ -956,7 +956,7 @@ void IntelliPhotoGui::UpdateGui(){ if(paintingArea->layerBundle.size() != 0) { string = QString("%1x%2").arg(paintingArea->layerBundle[static_cast (paintingArea->getIndexOfActiveLayer())].width).arg(paintingArea->layerBundle[static_cast - (paintingArea->getIndexOfActiveLayer())].height); + (paintingArea->getIndexOfActiveLayer())].height); dimActive->setText(string); } else{ diff --git a/src/Image/IntelliImage.cpp b/src/Image/IntelliImage.cpp index b37ee29..3ff8b13 100644 --- a/src/Image/IntelliImage.cpp +++ b/src/Image/IntelliImage.cpp @@ -115,13 +115,13 @@ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& co } void IntelliImage::drawPlain(const QColor& color){ - if(fastRenderering) { - this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32); - } + 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_Indexed8); + } } QColor IntelliImage::getPixelColor(QPoint& point){ diff --git a/src/Image/IntelliRasterImage.cpp b/src/Image/IntelliRasterImage.cpp index a806616..9891b66 100644 --- a/src/Image/IntelliRasterImage.cpp +++ b/src/Image/IntelliRasterImage.cpp @@ -23,7 +23,7 @@ IntelliRasterImage::~IntelliRasterImage(){ } IntelliImage* IntelliRasterImage::getDeepCopy(){ - IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), false); + IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), false); raster->imageData.fill(Qt::transparent); raster->TypeOfImage = ImageType::RASTERIMAGE; return raster; diff --git a/src/Image/IntelliShapedImage.cpp b/src/Image/IntelliShapedImage.cpp index 69013b9..93b2a2b 100644 --- a/src/Image/IntelliShapedImage.cpp +++ b/src/Image/IntelliShapedImage.cpp @@ -12,7 +12,7 @@ IntelliShapedImage::IntelliShapedImage(int width, int height, bool fastRendererO IntelliShapedImage* IntelliShapedImage::copy(const IntelliShapedImage& image){ this->TypeOfImage = ImageType::SHAPEDIMAGE; - IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), this->fastRenderering); + IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), this->fastRenderering); shaped->imageData.copy(0,0,image.getWidth(),image.getWidth()); return shaped; } @@ -26,7 +26,7 @@ QImage IntelliShapedImage::getDisplayable(int alpha){ } IntelliImage* IntelliShapedImage::getDeepCopy(){ - IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), false); + IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), false); shaped->setPolygon(this->polygonData); shaped->imageData.fill(Qt::transparent); shaped->TypeOfImage = ImageType::SHAPEDIMAGE; diff --git a/src/IntelliHelper/IntelliDatamanager.cpp b/src/IntelliHelper/IntelliDatamanager.cpp index faf29ce..e465778 100644 --- a/src/IntelliHelper/IntelliDatamanager.cpp +++ b/src/IntelliHelper/IntelliDatamanager.cpp @@ -94,7 +94,7 @@ bool IntelliDatamanager::loadProject(PaintingArea* Canvas, QString filePath){ } Canvas->setRenderSettings(static_cast(rendersetting)); openFile.close(); - Canvas->historyadd(); + Canvas->historyadd(); return true; } diff --git a/src/Layer/PaintingArea.cpp b/src/Layer/PaintingArea.cpp index 809c668..ece955e 100644 --- a/src/Layer/PaintingArea.cpp +++ b/src/Layer/PaintingArea.cpp @@ -39,8 +39,8 @@ LayerObject::LayerObject(const LayerObject& layer){ PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) : QLabel(parent){ - this->Tool = nullptr; - this->setCanvasDimensions(maxWidth, maxHeight); + this->Tool = nullptr; + this->setCanvasDimensions(maxWidth, maxHeight); activeLayer = -1; } @@ -275,8 +275,8 @@ void PaintingArea::createFloodFillTool(){ } void PaintingArea::createGradientTool(){ - delete this->Tool; - Tool = new IntelliToolGradient(this, &colorPicker, &Toolsettings); + delete this->Tool; + Tool = new IntelliToolGradient(this, &colorPicker, &Toolsettings); } int PaintingArea::getWidthOfActive(){ @@ -509,30 +509,30 @@ void PaintingArea::updateTools(){ void PaintingArea::historyadd(){ - historyPresent++; - if (historyPresent == 100) { + historyPresent++; + if (historyPresent == 100) { historyPresent = 0; } historyMaxFuture = historyPresent; - if (historyPresent == historyMaxPast){ - historyMaxPast++; - if (historyMaxPast == 100){ + if (historyPresent == historyMaxPast) { + historyMaxPast++; + if (historyMaxPast == 100) { historyMaxPast = 0; - } - } - history[static_cast(historyPresent)] = layerBundle; + } + } + history[static_cast(historyPresent)] = layerBundle; } void PaintingArea::historyGoBack(){ if (historyPresent != historyMaxPast) { if (--historyPresent == -1) historyPresent = 99; - if (activeLayer == -1) - activeLayer = 0; - if (layerBundle.size() > history[static_cast(historyPresent)].size()) - activeLayer = static_cast(history[static_cast(historyPresent)].size())-1; - if (history[static_cast(historyPresent)].size() == 0) - activeLayer = -1; + if (activeLayer == -1) + activeLayer = 0; + if (layerBundle.size() > history[static_cast(historyPresent)].size()) + activeLayer = static_cast(history[static_cast(historyPresent)].size()) - 1; + if (history[static_cast(historyPresent)].size() == 0) + activeLayer = -1; layerBundle = history[static_cast(historyPresent)]; } this->guiReference->UpdateGui(); @@ -542,12 +542,12 @@ void PaintingArea::historyGoForward(){ if (historyPresent != historyMaxFuture) { if (++historyPresent == 100) historyPresent = 0; - if (activeLayer == -1) - activeLayer = 0; - if (layerBundle.size() > history[static_cast(historyPresent)].size()) - activeLayer = static_cast(history[static_cast(historyPresent)].size())-1; - if (history[static_cast(historyPresent)].size() == 0) - activeLayer = -1; + if (activeLayer == -1) + activeLayer = 0; + if (layerBundle.size() > history[static_cast(historyPresent)].size()) + activeLayer = static_cast(history[static_cast(historyPresent)].size()) - 1; + if (history[static_cast(historyPresent)].size() == 0) + activeLayer = -1; layerBundle = history[static_cast(historyPresent)]; } this->guiReference->UpdateGui(); diff --git a/src/Layer/PaintingArea.h b/src/Layer/PaintingArea.h index 91f8d20..be0deb7 100644 --- a/src/Layer/PaintingArea.h +++ b/src/Layer/PaintingArea.h @@ -457,8 +457,8 @@ bool createTempTopLayer(int idx); void updateTools(); /*! - * \brief history - an array out of containers to save history actions. - */ + * \brief history - an array out of containers to save history actions. + */ std::vector history[100] = {layerBundle}; /*! diff --git a/src/Tool/IntelliTool.h b/src/Tool/IntelliTool.h index 07abb46..95dac3d 100644 --- a/src/Tool/IntelliTool.h +++ b/src/Tool/IntelliTool.h @@ -23,7 +23,7 @@ public: enum class Tooltype { CIRCLE, FLOODFILL, - GRADIENT, + GRADIENT, LINE, PEN, PLAIN, diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index a47f087..9639710 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -4,128 +4,128 @@ #include IntelliToolGradient::IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) - : IntelliTool(Area, colorPicker, Toolsettings){ - this->ActiveType = Tooltype::GRADIENT; - this->LineColor = QColor(0,0,0,255); - this->hasMoved = false; + : IntelliTool(Area, colorPicker, Toolsettings){ + this->ActiveType = Tooltype::GRADIENT; + this->LineColor = QColor(0,0,0,255); + this->hasMoved = false; } IntelliToolGradient::~IntelliToolGradient(){ - IntelliTool::onMouseRightPressed(0,0); + IntelliTool::onMouseRightPressed(0,0); } void IntelliToolGradient::onMouseLeftPressed(int x, int y){ - IntelliTool::onMouseLeftPressed(x,y); - doubleStartPoint[0] = static_cast(x); - doubleStartPoint[1] = static_cast(y); - startPoint = QPoint(x,y); - endPoint = QPoint(x,y); - VectorStartEnd[0] = 0; - VectorStartEnd[1] = 0; - Canvas->image->drawPixel(startPoint,LineColor); + IntelliTool::onMouseLeftPressed(x,y); + doubleStartPoint[0] = static_cast(x); + doubleStartPoint[1] = static_cast(y); + startPoint = QPoint(x,y); + endPoint = QPoint(x,y); + VectorStartEnd[0] = 0; + VectorStartEnd[1] = 0; + Canvas->image->drawPixel(startPoint,LineColor); } void IntelliToolGradient::onMouseRightPressed(int x, int y){ - IntelliTool::onMouseRightPressed(x,y); + IntelliTool::onMouseRightPressed(x,y); } void IntelliToolGradient::onMouseLeftReleased(int x, int y){ - if(hasMoved && this->isDrawing){ - computeGradientLayer(); - IntelliTool::onMouseLeftReleased(x,y); - } + if(hasMoved && this->isDrawing) { + computeGradientLayer(); + IntelliTool::onMouseLeftReleased(x,y); + } } void IntelliToolGradient::onMouseRightReleased(int x, int y){ - IntelliTool::onMouseRightReleased(x,y); + IntelliTool::onMouseRightReleased(x,y); } void IntelliToolGradient::onMouseMoved(int x, int y){ - if(this->isDrawing){ - hasMoved = true; - endPoint = QPoint(x,y); - VectorStartEnd[0] = static_cast(endPoint.x() - startPoint.x()); - VectorStartEnd[1] = static_cast(endPoint.y() - startPoint.y()); - NormalVector[0] = VectorStartEnd[1]; - NormalVector[1] = (-1*VectorStartEnd[0]); - NormalDotNormal = dotProduct(NormalVector,NormalVector); - this->Canvas->image->drawPlain(Qt::transparent); - computeGradientLayer(); - Canvas->image->drawLine(startPoint,endPoint,LineColor,1); - } - IntelliTool::onMouseMoved(x,y); + if(this->isDrawing) { + hasMoved = true; + endPoint = QPoint(x,y); + VectorStartEnd[0] = static_cast(endPoint.x() - startPoint.x()); + VectorStartEnd[1] = static_cast(endPoint.y() - startPoint.y()); + NormalVector[0] = VectorStartEnd[1]; + NormalVector[1] = (-1 * VectorStartEnd[0]); + NormalDotNormal = dotProduct(NormalVector,NormalVector); + this->Canvas->image->drawPlain(Qt::transparent); + computeGradientLayer(); + Canvas->image->drawLine(startPoint,endPoint,LineColor,1); + } + IntelliTool::onMouseMoved(x,y); } void IntelliToolGradient::onWheelScrolled(int value){ - IntelliTool::onWheelScrolled(value); + IntelliTool::onWheelScrolled(value); } void IntelliToolGradient::computeAndDrawPixelColor(QPoint Point){ - double doublePoint[2]; - doublePoint[0] = static_cast(Point.x()); - doublePoint[1] = static_cast(Point.y()); - double doublePointSubA[2]; - doublePointSubA[0] = doublePoint[0] - doubleStartPoint[0]; - doublePointSubA[1] = doublePoint[1] - doubleStartPoint[1]; - double Perpendicular[2]; - double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); - Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; - Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; - double VectorAPoint[2]; - VectorAPoint[0] = static_cast(Perpendicular[0] - doubleStartPoint[0]); - VectorAPoint[1] = static_cast(Perpendicular[1] - doubleStartPoint[1]); - double ratio; - if(((VectorAPoint[0] < 0 && VectorStartEnd[0] < 0) || (VectorAPoint[0] > 0 && VectorStartEnd[0] > 0)) && ((VectorAPoint[1] < 0 && VectorStartEnd[1] < 0) || (VectorAPoint[1] > 0 && VectorStartEnd[1] > 0))) - ratio = lenghtVector(VectorAPoint)/lenghtVector(VectorStartEnd); - else{ - ratio = -1; - } - QColor computedColor; - if(ratio < 0){ - computedColor = colorPicker->getFirstColor(); - } - else if(ratio > 1){ - computedColor = colorPicker->getSecondColor(); - } - else{ - int red; - int green; - int blue; - int alpha; - int red2; - int green2; - int blue2; - int alpha2; - colorPicker->getFirstColor().getRgb(&red,&green,&blue,&alpha); - colorPicker->getSecondColor().getRgb(&red2,&green2,&blue2,&alpha2); - computedColor.setRed(static_cast(ratio * red2 + (1 - ratio) * red)); - computedColor.setGreen(static_cast(ratio * green2 + (1 - ratio) * green)); - computedColor.setBlue(static_cast(ratio * blue2 + (1 - ratio) * blue)); - computedColor.setAlpha(static_cast(ratio * alpha2 + (1 - ratio) * alpha)); - } - Canvas->image->drawPixel(Point,computedColor); + double doublePoint[2]; + doublePoint[0] = static_cast(Point.x()); + doublePoint[1] = static_cast(Point.y()); + double doublePointSubA[2]; + doublePointSubA[0] = doublePoint[0] - doubleStartPoint[0]; + doublePointSubA[1] = doublePoint[1] - doubleStartPoint[1]; + double Perpendicular[2]; + double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); + Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; + Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; + double VectorAPoint[2]; + VectorAPoint[0] = static_cast(Perpendicular[0] - doubleStartPoint[0]); + VectorAPoint[1] = static_cast(Perpendicular[1] - doubleStartPoint[1]); + double ratio; + if(((VectorAPoint[0] < 0 && VectorStartEnd[0] < 0) || (VectorAPoint[0] > 0 && VectorStartEnd[0] > 0)) && ((VectorAPoint[1] < 0 && VectorStartEnd[1] < 0) || (VectorAPoint[1] > 0 && VectorStartEnd[1] > 0))) + ratio = lenghtVector(VectorAPoint) / lenghtVector(VectorStartEnd); + else{ + ratio = -1; + } + QColor computedColor; + if(ratio < 0) { + computedColor = colorPicker->getFirstColor(); + } + else if(ratio > 1) { + computedColor = colorPicker->getSecondColor(); + } + else{ + int red; + int green; + int blue; + int alpha; + int red2; + int green2; + int blue2; + int alpha2; + colorPicker->getFirstColor().getRgb(&red,&green,&blue,&alpha); + colorPicker->getSecondColor().getRgb(&red2,&green2,&blue2,&alpha2); + computedColor.setRed(static_cast(ratio * red2 + (1 - ratio) * red)); + computedColor.setGreen(static_cast(ratio * green2 + (1 - ratio) * green)); + computedColor.setBlue(static_cast(ratio * blue2 + (1 - ratio) * blue)); + computedColor.setAlpha(static_cast(ratio * alpha2 + (1 - ratio) * alpha)); + } + Canvas->image->drawPixel(Point,computedColor); } double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ - return static_cast(Vector1[0]*Vector2[0]+Vector1[1]*Vector2[1]); + return static_cast(Vector1[0] * Vector2[0] + Vector1[1] * Vector2[1]); } double IntelliToolGradient::lenghtVector(double Vector[2]){ - return static_cast((sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); + return static_cast((sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); } void IntelliToolGradient::computeGradientLayer(){ - bool switched = false; - if(Canvas->image->isFastRendering()){ - switched = true; - Canvas->image->updateRendererSetting(false); - } - for(int i = 0; i < activeLayer->height; i++){ - for(int j = 0; j < activeLayer->width; j++){ - computeAndDrawPixelColor(QPoint(j,i)); - } - } - if(switched){ - Canvas->image->updateRendererSetting(true); - } + bool switched = false; + if(Canvas->image->isFastRendering()) { + switched = true; + Canvas->image->updateRendererSetting(false); + } + for(int i = 0; i < activeLayer->height; i++) { + for(int j = 0; j < activeLayer->width; j++) { + computeAndDrawPixelColor(QPoint(j,i)); + } + } + if(switched) { + Canvas->image->updateRendererSetting(true); + } } diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h index caf9b81..7547a61 100644 --- a/src/Tool/IntelliToolGradient.h +++ b/src/Tool/IntelliToolGradient.h @@ -4,129 +4,129 @@ /*! * \brief The IntelliToolGradient class that represents a gradient call */ -class IntelliToolGradient : public IntelliTool{ +class IntelliToolGradient : public IntelliTool { public: - /*! - * \brief IntelliToolGradient basic constructor of the gradient tool. - * \param Area - a reference to the paintingArea - * \param colorPicker - a reference to the colorpicker - * \param Toolsettings - a regerence to the Toolsettings - */ - IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); +/*! + * \brief IntelliToolGradient basic constructor of the gradient tool. + * \param Area - a reference to the paintingArea + * \param colorPicker - a reference to the colorpicker + * \param Toolsettings - a regerence to the Toolsettings + */ +IntelliToolGradient(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); - /*! - * \brief ~IntelliToolGradient basic destructor. - */ - virtual ~IntelliToolGradient() override; +/*! + * \brief ~IntelliToolGradient basic destructor. + */ +virtual ~IntelliToolGradient() override; - /*! - * \brief A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseRightPressed(int x, int y) override; +/*! + * \brief A function managing the right click Pressed of a Mouse. Constructing the Canvas to draw on. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ +virtual void onMouseRightPressed(int x, int y) override; - /*! - * \brief A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseRightReleased(int x, int y) override; +/*! + * \brief A function managing the right click Released of a Mouse. Merging the Canvas to Active. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ +virtual void onMouseRightReleased(int x, int y) override; - /*! - * \brief A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseLeftPressed(int x, int y) override; +/*! + * \brief A function managing the left click Pressed of a Mouse. Resetting the current draw. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ +virtual void onMouseLeftPressed(int x, int y) override; - /*! - * \brief A function managing the left click Released of a Mouse. Call this in child classes! - * \param x - The x coordinate relative to the active/canvas layer. - * \param y - The y coordinate relative to the active/canvas layer. - */ - virtual void onMouseLeftReleased(int x, int y) override; +/*! + * \brief A function managing the left click Released of a Mouse. Call this in child classes! + * \param x - The x coordinate relative to the active/canvas layer. + * \param y - The y coordinate relative to the active/canvas layer. + */ +virtual void onMouseLeftReleased(int x, int y) override; - /*! - * \brief A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes! - * \param value - The absolute the scroll has changed. - */ - virtual void onWheelScrolled(int value) override; +/*! + * \brief A function managing the scroll event. A positive value means scrolling outwards. Call this in child classes! + * \param value - The absolute the scroll has changed. + */ +virtual void onWheelScrolled(int value) override; - /*! - * \brief A function managing the mouse moved event. Call this in child classes! - * \param x - The x coordinate of the new mouse position. - * \param y - The y coordinate of the new mouse position. - */ - virtual void onMouseMoved(int x, int y) override; +/*! + * \brief A function managing the mouse moved event. Call this in child classes! + * \param x - The x coordinate of the new mouse position. + * \param y - The y coordinate of the new mouse position. + */ +virtual void onMouseMoved(int x, int y) override; private: - /*! - * \brief startPoint of the line - */ - QPoint startPoint; +/*! + * \brief startPoint of the line + */ +QPoint startPoint; - /*! - * \brief endPoint of the line - */ - QPoint endPoint; - /*! - * \brief doubleStartPoint startPoint as double Values - */ - double doubleStartPoint[2]; +/*! + * \brief endPoint of the line + */ +QPoint endPoint; +/*! + * \brief doubleStartPoint startPoint as double Values + */ +double doubleStartPoint[2]; - /*! - * \brief VectorStartEnd a vector between start and end point. - */ - double VectorStartEnd[2]; +/*! + * \brief VectorStartEnd a vector between start and end point. + */ +double VectorStartEnd[2]; - /*! - * \brief NormalVector of the VectorStartEnd - */ - double NormalVector[2]; +/*! + * \brief NormalVector of the VectorStartEnd + */ +double NormalVector[2]; - /*! - * \brief NormalDotNormal dot product of Normal*Normal - */ - double NormalDotNormal; +/*! + * \brief NormalDotNormal dot product of Normal*Normal + */ +double NormalDotNormal; - /*! - * \brief LineColor color of th line. - */ - QColor LineColor; +/*! + * \brief LineColor color of th line. + */ +QColor LineColor; - /*! - * \brief hasMoved indicates a movement - */ - bool hasMoved; +/*! + * \brief hasMoved indicates a movement + */ +bool hasMoved; - /*! - * \brief computeAndDrawPixelColor computes the pixelcolor for a given point and sets it to the image. - * \param Point the point which shoud be computed - */ - void computeAndDrawPixelColor(QPoint Point); +/*! + * \brief computeAndDrawPixelColor computes the pixelcolor for a given point and sets it to the image. + * \param Point the point which shoud be computed + */ +void computeAndDrawPixelColor(QPoint Point); - /*! - * \brief dotProduct calculates the dot product of 2 vetors. - * \param Vector1 - first argument - * \param Vector2 - second argument - * \return returns the dot product. - */ - double dotProduct(double Vector1[2], double Vector2[2]); +/*! + * \brief dotProduct calculates the dot product of 2 vetors. + * \param Vector1 - first argument + * \param Vector2 - second argument + * \return returns the dot product. + */ +double dotProduct(double Vector1[2], double Vector2[2]); - /*! - * \brief lenghtVector returns the length of a vector - * \param Vector - Vector to calculate the length - * \return returns the length of the vector - */ - double lenghtVector(double Vector[2]); +/*! + * \brief lenghtVector returns the length of a vector + * \param Vector - Vector to calculate the length + * \return returns the length of the vector + */ +double lenghtVector(double Vector[2]); - /*! - * \brief computeGradientLayer computes the gradient over all pixels in the image. - */ - void computeGradientLayer(); +/*! + * \brief computeGradientLayer computes the gradient over all pixels in the image. + */ +void computeGradientLayer(); }; #endif // INTELLITOOLGRADIENT_H