Merge branch 'dev-variable-refractor' into dev

This commit is contained in:
2019-12-20 10:13:59 +01:00
23 changed files with 154 additions and 153 deletions

View File

@@ -206,8 +206,8 @@ void IntelliPhotoGui::slotSetSecondColor(){
paintingArea->colorPickerSetSecondColor(); paintingArea->colorPickerSetSecondColor();
} }
void IntelliPhotoGui::slotSwitchColor(){ void IntelliPhotoGui::slotSwapColor(){
paintingArea->colorPickerSwitchColor(); paintingArea->colorPickerSwapColors();
} }
void IntelliPhotoGui::slotCreatePenTool(){ void IntelliPhotoGui::slotCreatePenTool(){
@@ -328,9 +328,9 @@ void IntelliPhotoGui::createActions(){
actionColorPickerSecondColor = new QAction(tr("&Secondary"), this); actionColorPickerSecondColor = new QAction(tr("&Secondary"), this);
connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor())); connect(actionColorPickerSecondColor, SIGNAL(triggered()), this, SLOT(slotSetSecondColor()));
actionColorSwitch = new QAction(tr("&Switch"), this); actionColorSwap = new QAction(tr("&Switch"), this);
actionColorSwitch->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S)); actionColorSwap->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S));
connect(actionColorSwitch, SIGNAL(triggered()), this, SLOT(slotSwitchColor())); connect(actionColorSwap, SIGNAL(triggered()), this, SLOT(slotSwapColor()));
//Create Tool actions down here //Create Tool actions down here
actionCreatePlainTool = new QAction(tr("&Plain"), this); actionCreatePlainTool = new QAction(tr("&Plain"), this);
@@ -398,7 +398,7 @@ void IntelliPhotoGui::createMenus(){
colorMenu = new QMenu(tr("&Color"), this); colorMenu = new QMenu(tr("&Color"), this);
colorMenu->addAction(actionColorPickerFirstColor); colorMenu->addAction(actionColorPickerFirstColor);
colorMenu->addAction(actionColorPickerSecondColor); colorMenu->addAction(actionColorPickerSecondColor);
colorMenu->addAction(actionColorSwitch); colorMenu->addAction(actionColorSwap);
//Attach all Tool Options //Attach all Tool Options
toolMenu = new QMenu(tr("&Tools"), this); toolMenu = new QMenu(tr("&Tools"), this);

View File

@@ -55,7 +55,7 @@ void slotMoveLayerDown();
// color Picker slots here // color Picker slots here
void slotSetFirstColor(); void slotSetFirstColor();
void slotSetSecondColor(); void slotSetSecondColor();
void slotSwitchColor(); void slotSwapColor();
// tool slots here // tool slots here
void slotCreatePenTool(); void slotCreatePenTool();
@@ -103,7 +103,7 @@ QAction*actionExit;
// color Picker actions // color Picker actions
QAction*actionColorPickerFirstColor; QAction*actionColorPickerFirstColor;
QAction*actionColorPickerSecondColor; QAction*actionColorPickerSecondColor;
QAction*actionColorSwitch; QAction*actionColorSwap;
// tool actions // tool actions
QAction*actionCreatePenTool; QAction*actionCreatePenTool;

View File

@@ -11,12 +11,12 @@ IntelliImage::~IntelliImage(){
} }
bool IntelliImage::loadImage(const QString &fileName){ bool IntelliImage::loadImage(const QString &filePath){
// Holds the image // Holds the image
QImage loadedImage; QImage loadedImage;
// If the image wasn't loaded leave this function // If the image wasn't loaded leave this function
if (!loadedImage.load(fileName)) if (!loadedImage.load(filePath))
return false; return false;
// scaled Image to size of Layer // scaled Image to size of Layer

View File

@@ -33,10 +33,10 @@ QImage imageData;
public: public:
/*! /*!
* \brief The Construcor of the IntelliImage. Given the Image dimensions. * \brief The Construcor of the IntelliImage. Given the Image dimensions.
* \param weight - The weight of the Image. * \param width - The width of the Image.
* \param height - The height of the Image. * \param height - The height of the Image.
*/ */
IntelliImage(int weight, int height); IntelliImage(int width, int height);
/*! /*!
* \brief An Abstract Destructor. * \brief An Abstract Destructor.
@@ -91,7 +91,7 @@ virtual QImage getDisplayable(int alpha=255) = 0;
/*! /*!
* \brief A function that copys all that returns a [allocated] Image * \brief A function that copys all that returns a [allocated] Image
* \return A [allocated] Image with all the properties of the instance. * \return An [allocated] image with all the properties of the instance.
*/ */
virtual IntelliImage* getDeepCopy() = 0; virtual IntelliImage* getDeepCopy() = 0;
@@ -116,10 +116,10 @@ virtual std::vector<QPoint> getPolygonData(){
/*! /*!
* \brief A function that loads and sclaes an image to the fitting dimensions. * \brief A function that loads and sclaes an image to the fitting dimensions.
* \param fileName - The path+name of the image which to loaded. * \param filePath - The path+name of the image which to loaded.
* \return True if the image could be loaded, false otherwise. * \return True if the image could be loaded, false otherwise.
*/ */
virtual bool loadImage(const QString &fileName); virtual bool loadImage(const QString &filePath);
/*! /*!
* \brief A function that returns the pixelcolor at a certain point * \brief A function that returns the pixelcolor at a certain point

View File

@@ -16,10 +16,10 @@ virtual void calculateVisiblity() override;
public: public:
/*! /*!
* \brief The Construcor of the IntelliRasterImage. Given the Image dimensions. * \brief The Construcor of the IntelliRasterImage. Given the Image dimensions.
* \param weight - The weight of the Image. * \param width - The width of the Image.
* \param height - The height of the Image. * \param height - The height of the Image.
*/ */
IntelliRasterImage(int weight, int height); IntelliRasterImage(int width, int height);
/*! /*!
* \brief An Destructor. * \brief An Destructor.

View File

@@ -29,10 +29,10 @@ std::vector<QPoint> polygonData;
public: public:
/*! /*!
* \brief The Construcor of the IntelliShapedImage. Given the Image dimensions. * \brief The Construcor of the IntelliShapedImage. Given the Image dimensions.
* \param weight - The weight of the Image. * \param width - The width of the Image.
* \param height - The height of the Image. * \param height - The height of the Image.
*/ */
IntelliShapedImage(int weight, int height); IntelliShapedImage(int width, int height);
/*! /*!
* \brief An Destructor. * \brief An Destructor.

View File

@@ -9,7 +9,7 @@ IntelliColorPicker::~IntelliColorPicker(){
} }
void IntelliColorPicker::switchColors(){ void IntelliColorPicker::swapColors(){
std::swap(firstColor, secondColor); std::swap(firstColor, secondColor);
} }

View File

@@ -23,7 +23,7 @@ virtual ~IntelliColorPicker();
/*! /*!
* \brief A function switching primary and secondary color. * \brief A function switching primary and secondary color.
*/ */
void switchColors(); void swapColors();
/*! /*!
* \brief A function to read the primary selected color. * \brief A function to read the primary selected color.

View File

@@ -21,7 +21,7 @@
PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent) PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent)
: QWidget(parent){ : QWidget(parent){
this->Tool = nullptr; this->Tool = nullptr;
this->setUp(maxWidth, maxHeight); this->setLayerDimensions(maxWidth, maxHeight);
this->addLayer(200,200,0,0,ImageType::Shaped_Image); this->addLayer(200,200,0,0,ImageType::Shaped_Image);
layerBundle[0].image->drawPlain(QColor(0,0,255,255)); layerBundle[0].image->drawPlain(QColor(0,0,255,255));
std::vector<QPoint> polygon; std::vector<QPoint> polygon;
@@ -42,7 +42,7 @@ PaintingArea::~PaintingArea(){
delete Tool; delete Tool;
} }
void PaintingArea::setUp(int maxWidth, int maxHeight){ void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){
//set standart parameter //set standart parameter
this->maxWidth = maxWidth; this->maxWidth = maxWidth;
this->maxHeight = maxHeight; this->maxHeight = maxHeight;
@@ -99,35 +99,35 @@ void PaintingArea::setAlphaOfLayer(int index, int alpha){
} }
// Used to load the image and place it in the widget // Used to load the image and place it in the widget
bool PaintingArea::open(const QString &fileName){ bool PaintingArea::open(const QString &filePath){
if(this->activeLayer==-1) { if(this->activeLayer==-1) {
return false; return false;
} }
IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image; IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
bool open = active->loadImage(fileName); bool open = active->loadImage(filePath);
active->calculateVisiblity(); active->calculateVisiblity();
update(); update();
return open; return open;
} }
// Save the current image // Save the current image
bool PaintingArea::save(const QString &fileName, const char*fileFormat){ bool PaintingArea::save(const QString &filePath, const char*fileFormat){
if(layerBundle.size()==0) { if(layerBundle.size()==0) {
return false; return false;
} }
this->assembleLayers(true); this->drawLayers(true);
if(!strcmp(fileFormat,"PNG")) { if(!strcmp(fileFormat,"PNG")) {
QImage visibleImage = Canvas->convertToFormat(QImage::Format_Indexed8); QImage visibleImage = Canvas->convertToFormat(QImage::Format_Indexed8);
fileFormat = "png"; fileFormat = "png";
if (visibleImage.save(fileName, fileFormat)) { if (visibleImage.save(filePath, fileFormat)) {
return true; return true;
} else { } else {
return false; return false;
} }
} }
if (Canvas->save(fileName, fileFormat)) { if (Canvas->save(filePath, fileFormat)) {
return true; return true;
} else { } else {
return false; return false;
@@ -151,9 +151,9 @@ void PaintingArea::movePositionActive(int x, int y){
void PaintingArea::moveActiveLayer(int idx){ void PaintingArea::moveActiveLayer(int idx){
if(idx==1) { if(idx==1) {
this->activateUpperLayer(); this->selectLayerUp();
}else if(idx==-1) { }else if(idx==-1) {
this->activateLowerLayer(); this->selectLayerDown();
} }
} }
@@ -173,8 +173,8 @@ void PaintingArea::colorPickerSetSecondColor(){
this->colorPicker.setSecondColor(clr); this->colorPicker.setSecondColor(clr);
} }
void PaintingArea::colorPickerSwitchColor(){ void PaintingArea::colorPickerSwapColors(){
this->colorPicker.switchColors(); this->colorPicker.swapColors();
} }
void PaintingArea::createPenTool(){ void PaintingArea::createPenTool(){
@@ -273,7 +273,7 @@ void PaintingArea::wheelEvent(QWheelEvent*event){
// The QPaintEvent is sent to widgets that need to // The QPaintEvent is sent to widgets that need to
// update themselves // update themselves
void PaintingArea::paintEvent(QPaintEvent*event){ void PaintingArea::paintEvent(QPaintEvent*event){
this->assembleLayers(); this->drawLayers();
QPainter painter(this); QPainter painter(this);
QRect dirtyRec = event->rect(); QRect dirtyRec = event->rect();
@@ -288,25 +288,25 @@ void PaintingArea::resizeEvent(QResizeEvent*event){
update(); update();
} }
void PaintingArea::resizeImage(QImage*image_res, const QSize &newSize){ void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){
//TODO implement //TODO implement
} }
void PaintingArea::activateUpperLayer(){ void PaintingArea::selectLayerUp(){
if(activeLayer!=-1 && static_cast<unsigned long long>(activeLayer)<layerBundle.size()-1) { if(activeLayer!=-1 && static_cast<unsigned long long>(activeLayer)<layerBundle.size()-1) {
std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer+1)]); std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer+1)]);
activeLayer++; activeLayer++;
} }
} }
void PaintingArea::activateLowerLayer(){ void PaintingArea::selectLayerDown(){
if(activeLayer!=-1 && activeLayer>0) { if(activeLayer!=-1 && activeLayer>0) {
std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer-1)]); std::swap(layerBundle[static_cast<unsigned long long>(activeLayer)], layerBundle[static_cast<unsigned long long>(activeLayer-1)]);
activeLayer--; activeLayer--;
} }
} }
void PaintingArea::assembleLayers(bool forSaving){ void PaintingArea::drawLayers(bool forSaving){
if(forSaving) { if(forSaving) {
Canvas->fill(Qt::GlobalColor::transparent); Canvas->fill(Qt::GlobalColor::transparent);
}else{ }else{
@@ -341,7 +341,7 @@ void PaintingArea::assembleLayers(bool forSaving){
} }
} }
void PaintingArea::createTempLayerAfter(int idx){ void PaintingArea::createTempTopLayer(int idx){
if(idx>=0) { if(idx>=0) {
LayerObject newLayer; LayerObject newLayer;
newLayer.alpha = 255; newLayer.alpha = 255;

View File

@@ -61,14 +61,14 @@ public:
* \param fileName - Path and filename which are used to determine where the to-be-opened file is stored * \param fileName - Path and filename which are used to determine where the to-be-opened file is stored
* \return Returns a boolean variable whether the file was successfully opened or not * \return Returns a boolean variable whether the file was successfully opened or not
*/ */
bool open(const QString &fileName); bool open(const QString &filePath);
/*! /*!
* \brief The save method is used for exporting the current project as one picture * \brief The save method is used for exporting the current project as one picture
* \param fileName * \param fileName
* \param fileFormat * \param fileFormat
* \return Returns a boolean variable, true if the file was saved successfully, false if not * \return Returns a boolean variable, true if the file was saved successfully, false if not
*/ */
bool save(const QString &fileName, const char *fileFormat); bool save(const QString &filePath, const char *fileFormat);
/*! /*!
* \brief The addLayer adds a layer to the current project/ painting area * \brief The addLayer adds a layer to the current project/ painting area
@@ -139,7 +139,7 @@ public:
/*! /*!
* \brief The colorPickerSwitchColor swaps the primary color with the secondary drawing color * \brief The colorPickerSwitchColor swaps the primary color with the secondary drawing color
*/ */
void colorPickerSwitchColor(); void colorPickerSwapColors();
// Create tools // Create tools
void createPenTool(); void createPenTool();
@@ -187,9 +187,9 @@ protected:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
private: private:
void setUp(int maxWidth, int maxHeight); void setLayerDimensions(int maxWidth, int maxHeight);
void activateUpperLayer(); void selectLayerUp();
void activateLowerLayer(); void selectLayerDown();
QImage* Canvas; QImage* Canvas;
int maxWidth; int maxWidth;
@@ -201,12 +201,13 @@ private:
std::vector<LayerObject> layerBundle; std::vector<LayerObject> layerBundle;
int activeLayer=-1; int activeLayer=-1;
void assembleLayers(bool forSaving=false); void drawLayers(bool forSaving=false);
void resizeImage(QImage *image_res, const QSize &newSize); void resizeLayer(QImage *image_res, const QSize &newSize);
// Helper for Tool // Helper for Tool
void createTempLayerAfter(int idx); // TODO: Always create this layer on top and return the id here!
void createTempTopLayer(int idx);
}; };
#endif #endif

View File

@@ -12,8 +12,8 @@ IntelliTool::~IntelliTool(){
} }
void IntelliTool::onMouseRightPressed(int x, int y){ void IntelliTool::onMouseRightPressed(int x, int y){
if(drawing) { if(isDrawing) {
drawing=false; isDrawing=false;
this->deleteToolLayer(); this->deleteToolLayer();
} }
} }
@@ -23,23 +23,23 @@ void IntelliTool::onMouseRightReleased(int x, int y){
} }
void IntelliTool::onMouseLeftPressed(int x, int y){ void IntelliTool::onMouseLeftPressed(int x, int y){
this->drawing=true; this->isDrawing=true;
//create drawing layer //create drawing layer
this->createToolLayer(); this->createToolLayer();
Canvas->image->calculateVisiblity(); Canvas->image->calculateVisiblity();
} }
void IntelliTool::onMouseLeftReleased(int x, int y){ void IntelliTool::onMouseLeftReleased(int x, int y){
if(drawing) { if(isDrawing) {
drawing=false; isDrawing=false;
this->mergeToolLayer(); this->mergeToolLayer();
this->deleteToolLayer(); this->deleteToolLayer();
Active->image->calculateVisiblity(); activeLayer->image->calculateVisiblity();
} }
} }
void IntelliTool::onMouseMoved(int x, int y){ void IntelliTool::onMouseMoved(int x, int y){
if(drawing) if(isDrawing)
Canvas->image->calculateVisiblity(); Canvas->image->calculateVisiblity();
} }
@@ -48,17 +48,17 @@ void IntelliTool::onWheelScrolled(int value){
} }
void IntelliTool::createToolLayer(){ void IntelliTool::createToolLayer(){
Area->createTempLayerAfter(Area->activeLayer); Area->createTempTopLayer(Area->activeLayer);
this->Active=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)]; this->activeLayer=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
this->Canvas=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer+1)]; this->Canvas=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer+1)];
} }
void IntelliTool::mergeToolLayer(){ void IntelliTool::mergeToolLayer(){
QColor clr_0; QColor clr_0;
QColor clr_1; QColor clr_1;
for(int y=0; y<Active->height; y++) { for(int y=0; y<activeLayer->height; y++) {
for(int x=0; x<Active->width; x++) { for(int x=0; x<activeLayer->width; x++) {
clr_0=Active->image->imageData.pixelColor(x,y); clr_0=activeLayer->image->imageData.pixelColor(x,y);
clr_1=Canvas->image->imageData.pixelColor(x,y); clr_1=Canvas->image->imageData.pixelColor(x,y);
float t = static_cast<float>(clr_1.alpha())/255.f; float t = static_cast<float>(clr_1.alpha())/255.f;
int r =static_cast<int>(static_cast<float>(clr_1.red())*(t)+static_cast<float>(clr_0.red())*(1.f-t)+0.5f); int r =static_cast<int>(static_cast<float>(clr_1.red())*(t)+static_cast<float>(clr_0.red())*(1.f-t)+0.5f);
@@ -70,7 +70,7 @@ void IntelliTool::mergeToolLayer(){
clr_0.setBlue(b); clr_0.setBlue(b);
clr_0.setAlpha(a); clr_0.setAlpha(a);
Active->image->imageData.setPixelColor(x, y, clr_0); activeLayer->image->imageData.setPixelColor(x, y, clr_0);
} }
} }
} }

View File

@@ -40,7 +40,7 @@ IntelliColorPicker* colorPicker;
/*! /*!
* \brief A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews. * \brief A pointer to the underlying active Layer, do not work on this. This is used for data grabbing or previews.
*/ */
LayerObject* Active; LayerObject* activeLayer;
/*! /*!
* \brief A pointer to the drawing canvas of the tool, work on this. * \brief A pointer to the drawing canvas of the tool, work on this.
@@ -50,7 +50,7 @@ LayerObject* Canvas;
/*! /*!
* \brief A flag checking if the user is currently drawing or not. * \brief A flag checking if the user is currently drawing or not.
*/ */
bool drawing = false; bool isDrawing = false;
public: public:
/*! /*!

View File

@@ -5,46 +5,46 @@
IntelliToolCircle::IntelliToolCircle(PaintingArea* Area, IntelliColorPicker* colorPicker) IntelliToolCircle::IntelliToolCircle(PaintingArea* Area, IntelliColorPicker* colorPicker)
: IntelliTool(Area, colorPicker){ : IntelliTool(Area, colorPicker){
this->alphaInner = QInputDialog::getInt(nullptr,"Inner Alpha Value", "Value:", 0,0,255,1); this->innerAlpha = QInputDialog::getInt(nullptr,"Inner Alpha Value", "Value:", 0,0,255,1);
this->edgeWidth = QInputDialog::getInt(nullptr,"Outer edge width", "Value:", 0,1,255,1); this->borderWidth = QInputDialog::getInt(nullptr,"Outer edge width", "Value:", 0,1,255,1);
} }
IntelliToolCircle::~IntelliToolCircle(){ IntelliToolCircle::~IntelliToolCircle(){
} }
void IntelliToolCircle::drawCyrcle(int radius){ void IntelliToolCircle::drawCircle(int radius){
int outer = radius+20; int outer = radius+20;
QColor inner = this->colorPicker->getSecondColor(); QColor inner = this->colorPicker->getSecondColor();
inner.setAlpha(alphaInner); inner.setAlpha(innerAlpha);
int yMin, yMax, xMin, xMax; int yMin, yMax, xMin, xMax;
yMin = Middle.y()-radius; yMin = centerPoint.y()-radius;
yMax = Middle.y()+radius; yMax = centerPoint.y()+radius;
// x = x0+-sqrt(r2-(y-y0)2) // x = x0+-sqrt(r2-(y-y0)2)
for(int i=yMin; i<=yMax; i++) { for(int i=yMin; i<=yMax; i++) {
xMin = static_cast<int>(Middle.x()-sqrt(pow(radius,2)-pow(i-Middle.y(),2))); xMin = static_cast<int>(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
xMax = static_cast<int>(Middle.x()+sqrt(pow(radius,2)-pow(i-Middle.y(),2))); xMax = static_cast<int>(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
this->Canvas->image->drawLine(QPoint(xMin,i), QPoint(xMax,i),inner,1); this->Canvas->image->drawLine(QPoint(xMin,i), QPoint(xMax,i),inner,1);
} }
//TODO implement circle drawing algorithm bresenham //TODO implement circle drawing algorithm bresenham
radius = static_cast<int>(radius +(this->edgeWidth/2.)-1.); radius = static_cast<int>(radius +(this->borderWidth/2.)-1.);
yMin = (Middle.y()-radius); yMin = (centerPoint.y()-radius);
yMax = (Middle.y()+radius); yMax = (centerPoint.y()+radius);
for(int i=yMin; i<=yMax; i++) { for(int i=yMin; i<=yMax; i++) {
xMin = static_cast<int>(Middle.x()-sqrt(pow(radius,2)-pow(i-Middle.y(),2))); xMin = static_cast<int>(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
xMax = static_cast<int>(Middle.x()+sqrt(pow(radius,2)-pow(i-Middle.y(),2))); xMax = static_cast<int>(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
this->Canvas->image->drawPoint(QPoint(xMin,i), colorPicker->getFirstColor(),edgeWidth); this->Canvas->image->drawPoint(QPoint(xMin,i), colorPicker->getFirstColor(),borderWidth);
this->Canvas->image->drawPoint(QPoint(xMax,i), colorPicker->getFirstColor(),edgeWidth); this->Canvas->image->drawPoint(QPoint(xMax,i), colorPicker->getFirstColor(),borderWidth);
} }
xMin = (Middle.x()-radius); xMin = (centerPoint.x()-radius);
xMax = (Middle.x()+radius); xMax = (centerPoint.x()+radius);
for(int i=xMin; i<=xMax; i++) { for(int i=xMin; i<=xMax; i++) {
int yMin = static_cast<int>(Middle.y()-sqrt(pow(radius,2)-pow(i-Middle.x(),2))); int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
int yMax = static_cast<int>(Middle.y()+sqrt(pow(radius,2)-pow(i-Middle.x(),2))); int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
this->Canvas->image->drawPoint(QPoint(i, yMin), colorPicker->getFirstColor(),edgeWidth); this->Canvas->image->drawPoint(QPoint(i, yMin), colorPicker->getFirstColor(),borderWidth);
this->Canvas->image->drawPoint(QPoint(i, yMax), colorPicker->getFirstColor(),edgeWidth); this->Canvas->image->drawPoint(QPoint(i, yMax), colorPicker->getFirstColor(),borderWidth);
} }
} }
@@ -58,9 +58,9 @@ void IntelliToolCircle::onMouseRightReleased(int x, int y){
void IntelliToolCircle::onMouseLeftPressed(int x, int y){ void IntelliToolCircle::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y); IntelliTool::onMouseLeftPressed(x,y);
this->Middle=QPoint(x,y); this->centerPoint=QPoint(x,y);
int radius = 1; int radius = 1;
drawCyrcle(radius); drawCircle(radius);
Canvas->image->calculateVisiblity(); Canvas->image->calculateVisiblity();
} }
@@ -70,18 +70,18 @@ void IntelliToolCircle::onMouseLeftReleased(int x, int y){
void IntelliToolCircle::onWheelScrolled(int value){ void IntelliToolCircle::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value); IntelliTool::onWheelScrolled(value);
this->edgeWidth+=value; this->borderWidth+=value;
if(this->edgeWidth<=0) { if(this->borderWidth<=0) {
this->edgeWidth=1; this->borderWidth=1;
} }
} }
void IntelliToolCircle::onMouseMoved(int x, int y){ void IntelliToolCircle::onMouseMoved(int x, int y){
if(this->drawing) { if(this->isDrawing) {
this->Canvas->image->drawPlain(Qt::transparent); this->Canvas->image->drawPlain(Qt::transparent);
QPoint next(x,y); QPoint next(x,y);
int radius = static_cast<int>(sqrt(pow((Middle.x()-x),2)+pow((Middle.y()-y),2))); int radius = static_cast<int>(sqrt(pow((centerPoint.x()-x),2)+pow((centerPoint.y()-y),2)));
drawCyrcle(radius); drawCircle(radius);
} }
IntelliTool::onMouseMoved(x,y); IntelliTool::onMouseMoved(x,y);
} }

View File

@@ -12,22 +12,22 @@ class IntelliToolCircle : public IntelliTool {
* \brief A function that implements a circle drawing algorithm. * \brief A function that implements a circle drawing algorithm.
* \param radius - The radius of the circle. * \param radius - The radius of the circle.
*/ */
void drawCyrcle(int radius); void drawCircle(int radius);
/*! /*!
* \brief The center of the circle. * \brief The center of the circle.
*/ */
QPoint Middle; QPoint centerPoint;
/*! /*!
* \brief The alpha value of the inner circle. * \brief The alpha value of the inner circle.
*/ */
int alphaInner; int innerAlpha;
/*! /*!
* \brief The width of the outer circle edge. * \brief The width of the outer circle edge.
*/ */
int edgeWidth; int borderWidth;
public: public:
/*! /*!
* \brief A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and edgeWidth. * \brief A constructor setting the general paintingArea and colorPicker. And reading in the inner alpha and edgeWidth.

View File

@@ -31,7 +31,7 @@ void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){
std::queue<QPoint> Q; std::queue<QPoint> Q;
Q.push(start); Q.push(start);
QColor oldColor = this->Active->image->getPixelColor(start); QColor oldColor = this->activeLayer->image->getPixelColor(start);
QColor newColor = this->colorPicker->getFirstColor(); QColor newColor = this->colorPicker->getFirstColor();
Canvas->image->drawPixel(start,newColor); Canvas->image->drawPixel(start,newColor);
@@ -44,19 +44,19 @@ void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){
right = QPoint(Current.x()+1,Current.y() ); right = QPoint(Current.x()+1,Current.y() );
top = QPoint(Current.x(),Current.y()-1); top = QPoint(Current.x(),Current.y()-1);
down = QPoint(Current.x(),Current.y()+1); down = QPoint(Current.x(),Current.y()+1);
if((right.x() < Canvas->width) && (Canvas->image->getPixelColor(right) != newColor) && (Active->image->getPixelColor(right) == oldColor)) { if((right.x() < Canvas->width) && (Canvas->image->getPixelColor(right) != newColor) && (activeLayer->image->getPixelColor(right) == oldColor)) {
Canvas->image->drawPixel(right,newColor); Canvas->image->drawPixel(right,newColor);
Q.push(right); Q.push(right);
} }
if((left.x() >= 0) && (Canvas->image->getPixelColor(left) != newColor) && (Active->image->getPixelColor(left) == oldColor)) { if((left.x() >= 0) && (Canvas->image->getPixelColor(left) != newColor) && (activeLayer->image->getPixelColor(left) == oldColor)) {
Canvas->image->drawPixel(left,newColor); Canvas->image->drawPixel(left,newColor);
Q.push(left); Q.push(left);
} }
if((top.y() >= 0) && (Canvas->image->getPixelColor(top) != newColor) && (Active->image->getPixelColor(top) == oldColor)) { if((top.y() >= 0) && (Canvas->image->getPixelColor(top) != newColor) && (activeLayer->image->getPixelColor(top) == oldColor)) {
Canvas->image->drawPixel(top,newColor); Canvas->image->drawPixel(top,newColor);
Q.push(top); Q.push(top);
} }
if((down.y() < Canvas->height) && (Canvas->image->getPixelColor(down) != newColor) && (Active->image->getPixelColor(down) == oldColor)) { if((down.y() < Canvas->height) && (Canvas->image->getPixelColor(down) != newColor) && (activeLayer->image->getPixelColor(down) == oldColor)) {
Canvas->image->drawPixel(down,newColor); Canvas->image->drawPixel(down,newColor);
Q.push(down); Q.push(down);
} }

View File

@@ -24,8 +24,8 @@ void IntelliToolLine::onMouseRightReleased(int x, int y){
void IntelliToolLine::onMouseLeftPressed(int x, int y){ void IntelliToolLine::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y); IntelliTool::onMouseLeftPressed(x,y);
this->start=QPoint(x,y); this->lineStartingPoint=QPoint(x,y);
this->Canvas->image->drawPoint(start, colorPicker->getFirstColor(),lineWidth); this->Canvas->image->drawPoint(lineStartingPoint, colorPicker->getFirstColor(),lineWidth);
Canvas->image->calculateVisiblity(); Canvas->image->calculateVisiblity();
} }
@@ -42,18 +42,18 @@ void IntelliToolLine::onWheelScrolled(int value){
} }
void IntelliToolLine::onMouseMoved(int x, int y){ void IntelliToolLine::onMouseMoved(int x, int y){
if(this->drawing) { if(this->isDrawing) {
this->Canvas->image->drawPlain(Qt::transparent); this->Canvas->image->drawPlain(Qt::transparent);
QPoint next(x,y); QPoint next(x,y);
switch(lineStyle) { switch(lineStyle) {
case LineStyle::SOLID_LINE: case LineStyle::SOLID_LINE:
this->Canvas->image->drawLine(start,next,colorPicker->getFirstColor(),lineWidth); this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),lineWidth);
break; break;
case LineStyle::DOTTED_LINE: case LineStyle::DOTTED_LINE:
QPoint p1 =start.x() <= next.x() ? start : next; QPoint p1 =lineStartingPoint.x() <= next.x() ? lineStartingPoint : next;
QPoint p2 =start.x() < next.x() ? next : start; QPoint p2 =lineStartingPoint.x() < next.x() ? next : lineStartingPoint;
int m = static_cast<int>((p2.y()-p1.y())/(p2.x()-p1.x())+0.5f); int m = static_cast<int>(static_cast<float>(p2.y()-p1.y())/static_cast<float>(p2.x()-p1.x())+0.5f);
int c = start.y()-start.x()*m; int c = lineStartingPoint.y()-lineStartingPoint.x()*m;
break; break;
} }

View File

@@ -19,7 +19,7 @@ class IntelliToolLine : public IntelliTool {
/*! /*!
* \brief The starting point of the line. * \brief The starting point of the line.
*/ */
QPoint start; QPoint lineStartingPoint;
/*! /*!
* \brief The width of the line to draw. * \brief The width of the line to draw.

View File

@@ -23,8 +23,8 @@ void IntelliToolPen::onMouseRightReleased(int x, int y){
void IntelliToolPen::onMouseLeftPressed(int x, int y){ void IntelliToolPen::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y); IntelliTool::onMouseLeftPressed(x,y);
this->point=QPoint(x,y); this->previousPoint=QPoint(x,y);
this->Canvas->image->drawPixel(point, colorPicker->getFirstColor()); this->Canvas->image->drawPixel(previousPoint, colorPicker->getFirstColor());
Canvas->image->calculateVisiblity(); Canvas->image->calculateVisiblity();
} }
@@ -33,10 +33,10 @@ void IntelliToolPen::onMouseLeftReleased(int x, int y){
} }
void IntelliToolPen::onMouseMoved(int x, int y){ void IntelliToolPen::onMouseMoved(int x, int y){
if(this->drawing) { if(this->isDrawing) {
QPoint newPoint(x,y); QPoint newPoint(x,y);
this->Canvas->image->drawLine(this->point, newPoint, colorPicker->getFirstColor(), penWidth); this->Canvas->image->drawLine(this->previousPoint, newPoint, colorPicker->getFirstColor(), penWidth);
this->point=newPoint; this->previousPoint=newPoint;
} }
IntelliTool::onMouseMoved(x,y); IntelliTool::onMouseMoved(x,y);
} }

View File

@@ -15,7 +15,7 @@ int penWidth;
/*! /*!
* \brief point - Represents the previous point to help drawing a line. * \brief point - Represents the previous point to help drawing a line.
*/ */
QPoint point; QPoint previousPoint;
public: public:
/*! /*!
* \brief A constructor setting the general paintingArea and colorPicker. Reading the penWidth. * \brief A constructor setting the general paintingArea and colorPicker. Reading the penWidth.

View File

@@ -6,9 +6,9 @@
IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker) IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker)
: IntelliTool(Area, colorPicker){ : IntelliTool(Area, colorPicker){
this->alphaInner = QInputDialog::getInt(nullptr,"Inner Alpha Value", "Value:", 0,0,255,1); this->innerAlpha = QInputDialog::getInt(nullptr,"Inner Alpha Value", "Value:", 0,0,255,1);
lineWidth = QInputDialog::getInt(nullptr,"Line Width Input", "Width",1,1,50,1); lineWidth = QInputDialog::getInt(nullptr,"Line Width Input", "Width",1,1,50,1);
PointIsNearStart = false; isPointNearStart = false;
isDrawing = false; isDrawing = false;
} }
@@ -28,7 +28,7 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){
this->Canvas->image->calculateVisiblity(); this->Canvas->image->calculateVisiblity();
} }
else if(isDrawing && isNearStart(x,y,QPointList.front())) { else if(isDrawing && isNearStart(x,y,QPointList.front())) {
PointIsNearStart = true; isPointNearStart = true;
this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), lineWidth); this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), lineWidth);
this->Canvas->image->calculateVisiblity(); this->Canvas->image->calculateVisiblity();
} }
@@ -42,21 +42,21 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){
void IntelliToolPolygon::onMouseRightPressed(int x, int y){ void IntelliToolPolygon::onMouseRightPressed(int x, int y){
isDrawing = false; isDrawing = false;
PointIsNearStart = false; isPointNearStart = false;
QPointList.clear(); QPointList.clear();
IntelliTool::onMouseRightPressed(x,y); IntelliTool::onMouseRightPressed(x,y);
} }
void IntelliToolPolygon::onMouseLeftReleased(int x, int y){ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){
if(PointIsNearStart && QPointList.size() > 1) { if(isPointNearStart && QPointList.size() > 1) {
PointIsNearStart = false; isPointNearStart = false;
isDrawing = false; isDrawing = false;
std::vector<Triangle> Triangles = IntelliHelper::calculateTriangles(QPointList); std::vector<Triangle> Triangles = IntelliHelper::calculateTriangles(QPointList);
QPoint Point; QPoint Point;
QColor colorTwo(colorPicker->getSecondColor()); QColor colorTwo(colorPicker->getSecondColor());
colorTwo.setAlpha(alphaInner); colorTwo.setAlpha(innerAlpha);
for(int i = 0; i < Active->width; i++) { for(int i = 0; i < activeLayer->width; i++) {
for(int j = 0; j < Active->height; j++) { for(int j = 0; j < activeLayer->height; j++) {
Point = QPoint(i,j); Point = QPoint(i,j);
if(IntelliHelper::isInPolygon(Triangles,Point)) { if(IntelliHelper::isInPolygon(Triangles,Point)) {
this->Canvas->image->drawPixel(Point, colorTwo); this->Canvas->image->drawPixel(Point, colorTwo);

View File

@@ -32,12 +32,12 @@ bool isDrawing;
/*! /*!
* \brief PointIsNearStart true, when last click near startpoint, else false. * \brief PointIsNearStart true, when last click near startpoint, else false.
*/ */
bool PointIsNearStart; bool isPointNearStart;
/*! /*!
* \brief The alpha value of the inner circle. * \brief The alpha value of the inner circle.
*/ */
int alphaInner; int innerAlpha;
/*! /*!
* \brief QPointList list of all points of the polygon. * \brief QPointList list of all points of the polygon.

View File

@@ -4,30 +4,30 @@
IntelliToolRectangle::IntelliToolRectangle(PaintingArea* Area, IntelliColorPicker* colorPicker) IntelliToolRectangle::IntelliToolRectangle(PaintingArea* Area, IntelliColorPicker* colorPicker)
: IntelliTool(Area, colorPicker){ : IntelliTool(Area, colorPicker){
this->alphaInner = QInputDialog::getInt(nullptr,"Inner Alpha Value", "Value:", 0,0,255,1); this->innerAlpha = QInputDialog::getInt(nullptr,"Inner Alpha Value", "Value:", 0,0,255,1);
this->edgeWidth = QInputDialog::getInt(nullptr,"Outer edge width", "Value:", 0,1,255,1); this->borderWidth = QInputDialog::getInt(nullptr,"Outer edge width", "Value:", 0,1,255,1);
} }
IntelliToolRectangle::~IntelliToolRectangle(){ IntelliToolRectangle::~IntelliToolRectangle(){
} }
void IntelliToolRectangle::drawRectangle(QPoint otherCornor){ void IntelliToolRectangle::drawRectangle(QPoint otherCorner){
int xMin = std::min(originCornor.x(), otherCornor.x()); int xMin = std::min(originCorner.x(), otherCorner.x());
int xMax = std::max(originCornor.x(), otherCornor.x()); int xMax = std::max(originCorner.x(), otherCorner.x());
int yMin = std::min(originCornor.y(), otherCornor.y()); int yMin = std::min(originCorner.y(), otherCorner.y());
int yMax = std::max(originCornor.y(), otherCornor.y()); int yMax = std::max(originCorner.y(), otherCorner.y());
QColor clr = colorPicker->getSecondColor(); QColor clr = colorPicker->getSecondColor();
clr.setAlpha(alphaInner); clr.setAlpha(innerAlpha);
for(int y=yMin; y<=yMax; y++) { for(int y=yMin; y<=yMax; y++) {
this->Canvas->image->drawLine(QPoint(xMin,y), QPoint(xMax, y), clr, 1); this->Canvas->image->drawLine(QPoint(xMin,y), QPoint(xMax, y), clr, 1);
} }
this->Canvas->image->drawLine(QPoint(xMin, yMin),QPoint(xMin, yMax), this->colorPicker->getFirstColor(), edgeWidth); this->Canvas->image->drawLine(QPoint(xMin, yMin),QPoint(xMin, yMax), this->colorPicker->getFirstColor(), borderWidth);
this->Canvas->image->drawLine(QPoint(xMin, yMin),QPoint(xMax, yMin), this->colorPicker->getFirstColor(), edgeWidth); this->Canvas->image->drawLine(QPoint(xMin, yMin),QPoint(xMax, yMin), this->colorPicker->getFirstColor(), borderWidth);
this->Canvas->image->drawLine(QPoint(xMax, yMax),QPoint(xMin, yMax), this->colorPicker->getFirstColor(), edgeWidth); this->Canvas->image->drawLine(QPoint(xMax, yMax),QPoint(xMin, yMax), this->colorPicker->getFirstColor(), borderWidth);
this->Canvas->image->drawLine(QPoint(xMax, yMax),QPoint(xMax, yMin), this->colorPicker->getFirstColor(), edgeWidth); this->Canvas->image->drawLine(QPoint(xMax, yMax),QPoint(xMax, yMin), this->colorPicker->getFirstColor(), borderWidth);
} }
void IntelliToolRectangle::onMouseRightPressed(int x, int y){ void IntelliToolRectangle::onMouseRightPressed(int x, int y){
@@ -40,8 +40,8 @@ void IntelliToolRectangle::onMouseRightReleased(int x, int y){
void IntelliToolRectangle::onMouseLeftPressed(int x, int y){ void IntelliToolRectangle::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y); IntelliTool::onMouseLeftPressed(x,y);
this->originCornor=QPoint(x,y); this->originCorner=QPoint(x,y);
drawRectangle(originCornor); drawRectangle(originCorner);
Canvas->image->calculateVisiblity(); Canvas->image->calculateVisiblity();
} }
@@ -50,7 +50,7 @@ void IntelliToolRectangle::onMouseLeftReleased(int x, int y){
} }
void IntelliToolRectangle::onMouseMoved(int x, int y){ void IntelliToolRectangle::onMouseMoved(int x, int y){
if(this->drawing) { if(this->isDrawing) {
this->Canvas->image->drawPlain(Qt::transparent); this->Canvas->image->drawPlain(Qt::transparent);
QPoint next(x,y); QPoint next(x,y);
drawRectangle(next); drawRectangle(next);
@@ -60,8 +60,8 @@ void IntelliToolRectangle::onMouseMoved(int x, int y){
void IntelliToolRectangle::onWheelScrolled(int value){ void IntelliToolRectangle::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value); IntelliTool::onWheelScrolled(value);
this->edgeWidth+=value; this->borderWidth+=value;
if(this->edgeWidth<=0) { if(this->borderWidth<=0) {
this->edgeWidth=1; this->borderWidth=1;
} }
} }

View File

@@ -11,22 +11,22 @@
class IntelliToolRectangle : public IntelliTool { class IntelliToolRectangle : public IntelliTool {
/*! /*!
* \brief A function that implements a rectagle drawing algorithm. * \brief A function that implements a rectagle drawing algorithm.
* \param otherCornor - The second corner point of the rectangle. * \param othercorner - The second corner point of the rectangle.
*/ */
void drawRectangle(QPoint otherCornor); void drawRectangle(QPoint otherCorner);
/*! /*!
* \brief originCornor - The first corner point of the rectangle. * \brief origincorner - The first corner point of the rectangle.
*/ */
QPoint originCornor; QPoint originCorner;
/*! /*!
* \brief alphaInner- Represents the alpha value of the inside. * \brief alphaInner- Represents the alpha value of the inside.
*/ */
int alphaInner; int innerAlpha;
/*! /*!
* \brief edgeWidth - The width of the rectangle edges. * \brief edgeWidth - The width of the rectangle edges.
*/ */
int edgeWidth; int borderWidth;
public: public:
/*! /*!
* \brief A constructor setting the general paintingArea and colorPicker. And reading in the alphaInner and edgeWidth. * \brief A constructor setting the general paintingArea and colorPicker. And reading in the alphaInner and edgeWidth.