Merge branch 'dev' into dev-colorpalette

This commit is contained in:
Jan Schuffenhauer
2020-01-16 00:11:24 +01:00
9 changed files with 237 additions and 146 deletions

View File

@@ -1,6 +1,3 @@
src/GUI/IntelliPhotoGui.cpp:83:15: style: Variable 'layer' is assigned a value that is never used. [unreadVariable]
int layer = paintingArea->addLayer(width,height,0,0);
^
src/IntelliHelper/IntelliColorPicker.cpp:4:3: performance: Variable 'firstColor' is assigned in constructor body. Consider performing initialization in initialization list. [useInitializationList] src/IntelliHelper/IntelliColorPicker.cpp:4:3: performance: Variable 'firstColor' is assigned in constructor body. Consider performing initialization in initialization list. [useInitializationList]
firstColor = {255,0,0,255}; firstColor = {255,0,0,255};
^ ^
@@ -10,9 +7,9 @@ src/IntelliHelper/IntelliColorPicker.cpp:5:3: performance: Variable 'secondColor
src/IntelliHelper/IntelliTriangulation.cpp:116:63: style: Parameter 'triangles' can be declared with const [constParameter] src/IntelliHelper/IntelliTriangulation.cpp:116:63: style: Parameter 'triangles' can be declared with const [constParameter]
bool IntelliTriangulation::isInPolygon(std::vector<Triangle> &triangles, QPoint &point){ bool IntelliTriangulation::isInPolygon(std::vector<Triangle> &triangles, QPoint &point){
^ ^
src/Layer/PaintingArea.cpp:335:22: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition] src/Layer/PaintingArea.cpp:334:28: style: Redundant condition: If 'activeLayer > 0', the comparison 'activeLayer != -1' is always true. [redundantCondition]
if(activeLayer!=-1 && activeLayer>0) { if(activeLayer!=-1 && activeLayer>0) {
^ ^
src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::ActiveType' is not initialized in the constructor. [uninitMemberVar] src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::ActiveType' is not initialized in the constructor. [uninitMemberVar]
IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){
^ ^
@@ -22,34 +19,31 @@ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, In
src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::Canvas' is not initialized in the constructor. [uninitMemberVar] src/Tool/IntelliTool.cpp:4:14: warning: Member variable 'IntelliTool::Canvas' is not initialized in the constructor. [uninitMemberVar]
IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){ IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){
^ ^
src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMin' shadows outer variable [shadowVariable] src/Tool/IntelliToolCircle.cpp:42:9: style: Local variable 'yMin' shadows outer variable [shadowVariable]
int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
^ ^
src/Tool/IntelliToolCircle.cpp:19:7: note: Shadowed declaration src/Tool/IntelliToolCircle.cpp:18:7: note: Shadowed declaration
int yMin, yMax, xMin, xMax; int yMin, yMax, xMin, xMax;
^ ^
src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable src/Tool/IntelliToolCircle.cpp:42:9: note: Shadow variable
int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
^ ^
src/Tool/IntelliToolCircle.cpp:44:9: style: Local variable 'yMax' shadows outer variable [shadowVariable] src/Tool/IntelliToolCircle.cpp:43:9: style: Local variable 'yMax' shadows outer variable [shadowVariable]
int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
^ ^
src/Tool/IntelliToolCircle.cpp:19:13: note: Shadowed declaration src/Tool/IntelliToolCircle.cpp:18:13: note: Shadowed declaration
int yMin, yMax, xMin, xMax; int yMin, yMax, xMin, xMax;
^ ^
src/Tool/IntelliToolCircle.cpp:44:9: note: Shadow variable src/Tool/IntelliToolCircle.cpp:43:9: note: Shadow variable
int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2))); int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
^ ^
src/Tool/IntelliToolCircle.cpp:16:13: style: Variable 'outer' is assigned a value that is never used. [unreadVariable]
int outer = radius+20;
^
src/Tool/IntelliToolLine.cpp:51:13: style: Variable 'c' is assigned a value that is never used. [unreadVariable] src/Tool/IntelliToolLine.cpp:51:13: style: Variable 'c' is assigned a value that is never used. [unreadVariable]
int c = lineStartingPoint.y()-lineStartingPoint.x()*m; int c = lineStartingPoint.y()-lineStartingPoint.x()*m;
^ ^
src/Tool/IntelliToolPolygon.h:25:6: warning: The class 'IntelliToolPolygon' defines member variable with name 'isDrawing' also defined in its parent class 'IntelliTool'. [duplInheritedMember] src/Tool/IntelliToolPolygon.h:25:6: warning: The class 'IntelliToolPolygon' defines member variable with name 'isDrawing' also defined in its parent class 'IntelliTool'. [duplInheritedMember]
bool isDrawing; bool isDrawing;
^ ^
src/Tool/IntelliTool.h:68:6: note: Parent variable 'IntelliTool::isDrawing' src/Tool/IntelliTool.h:69:6: note: Parent variable 'IntelliTool::isDrawing'
bool isDrawing = false; bool isDrawing = false;
^ ^
src/Tool/IntelliToolPolygon.h:25:6: note: Derived variable 'IntelliToolPolygon::isDrawing' src/Tool/IntelliToolPolygon.h:25:6: note: Derived variable 'IntelliToolPolygon::isDrawing'
@@ -58,34 +52,31 @@ bool isDrawing;
src/GUI/IntelliPhotoGui.cpp:23:0: style: The function 'closeEvent' is never used. [unusedFunction] src/GUI/IntelliPhotoGui.cpp:23:0: style: The function 'closeEvent' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:271:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:261:0: style: The function 'mouseMoveEvent' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:255:0: style: The function 'mousePressEvent' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:242:0: style: The function 'mousePressEvent' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:281:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:274:0: style: The function 'mouseReleaseEvent' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:307:0: style: The function 'paintEvent' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:304:0: style: The function 'paintEvent' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:318:0: style: The function 'resizeEvent' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:315:0: style: The function 'resizeEvent' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:323:0: style: The function 'resizeLayer' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:320:0: style: The function 'resizeLayer' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:175:0: style: The function 'slotActivateLayer' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:168:0: style: The function 'slotActivateLayer' is never used. [unusedFunction]
^ ^
src/GUI/IntelliPhotoGui.cpp:157:0: style: The function 'slotClearActiveLayer' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:88:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction]
^ ^
src/Layer/PaintingArea.cpp:83:0: style: The function 'slotDeleteActiveLayer' is never used. [unusedFunction] src/Layer/PaintingArea.cpp:289:0: style: The function 'wheelEvent' is never used. [unusedFunction]
^
src/Layer/PaintingArea.cpp:294: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] nofile:0:0: information: Cppcheck cannot find all the include files (use --check-config for details) [missingInclude]

View File

@@ -65,8 +65,29 @@ void IntelliPhotoGui::slotSave(){
saveFile(fileFormat); saveFile(fileFormat);
} }
// Opens a dialog that allows the user to create a New Layer // Opens a dialog that allows the user to create a New RASTER Layer
void IntelliPhotoGui::slotCreateNewLayer(){ void IntelliPhotoGui::slotCreateNewRasterLayer(){
// Stores button value
bool ok1, ok2;
// "New Layer" is the title of the window
// the next tr is the text to display
// Define the standard Value, min, max, step and ok button
int width = IntelliInputDialog::getInt("New Layer", "Width:", 200, 1, paintingArea->getMaxWidth(), 1, &ok1);
int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
// Create New Layer
if (ok1&&ok2) {
paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::RASTERIMAGE);
UpdateGui();
}
}
// Opens a dialog that allows the user to create a New SHAPED Layer
void IntelliPhotoGui::slotCreateNewShapedLayer(){
// Stores button value
bool ok1, ok2;
bool ok1, ok2; bool ok1, ok2;
// "New Layer" is the title of the window // "New Layer" is the title of the window
@@ -77,10 +98,10 @@ void IntelliPhotoGui::slotCreateNewLayer(){
int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2); int height = IntelliInputDialog::getInt("New Layer", "Height:", 200, 1, paintingArea->getMaxHeight(), 1, &ok2);
// Create New Layer // Create New Layer
if(ok1&&ok2){ if (ok1&&ok2) {
paintingArea->addLayer(width,height,0,0); paintingArea->addLayer(width,height,0,0,IntelliImage::ImageType::SHAPEDIMAGE);
UpdateGui(); UpdateGui();
} }
} }
// Opens a dialog that allows the user to delete a Layer // Opens a dialog that allows the user to delete a Layer
@@ -111,10 +132,27 @@ void IntelliPhotoGui::slotSetActiveAlpha(){
// "New Alpha" is the title of the window // "New Alpha" is the title of the window
int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2); int alpha = IntelliInputDialog::getInt("Layer to set on", "Alpha:", 255, 0, 255, 1, &ok2);
if(ok1&&ok2){ if (ok1&&ok2)
paintingArea->setLayerAlpha(layer-1,alpha); {
UpdateGui(); paintingArea->setLayerAlpha(layer-1,alpha);
} UpdateGui();
}
}
void IntelliPhotoGui::slotSetPolygon(){
// Stores button value
bool ok1;
// "Layer to set on" is the title of the window
// the next tr is the text to display
// Define the standard Value, min, max, step and ok button
int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", paintingArea->getNumberOfActiveLayer()+1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
if (ok1)
{
paintingArea->setPolygon(layer-1);
UpdateGui();
}
} }
void IntelliPhotoGui::slotPositionMoveUp(){ void IntelliPhotoGui::slotPositionMoveUp(){
@@ -147,33 +185,13 @@ void IntelliPhotoGui::slotMoveLayerDown(){
update(); update();
} }
void IntelliPhotoGui::slotClearActiveLayer(){
// "Red Input" is the title of the window
// the next tr is the text to display
// Define the standard Value, min, max, step and ok button
// "Red Input" is the title of the window
int red = IntelliInputDialog::getInt("Green Input", "Green:", 255, 0, 255, 1);
// "Green Input" is the title of the window
int green = IntelliInputDialog::getInt("Green Input", "Green:", 255, 0, 255, 1);
// "Blue Input" is the title of the window
int blue = IntelliInputDialog::getInt("Blue Input", "Blue:", 255, 0, 255, 1);
// "Alpha Input" is the title of the window
int alpha = IntelliInputDialog::getInt("Alpha Input", "Alpha:", 255, 0, 255, 1);
paintingArea->floodFill(red, green, blue, alpha);
UpdateGui();
}
void IntelliPhotoGui::slotSetActiveLayer(){ void IntelliPhotoGui::slotSetActiveLayer(){
bool ok1; bool ok1;
// "Layer to set on" is the title of the window // "Layer to set on" is the title of the window
// the next tr is the text to display // the next tr is the text to display
// Define the standard Value, min, max, step and ok button // Define the standard Value, min, max, step and ok button
int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1); int layer = IntelliInputDialog::getInt("Layer to set on", "Layer:", 1, 1, static_cast<int>(paintingArea->layerBundle.size()), 1, &ok1);
if(ok1){ if(ok1){
paintingArea->setLayerActive(layer-1); paintingArea->setLayerActive(layer-1);
UpdateGui(); UpdateGui();
@@ -326,10 +344,16 @@ void IntelliPhotoGui::createActions(){
actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen())); connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()));
// Create New Layer action and tie to IntelliPhotoGui::newLayer() // Create New RASTER Layer action and tie to IntelliPhotoGui::newLayer()
actionCreateNewLayer = new QAction(tr("&New Layer..."), this); actionCreateNewRasterLayer = new QAction(tr("&Raster Image"), this);
actionCreateNewLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); actionCreateNewRasterLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
connect(actionCreateNewLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewLayer())); connect(actionCreateNewRasterLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewRasterLayer()));
// Create New SHAPED Layer action and tie to IntelliPhotoGui::newLayer()
actionCreateNewShapedLayer = new QAction(tr("&Shaped Image"), this);
actionCreateNewShapedLayer->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N + Qt::ALT));
connect(actionCreateNewShapedLayer, SIGNAL(triggered()), this, SLOT(slotCreateNewShapedLayer()));
// Delete New Layer action and tie to IntelliPhotoGui::deleteLayer() // Delete New Layer action and tie to IntelliPhotoGui::deleteLayer()
actionDeleteLayer = new QAction(tr("&Delete Layer..."), this); actionDeleteLayer = new QAction(tr("&Delete Layer..."), this);
@@ -344,6 +368,10 @@ void IntelliPhotoGui::createActions(){
actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A)); actionSetActiveAlpha->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A));
connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha())); connect(actionSetActiveAlpha, SIGNAL(triggered()), this, SLOT(slotSetActiveAlpha()));
actionSetPolygon = new QAction(tr("&set new Polygondata"), this);
actionSetPolygon->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_P));
connect(actionSetPolygon, SIGNAL(triggered()), this, SLOT(slotSetPolygon()));
actionMovePositionUp = new QAction(tr("&move Up"), this); actionMovePositionUp = new QAction(tr("&move Up"), this);
actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up)); actionMovePositionUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up));
connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp())); connect(actionMovePositionUp, SIGNAL(triggered()), this, SLOT(slotPositionMoveUp()));
@@ -492,12 +520,17 @@ void IntelliPhotoGui::createMenus(){
renderMenu->addAction(actionUpdateRenderSettingsOn); renderMenu->addAction(actionUpdateRenderSettingsOn);
renderMenu->addAction(actionUpdateRenderSettingsOff); renderMenu->addAction(actionUpdateRenderSettingsOff);
//Attach all Layer Creations to Menu
layerCreationMenu = new QMenu(tr("&Create new Layer"), this);
layerCreationMenu->addAction(actionCreateNewRasterLayer);
layerCreationMenu->addAction(actionCreateNewShapedLayer);
// Attach all actions to Layer // Attach all actions to Layer
layerMenu = new QMenu(tr("&Layer"), this); layerMenu = new QMenu(tr("&Layer"), this);
layerMenu->addAction(actionCreateNewLayer); layerMenu->addMenu(layerCreationMenu);
layerMenu->addSeparator(); layerMenu->addSeparator();
layerMenu->addAction(actionSetActiveAlpha); layerMenu->addAction(actionSetActiveAlpha);
layerMenu->addAction(actionSetActiveLayer); layerMenu->addAction(actionSetActiveLayer);
layerMenu->addAction(actionSetPolygon);
layerMenu->addSeparator(); layerMenu->addSeparator();
layerMenu->addAction(actionMovePositionUp); layerMenu->addAction(actionMovePositionUp);
layerMenu->addAction(actionMovePositionDown); layerMenu->addAction(actionMovePositionDown);
@@ -653,7 +686,7 @@ void IntelliPhotoGui::createGui(){
SwitchColorButton->setIconSize(QSize(Buttonsize.width()*2,Buttonsize.height())); SwitchColorButton->setIconSize(QSize(Buttonsize.width()*2,Buttonsize.height()));
ActiveLayerLine = new QLabel(); ActiveLayerLine = new QLabel();
QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1); QString string = QString("Active Layer: %1").arg(paintingArea->getNumberOfActiveLayer() + 1);
ActiveLayerLine->setText(string); ActiveLayerLine->setText(string);
ActiveLayerLine->setFixedSize(Buttonsize.width()*2+10,(Buttonsize.height()*2)/3); ActiveLayerLine->setFixedSize(Buttonsize.width()*2+10,(Buttonsize.height()*2)/3);

View File

@@ -49,11 +49,12 @@ void slotOpen();
void slotSave(); void slotSave();
// layer slots here // layer slots here
void slotCreateNewLayer(); void slotCreateNewRasterLayer();
void slotCreateNewShapedLayer();
void slotDeleteLayer(); void slotDeleteLayer();
void slotClearActiveLayer();
void slotSetActiveLayer(); void slotSetActiveLayer();
void slotSetActiveAlpha(); void slotSetActiveAlpha();
void slotSetPolygon();
void slotPositionMoveUp(); void slotPositionMoveUp();
void slotPositionMoveDown(); void slotPositionMoveDown();
void slotPositionMoveLeft(); void slotPositionMoveLeft();
@@ -136,6 +137,7 @@ QMenu*saveAsMenu;
QMenu*fileMenu; QMenu*fileMenu;
QMenu*renderMenu; QMenu*renderMenu;
QMenu*optionMenu; QMenu*optionMenu;
QMenu*layerCreationMenu;
QMenu*layerMenu; QMenu*layerMenu;
QMenu*colorMenu; QMenu*colorMenu;
QMenu*toolCreationMenu; QMenu*toolCreationMenu;
@@ -171,10 +173,12 @@ QAction*actionAboutDialog;
QAction*actionAboutQtDialog; QAction*actionAboutQtDialog;
// layer change actions // layer change actions
QAction*actionCreateNewLayer; QAction* actionCreateNewRasterLayer;
QAction*actionDeleteLayer; QAction* actionCreateNewShapedLayer;
QAction* actionDeleteLayer;
QAction* actionSetActiveLayer; QAction* actionSetActiveLayer;
QAction* actionSetActiveAlpha; QAction* actionSetActiveAlpha;
QAction* actionSetPolygon;
QAction* actionMovePositionUp; QAction* actionMovePositionUp;
QAction* actionMovePositionDown; QAction* actionMovePositionDown;
QAction* actionMovePositionLeft; QAction* actionMovePositionLeft;

View File

@@ -27,6 +27,9 @@ IntelliImage* IntelliShapedImage::getDeepCopy(){
} }
void IntelliShapedImage::calculateVisiblity(){ void IntelliShapedImage::calculateVisiblity(){
if(polygonData.size()<2) {
return;
}
if(fastRenderering) { if(fastRenderering) {
this->imageData = imageData.convertToFormat(QImage::Format_ARGB32); this->imageData = imageData.convertToFormat(QImage::Format_ARGB32);
} }
@@ -91,6 +94,19 @@ void IntelliShapedImage::setPolygon(const std::vector<QPoint>& polygonData){
this->polygonData.push_back(QPoint(element.x(), element.y())); this->polygonData.push_back(QPoint(element.x(), element.y()));
} }
triangles = IntelliTriangulation::calculateTriangles(polygonData); triangles = IntelliTriangulation::calculateTriangles(polygonData);
if(fastRenderering) {
imageData = imageData.convertToFormat(QImage::Format_ARGB32);
}
for(int y = 0; y<imageData.height(); y++) {
for(int x = 0; x<imageData.width(); x++) {
QColor clr = imageData.pixelColor(x,y);
clr.setAlpha(255);
imageData.setPixelColor(x,y,clr);
}
}
if(fastRenderering) {
imageData = imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
calculateVisiblity(); calculateVisiblity();
return; return;

View File

@@ -18,24 +18,13 @@
#include "Tool/IntelliToolFloodFill.h" #include "Tool/IntelliToolFloodFill.h"
#include "Tool/IntelliToolPolygon.h" #include "Tool/IntelliToolPolygon.h"
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->setLayerDimensions(maxWidth, maxHeight); this->setLayerDimensions(maxWidth, maxHeight);
this->addLayer(200,200,0,0,IntelliImage::ImageType::SHAPEDIMAGE);
layerBundle[0].image->drawPlain(QColor(0,0,255,255));
std::vector<QPoint> polygon;
polygon.push_back(QPoint(100,000));
polygon.push_back(QPoint(200,100));
polygon.push_back(QPoint(100,200));
polygon.push_back(QPoint(000,100));
layerBundle[0].image->setPolygon(polygon);
this->addLayer(200,200,150,150,IntelliImage::ImageType::RASTERIMAGE); activeLayer=-1;
layerBundle[1].image->drawPlain(QColor(0,255,0,255));
layerBundle[1].alpha=200;
activeLayer=0;
} }
PaintingArea::~PaintingArea(){ PaintingArea::~PaintingArea(){
@@ -64,6 +53,7 @@ void PaintingArea::setLayerDimensions(int maxWidth, int maxHeight){
int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOffset, IntelliImage::ImageType type){ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOffset, IntelliImage::ImageType type){
LayerObject newLayer; LayerObject newLayer;
updateTools();
newLayer.width = width; newLayer.width = width;
newLayer.height = height; newLayer.height = height;
newLayer.widthOffset = widthOffset; newLayer.widthOffset = widthOffset;
@@ -80,7 +70,10 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff
} }
void PaintingArea::deleteLayer(int idx){ void PaintingArea::deleteLayer(int idx, bool isTool){
if(!isTool) {
updateTools();
}
if(idx<static_cast<int>(layerBundle.size())) { if(idx<static_cast<int>(layerBundle.size())) {
this->layerBundle.erase(layerBundle.begin()+idx); this->layerBundle.erase(layerBundle.begin()+idx);
if(activeLayer>=idx) { if(activeLayer>=idx) {
@@ -100,6 +93,7 @@ void PaintingArea::slotDeleteActiveLayer(){
} }
void PaintingArea::setLayerActive(int idx){ void PaintingArea::setLayerActive(int idx){
updateTools();
if(idx>=0&&idx<static_cast<int>(layerBundle.size())) { if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
this->activeLayer=idx; this->activeLayer=idx;
} }
@@ -110,6 +104,15 @@ void PaintingArea::setLayerAlpha(int idx, int alpha){
layerBundle[static_cast<size_t>(idx)].alpha=alpha; layerBundle[static_cast<size_t>(idx)].alpha=alpha;
} }
} }
void PaintingArea::setPolygon(int idx){
if(idx>=0&&idx<static_cast<int>(layerBundle.size())) {
if(layerBundle[static_cast<size_t>(idx)].image->getTypeOfImage()==IntelliImage::ImageType::SHAPEDIMAGE) {
delete this->Tool;
this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true);
isSettingPolygon = true;
}
}
}
// Used to load the image and place it in the widget // Used to load the image and place it in the widget
bool PaintingArea::open(const QString &filePath){ bool PaintingArea::open(const QString &filePath){
@@ -147,36 +150,14 @@ bool PaintingArea::save(const QString &filePath, const char*fileFormat){
} }
} }
// Color the image area with white
void PaintingArea::floodFill(int r, int g, int b, int a){
if(this->activeLayer==-1) {
return;
}
IntelliImage* active = layerBundle[static_cast<size_t>(activeLayer)].image;
active->drawPlain(QColor(r, g, b, a));
update();
}
void PaintingArea::movePositionActive(int x, int y){ void PaintingArea::movePositionActive(int x, int y){
if(Tool!=nullptr) { updateTools();
if(Tool->getIsDrawing()) {
IntelliTool* temp = copyActiveTool();
delete this->Tool;
this->Tool = temp;
}
}
layerBundle[static_cast<size_t>(activeLayer)].widthOffset += x; layerBundle[static_cast<size_t>(activeLayer)].widthOffset += x;
layerBundle[static_cast<size_t>(activeLayer)].heightOffset += y; layerBundle[static_cast<size_t>(activeLayer)].heightOffset += y;
} }
void PaintingArea::moveActiveLayer(int idx){ void PaintingArea::moveActiveLayer(int idx){
if(Tool != nullptr) { updateTools();
if(Tool->getIsDrawing()) {
IntelliTool* temp = copyActiveTool();
delete this->Tool;
this->Tool = temp;
}
}
if(idx==1) { if(idx==1) {
this->selectLayerUp(); this->selectLayerUp();
}else if(idx==-1) { }else if(idx==-1) {
@@ -186,13 +167,7 @@ void PaintingArea::moveActiveLayer(int idx){
} }
void PaintingArea::slotActivateLayer(int a){ void PaintingArea::slotActivateLayer(int a){
if(Tool != nullptr) { updateTools();
if(Tool->getIsDrawing()) {
IntelliTool* temp = copyActiveTool();
delete this->Tool;
this->Tool = temp;
}
}
if(a>=0 && a < static_cast<int>(layerBundle.size())) { if(a>=0 && a < static_cast<int>(layerBundle.size())) {
this->setLayerActive(a); this->setLayerActive(a);
} }
@@ -344,7 +319,7 @@ void PaintingArea::paintEvent(QPaintEvent*event){
update(); update();
} }
// Resize the image to slightly larger then the main window //TODOJ Resize the image to slightly larger then the main window
// to cut down on the need to resize the image // to cut down on the need to resize the image
void PaintingArea::resizeEvent(QResizeEvent*event){ void PaintingArea::resizeEvent(QResizeEvent*event){
//TODO wait till tool works //TODO wait till tool works
@@ -356,6 +331,7 @@ void PaintingArea::resizeLayer(QImage*image_res, const QSize &newSize){
} }
void PaintingArea::selectLayerUp(){ void PaintingArea::selectLayerUp(){
updateTools();
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++;
@@ -363,6 +339,7 @@ void PaintingArea::selectLayerUp(){
} }
void PaintingArea::selectLayerDown(){ void PaintingArea::selectLayerDown(){
updateTools();
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--;
@@ -440,5 +417,35 @@ IntelliImage* PaintingArea::getImageOfActiveLayer(){
if(activeLayer<0) { if(activeLayer<0) {
return nullptr; return nullptr;
} }
return layerBundle[activeLayer].image; return layerBundle[static_cast<size_t>(activeLayer)].image;
}
QImage PaintingArea::getImageDataOfActiveLayer(){
QImage returnImage;
if(activeLayer<0) {
returnImage = QImage(QSize(10,10),QImage::Format_ARGB32);
returnImage.fill(QColor(255,255,255,255));
}
else{
returnImage = layerBundle[static_cast<size_t>(activeLayer)].image->getImageData();
if(renderSettings.isFastRenderering()) {
returnImage = returnImage.convertToFormat(QImage::Format_ARGB32);
}
}
return returnImage;
}
void PaintingArea::updateTools(){
if(Tool!=nullptr) {
if(Tool->getIsDrawing()) {
IntelliTool* temp = copyActiveTool();
delete this->Tool;
this->Tool = temp;
}
if(isSettingPolygon) {
delete this->Tool;
this->Tool = nullptr;
isSettingPolygon = false;
}
}
} }

View File

@@ -102,8 +102,9 @@ int addLayerAt(int idx, int width, int height, int widthOffset=0, int heightOffs
/*! /*!
* \brief The deleteLayer method removes a layer at a given idx * \brief The deleteLayer method removes a layer at a given idx
* \param idx - The index of the layer to be removed * \param idx - The index of the layer to be removed
* \param isTool - Is the flag for when a tool uses this function.
*/ */
void deleteLayer(int idx); void deleteLayer(int idx, bool isTool = false);
/*! /*!
* \brief The setLayerToActive method marks a specific layer as active * \brief The setLayerToActive method marks a specific layer as active
* \param idx - The index of the layer to be active * \param idx - The index of the layer to be active
@@ -116,13 +117,10 @@ void setLayerActive(int idx);
*/ */
void setLayerAlpha(int idx, int alpha); void setLayerAlpha(int idx, int alpha);
/*! /*!
* \brief The floodFill method fills a the active layer with a given color * \brief setPolygon is used for setting polygondata, it only works on RASTER images
* \param r - Red value of the color the layer should be filled with * \param idx - represents the number of the layer with should be transformed
* \param g - Green value of the color the layer should be filled with
* \param b - Blue value of the color the layer should be filled with
* \param a - Alpha value of the color the layer should be filled with
*/ */
void floodFill(int r, int g, int b, int a); void setPolygon(int idx);
/*! /*!
* \brief The movePositionActive method moves the active layer to certain position * \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 x - The x value the new center of the layer should be at
@@ -181,6 +179,12 @@ int getNumberOfActiveLayer();
IntelliImage* getImageOfActiveLayer(); IntelliImage* getImageOfActiveLayer();
/*!
* \brief getImageDataOfActiveLayer used to get the currents active imageData (if there isn't any active layer it return a 10*10 white picture)
* \return return the image as an rgba32bit qImage
*/
QImage getImageDataOfActiveLayer();
IntelliToolsettings Toolsettings; IntelliToolsettings Toolsettings;
IntelliColorPicker colorPicker; IntelliColorPicker colorPicker;
@@ -219,6 +223,8 @@ QImage* Canvas;
int maxWidth; int maxWidth;
int maxHeight; int maxHeight;
bool isSettingPolygon = false;
IntelliRenderSettings renderSettings; IntelliRenderSettings renderSettings;
IntelliTool* Tool; IntelliTool* Tool;
IntelliPhotoGui* DummyGui; IntelliPhotoGui* DummyGui;
@@ -232,6 +238,9 @@ void resizeLayer(QImage*image_res, const QSize &newSize);
// Helper for Tool // Helper for Tool
bool createTempTopLayer(int idx); bool createTempTopLayer(int idx);
//this function is needed to avoid errors in inputhandeling if a layer has changed
void updateTools();
}; };
#endif #endif

View File

@@ -36,6 +36,7 @@ void IntelliTool::onMouseLeftReleased(int x, int y){
this->mergeToolLayer(); this->mergeToolLayer();
this->deleteToolLayer(); this->deleteToolLayer();
activeLayer->image->calculateVisiblity(); activeLayer->image->calculateVisiblity();
} }
} }
@@ -81,11 +82,14 @@ void IntelliTool::mergeToolLayer(){
} }
} }
activeLayer->image->setImageData(updatedImage); activeLayer->image->setImageData(updatedImage);
if(Canvas->image->getPolygonData().size() > 0) {
activeLayer->image->setPolygon(Canvas->image->getPolygonData());
}
Area->DummyGui->UpdateGui(); Area->DummyGui->UpdateGui();
} }
void IntelliTool::deleteToolLayer(){ void IntelliTool::deleteToolLayer(){
Area->deleteLayer(Area->activeLayer+1); Area->deleteLayer(Area->activeLayer+1, true);
this->Canvas=nullptr; this->Canvas=nullptr;
} }

View File

@@ -4,11 +4,12 @@
#include <QInputDialog> #include <QInputDialog>
#include <QDebug> #include <QDebug>
IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings) IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon)
: IntelliTool(Area, colorPicker, Toolsettings){ : IntelliTool(Area, colorPicker, Toolsettings){
isPointNearStart = false; isPointNearStart = false;
isDrawing = false; isDrawing = false;
isInside = false; isInside = false;
this->isSettingPolygon = isSettingPolygon;
this->ActiveType = Tooltype::POLYGON; this->ActiveType = Tooltype::POLYGON;
} }
@@ -20,9 +21,17 @@ IntelliToolPolygon::~IntelliToolPolygon(){
void IntelliToolPolygon::onMouseLeftPressed(int x, int y){ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){
if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) { if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::SHAPEDIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) {
std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer()); if(Area->getPolygonDataOfRealLayer().size()>2) {
QPoint Point(x,y); std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(Area->getPolygonDataOfRealLayer());
isInside = IntelliTriangulation::isInPolygon(Triangles,Point); QPoint Point(x,y);
isInside = IntelliTriangulation::isInPolygon(Triangles,Point);
}
else{
isInside = true;
}
if(isSettingPolygon) {
isInside = true;
}
} }
else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) { else if(!isDrawing && Area->getTypeOfImageRealLayer() == IntelliImage::ImageType::RASTERIMAGE && x > 0 && y > 0 && x<Area->getWidthOfActive() && y<Area->getHeightOfActive()) {
isInside = true; isInside = true;
@@ -36,13 +45,17 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){
QPointList.push_back(drawingPoint); QPointList.push_back(drawingPoint);
this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); this->Canvas->image->drawPoint(QPointList.back(), colorPicker->getFirstColor(), Toolsettings->getLineWidth());
this->Canvas->image->calculateVisiblity(); if(!isSettingPolygon) {
this->Canvas->image->calculateVisiblity();
}
} }
else if(isDrawing && isNearStart(x,y,QPointList.front())) { else if(isDrawing && isNearStart(x,y,QPointList.front())) {
if(QPointList.size() > 2) { if(QPointList.size() > 2) {
isPointNearStart = true; isPointNearStart = true;
this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth()); this->Canvas->image->drawLine(QPointList.back(), QPointList.front(), colorPicker->getFirstColor(), Toolsettings->getLineWidth());
this->Canvas->image->calculateVisiblity(); if(!isSettingPolygon) {
this->Canvas->image->calculateVisiblity();
}
} }
else{ else{
isInside = false; isInside = false;
@@ -56,7 +69,9 @@ void IntelliToolPolygon::onMouseLeftPressed(int x, int y){
QPoint drawingPoint(x,y); QPoint drawingPoint(x,y);
QPointList.push_back(drawingPoint); QPointList.push_back(drawingPoint);
this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); this->Canvas->image->drawLine(QPointList[QPointList.size() - 2], QPointList[QPointList.size() - 1], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
this->Canvas->image->calculateVisiblity(); if(!isSettingPolygon) {
this->Canvas->image->calculateVisiblity();
}
} }
} }
@@ -73,24 +88,31 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){
isInside = false; isInside = false;
isPointNearStart = false; isPointNearStart = false;
isDrawing = false; isDrawing = false;
std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(QPointList); if(!isSettingPolygon) {
QPoint Point; std::vector<Triangle> Triangles = IntelliTriangulation::calculateTriangles(QPointList);
QColor colorTwo(colorPicker->getSecondColor()); QPoint Point;
colorTwo.setAlpha(Toolsettings->getInnerAlpha()); QColor colorTwo(colorPicker->getSecondColor());
for(int i = 0; i < activeLayer->width; i++) { colorTwo.setAlpha(Toolsettings->getInnerAlpha());
for(int j = 0; j < activeLayer->height; j++) { for(int i = 0; i < activeLayer->width; i++) {
Point = QPoint(i,j); for(int j = 0; j < activeLayer->height; j++) {
if(IntelliTriangulation::isInPolygon(Triangles,Point)) { Point = QPoint(i,j);
this->Canvas->image->drawPixel(Point, colorTwo); if(IntelliTriangulation::isInPolygon(Triangles,Point)) {
this->Canvas->image->drawPixel(Point, colorTwo);
}
} }
} }
for(int i=0; i<static_cast<int>(QPointList.size()); i++) {
int next = static_cast<int>((i+static_cast<int>(1))%static_cast<int>(QPointList.size()));
this->Canvas->image->drawLine(QPointList[static_cast<unsigned long long>(i)], QPointList[static_cast<unsigned long long>(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
}
} }
for(int i=0; i<static_cast<int>(QPointList.size()); i++) { else{
int next = static_cast<int>((i+static_cast<int>(1))%static_cast<int>(QPointList.size())); Canvas->image->setPolygon(QPointList);
this->Canvas->image->drawLine(QPointList[static_cast<unsigned long long>(i)], QPointList[static_cast<unsigned long long>(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth()); Canvas->image->setImageData(Area->getImageDataOfActiveLayer());
} }
QPointList.clear();
IntelliTool::onMouseLeftReleased(x,y); IntelliTool::onMouseLeftReleased(x,y);
QPointList.clear();
} }
} }

View File

@@ -29,6 +29,11 @@ bool isDrawing;
*/ */
bool isInside; bool isInside;
/*!
* \brief isSettingPolygon is the flag for calling the setPolygon method.
*/
bool isSettingPolygon;
/*! /*!
* \brief PointIsNearStart true, when last click near startpoint, else false. * \brief PointIsNearStart true, when last click near startpoint, else false.
*/ */
@@ -43,8 +48,9 @@ public:
* \brief A constructor setting the general paintingArea and colorPicker. * \brief A constructor setting the general paintingArea and colorPicker.
* \param Area - The general paintingArea used by the project. * \param Area - The general paintingArea used by the project.
* \param colorPicker - The general colorPicker used by the project. * \param colorPicker - The general colorPicker used by the project.
* \param isSettingPolygon - The flag for the set polygon method, standart is false
*/ */
IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings); IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings, bool isSettingPolygon = false);
/*! /*!
* \brief A Destructor. * \brief A Destructor.
*/ */
@@ -91,7 +97,6 @@ virtual void onWheelScrolled(int value) override;
*/ */
virtual void onMouseMoved(int x, int y) override; virtual void onMouseMoved(int x, int y) override;
}; };
#endif // INTELLITOOLPOLYGON_H #endif // INTELLITOOLPOLYGON_H