From 2dd527ca27719e1c9b278f509c0164257af80b14 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Tue, 28 Jan 2020 10:42:32 +0100 Subject: [PATCH] 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); - } -}