diff --git a/Implementation/GUI/Picture.cpp b/Implementation/GUI/Picture.cpp index 30e5a2e0c72363c33660d2eac98ef3ca1e91c704..a6b2b9e8632ea5738632a06a2429e196cbfd44d8 100644 --- a/Implementation/GUI/Picture.cpp +++ b/Implementation/GUI/Picture.cpp @@ -12,6 +12,12 @@ void Picture::addLayer(layer_t *layer){ if(maxY<layer->qImage->size().height()+layer->yOffset){ maxY=layer->qImage->size().height()+layer->yOffset; } + if(minX>layer->xOffset||minX==-1){ + minX=layer->xOffset; + } + if(minY>layer->yOffset||minY==-1){ + minY=layer->yOffset; + } return; } void Picture::addLayer(QImage *qImage){ @@ -27,6 +33,8 @@ void Picture::addLayer(QImage *qImage){ if(maxY<qImage->size().height()){ maxY=qImage->size().height(); } + minX=0; + minY=0; addLayer(layer); return; } @@ -43,6 +51,8 @@ void Picture::addLayer(int width, int height){ if(maxY<height){ maxY=height; } + minX=0; + minY=0; addLayer(layer); return; } @@ -51,6 +61,10 @@ void Picture::removeLayer(unsigned int index){ currentLayer=nullptr; } layers.erase(layers.begin()+index); + maxX=0; + maxY=0; + minX=-1; + minY=-1; for (int i = 0; i < layers.size(); i++){ if(maxX<layers[i]->qImage->size().width()+layers[i]->xOffset){ maxX=layers[i]->qImage->size().width()+layers[i]->xOffset; @@ -58,6 +72,12 @@ void Picture::removeLayer(unsigned int index){ if(maxY<layers[i]->qImage->size().height()+layers[i]->yOffset){ maxY=layers[i]->qImage->size().height()+layers[i]->yOffset; } + if(minX>layers[i]->xOffset||minX==-1){ + minX=layers[i]->xOffset; + } + if(minY>layers[i]->yOffset||minY==-1){ + minY=layers[i]->yOffset; + } } return; } @@ -141,6 +161,9 @@ bool Picture::isVisible(unsigned int index){ QSize Picture::getMaxSize(){ return QSize(maxX,maxY); } +QSize Picture::getMinOffset(){ + return QSize(minX,minY); +} int Picture::currentXOffset(){ return currentLayer->xOffset; } @@ -156,40 +179,56 @@ int Picture::yOffset(unsigned int index){ void Picture::setCurrentXOffset(int offset){ currentLayer->xOffset+=offset; maxX=0; + minX=-1; for (int i = 0; i < layers.size(); i++){ if(maxX<layers[i]->qImage->size().width()+layers[i]->xOffset){ maxX=layers[i]->qImage->size().width()+layers[i]->xOffset; } + if(minX>layers[i]->xOffset||minX==-1){ + minX=layers[i]->xOffset; + } } return; } void Picture::setCurrentYOffset(int offset){ currentLayer->yOffset+=offset; maxY=0; + minY=-1; for (int i = 0; i < layers.size(); i++){ if(maxY<layers[i]->qImage->size().height()+layers[i]->yOffset){ maxY=layers[i]->qImage->size().height()+layers[i]->yOffset; } + if(minY>layers[i]->yOffset||minY==-1){ + minY=layers[i]->yOffset; + } } return; } void Picture::setXOffset(unsigned int index, int offset){ layers[index]->xOffset+=offset; maxX=0; + minX=-1; for (int i = 0; i < layers.size(); i++){ if(maxX<layers[i]->qImage->size().width()+layers[i]->xOffset){ maxX=layers[i]->qImage->size().width()+layers[i]->xOffset; } + if(minX>layers[i]->xOffset||minX==-1){ + minX=layers[i]->xOffset; + } } return; } void Picture::setYOffset(unsigned int index, int offset){ layers[index]->yOffset+=offset; maxY=0; + minY=-1; for (int i = 0; i < layers.size(); i++){ if(maxY<layers[i]->qImage->size().height()+layers[i]->yOffset){ maxY=layers[i]->qImage->size().height()+layers[i]->yOffset; } + if(minY>layers[i]->yOffset||minY==-1){ + minY=layers[i]->yOffset; + } } return; } @@ -202,9 +241,12 @@ Picture::Picture(std::string name){ layers = std::vector<layer_t*>(); maxX=0; maxY=0; + minX=-1; + minY=-1; } Picture::~Picture(){ for (unsigned int i = 0; i < layers.size(); i++){ delete layers[i]; } } + diff --git a/Implementation/GUI/Picture.h b/Implementation/GUI/Picture.h index 806c0c835f552bc00f818a90cfb53f362389cdf7..edac3af36415a3cbfc0f903ef7e2fbc4f882ad9f 100644 --- a/Implementation/GUI/Picture.h +++ b/Implementation/GUI/Picture.h @@ -33,6 +33,7 @@ class Picture{ void makeVisible(unsigned int index, bool visible); bool isVisible(unsigned int index); QSize getMaxSize(); + QSize getMinOffset(); unsigned int getLayerCount(); unsigned int getCurrentLayerIndex(); int currentXOffset(); @@ -54,6 +55,8 @@ class Picture{ layer_t *currentLayer; int maxX; int maxY; + int minX; + int minY; }; #endif /* !PICTURE_H */ diff --git a/Implementation/GUI/imageviewer.cpp b/Implementation/GUI/imageviewer.cpp index 736a831570e7181a2434f4afbe8bef42b4bebf19..d528888511c836f918e4853fe650e8ad95fa3773 100644 --- a/Implementation/GUI/imageviewer.cpp +++ b/Implementation/GUI/imageviewer.cpp @@ -87,52 +87,12 @@ ImageViewer::ImageViewer(QWidget *parent) connect(drawDock,QOverload<para1>::of(&DrawDock::drawShowI),this,&ImageViewer::drawShowI); connect(drawDock,QOverload<para2>::of(&DrawDock::drawShowII),this,&ImageViewer::drawShowII); - /* - for(int i = 0; i <256; i++){ - colorVect.append(QColor(255,255,255,255).rgba()); - colorButtons.push_back(new QToolButton()); - QString str; - str.sprintf("background-color: qlineargradient(stop:0 #%02x%02x%02x);",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - colorButtons[i]->setStyleSheet(str); - colorButtons[i]->setCheckable(true); - - connect(colorButtons[i], SIGNAL(clicked()),this, SLOT(changeColor())); - }*/ - - //newLayerDock->setColorVect(colorVect); - //drawDock->setColorVect(colorVect); - //colorDock->setColorVect(colorVect); transLationDock = new TranslationDock(interactionTool); connect(transLationDock,QOverload<toolParameters_t*>::of(&TranslationDock::getParams),this,&ImageViewer::setTranslationParams); connect(transLationDock,&TranslationDock::update,this,&ImageViewer::updateall); - /* - addColor(QColor(255,255,255,255),0); - addColor(QColor(127,127,127,255),1); - addColor(QColor(0,0,0,255),2); - addColor(QColor(0,255,255,255),3); - addColor(QColor(0,127,127,255),4); - addColor(QColor(127,255,255,255),5); - addColor(QColor(127,0,0,255),6); - addColor(QColor(255,127,127,255),7); - addColor(QColor(255,0,0,255),8); - addColor(QColor(255,0,255,255),9); - addColor(QColor(127,0,127,255),10); - addColor(QColor(255,127,255,255),11); - addColor(QColor(0,127,0,255),12); - addColor(QColor(127,255,127,255),13); - addColor(QColor(0,255,0,255),14); - addColor(QColor(255,255,0,255),15); - addColor(QColor(127,127,0,255),16); - addColor(QColor(255,255,127,255),17); - addColor(QColor(0,0,127,255),18); - addColor(QColor(127,127,255,255),19); - addColor(QColor(0,0,255,255),20); - - addColor(QColor(0,0,0,0),255);*/ - - //createLayerDock(); + colorDock = new ColorDock(interactionTool); connect(colorDock,&ColorDock::updateVisible,this,&ImageViewer::updateVisible); connect(colorDock,QOverload<QVector<QRgb>>::of(&ColorDock::updateColorVect),this,&ImageViewer::updateColorVector); @@ -161,55 +121,6 @@ ImageViewer::ImageViewer(QWidget *parent) resize(QGuiApplication::primaryScreen()->availableSize() * 3 / 5); } -//! [0] -//! [2] -/* -void ImageViewer::createColorDock(){ - colorButtons = std::vector<QToolButton*>(); - //QPixmap px(20, 20); - for(int i = 0; i <256; i++){ - - colorButtons.push_back(new QToolButton()); - //px.fill(colorVect[i]); - //colorButtons[i]->setIcon(px); - colorButtons[i]->setCheckable(true); - QString str; - //str.append(qRed(colorVect[i])); - //str.append(";"); - str.sprintf("background-color: qlineargradient(stop:0 #%02x%02x%02x);",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - //printf("background-color: #%02x%02x%02x;\n",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - colorButtons[i]->setStyleSheet(str); - //if(i==drawColorIndex){ - // colorButton->setStyleSheet(str); - //} - connect(colorButtons[i], SIGNAL(clicked()),this, SLOT(changeColor())); - //connect(colorButtons[i], SIGNAL(clicked()),colorButtons[i], SLOT(toggle())); - } - - colorDock = new QDockWidget(tr("Colortable"), this); - colorDock->setAllowedAreas(Qt::BottomDockWidgetArea); - - colorLayout = new QGridLayout(); - for (int i = 0; i < 64; i++) { - colorLayout->addWidget(colorButtons[4*i],0,i); - colorLayout->addWidget(colorButtons[4*i+1],1,i); - colorLayout->addWidget(colorButtons[4*i+2],2,i); - colorLayout->addWidget(colorButtons[4*i+3],3,i); - } - - colors = new QWidget(colorDock); - colors->setLayout(colorLayout); - ColorScrollArea = new QScrollArea(); - ColorScrollArea->setWidget(colors); - colorDock->setWidget(ColorScrollArea); - - addDockWidget(Qt::BottomDockWidgetArea, colorDock); - colorDock->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable); - - // - -}*/ - bool ImageViewer::loadFile(const QString &fileName) { @@ -580,113 +491,6 @@ void ImageViewer::mouseReleaseEvent(QMouseEvent *event) updateVisible(); } } -/* -void ImageViewer::updateColors(){ - QPixmap px(20, 20); - colorVect = interactionTool->getPicture()->getCurrentLayerAsQ()->colorTable(); - for(int i = 0; i <256; i++){ - - px.fill(colorVect[i]); - - //colorButtons[i]->setIcon(px); - QString str; - //str.append(qRed(colorVect[i])); - //str.append(";"); - str.sprintf("background-color: qlineargradient(stop:0 #%02x%02x%02x);",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - //printf("background-color: #%02x%02x%02x;\n",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - colorButtons[i]->setStyleSheet(str); - - } - newLayerDock->setColorVect(colorVect); - drawDock->setColorVect(colorVect); - - if(interactionTool->getPicture()->isShaped()){ - addColor(QColor(255,255,255,0),255); - QPainter p(&px); - QPen pen(QColor(255,0,0,255)); - pen.setWidth(2); - p.setPen(pen); - p.drawLine(1,1,19,1); - p.drawLine(19,1,19,19); - p.drawLine(19,19,1,19); - p.drawLine(1,19,1,1); - p.drawLine(1,19,19,1); - p.drawLine(19,19,1,1); - //colorAct[255]->setIcon(px); - //colorAct[255]->setEnabled(false); - colorButtons[255]->setStyleSheet("background-color: #FFFFFF;\n"); - colorButtons[255]->setIcon(px); - colorButtons[255]->setEnabled(false); - } else { - //colorAct[255]->setEnabled(true); - colorButtons[255]->setEnabled(true); - px.fill(QColor(255,255,255,0)); - colorButtons[255]->setIcon(px); - } - //colorButton->setMenu(colorMenu); -} - -void ImageViewer::addColor(QColor col, int pos){ - QPixmap px(20, 20); - colorVect[pos]=col.rgba(); - - px.fill(colorVect[pos]); - //colorButtons[i]->setIcon(px); - QString str; - //str.append(qRed(colorVect[i])); - //str.append(";"); - //str.sprintf("#%02x%02x%02x",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - str.sprintf("background-color: qlineargradient(stop:0.5 #%02x%02x%02x);",qRed(colorVect[pos]),qGreen(colorVect[pos]),qBlue(colorVect[pos])); - //printf("background-color: #%02x%02x%02x;\n",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - colorButtons[pos]->setStyleSheet(str); - - colorButtons[pos]->setChecked(false); - if (hasLayer){ - interactionTool->getPicture()->getCurrentLayerAsQ()->setColor(pos,colorVect[pos]); - //setImage(*interactionTool->getPicture()->getCurrentLayerAsQ()); - //updateLayers(); - layerDock->updateLayers(); - updateVisible(); - - } - newLayerDock->setColorVect(colorVect); - drawDock->setColorVect(colorVect); -} -void ImageViewer::changeColor(){ - for (int i = 0; i < colorButtons.size(); i++) { - if (colorButtons[i]->isChecked()){ - QPixmap px(20, 20); - QString str2; - str2.sprintf("Color %d",i); - colorVect[i]=QColorDialog().getColor(Qt::white,nullptr,str2,QColorDialog::ShowAlphaChannel).rgba(); - newLayerDock->setColorVect(colorVect); - drawDock->setColorVect(colorVect); - px.fill(colorVect[i]); - //colorButtons[i]->setIcon(px); - //colorAct[i]->setIcon(px); - QString str; - //str.append(qRed(colorVect[i])); - //str.append(";"); - //str.sprintf("#%02x%02x%02x",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - str.sprintf("background-color: qlineargradient(stop:0.5 #%02x%02x%02x);",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - //printf("background-color: #%02x%02x%02x;\n",qRed(colorVect[i]),qGreen(colorVect[i]),qBlue(colorVect[i])); - colorButtons[i]->setStyleSheet(str); - //if(i==drawColorIndex){ - // colorButton->setStyleSheet(str); - //} - colorButtons[i]->setChecked(false); - if (hasLayer){ - interactionTool->getPicture()->getCurrentLayerAsQ()->setColor(i,colorVect[i]); - //setImage(*interactionTool->getPicture()->getCurrentLayerAsQ()); - //updateLayers(); - layerDock->updateLayers(); - updateVisible(); - - } - //colorButton->setMenu(colorMenu); - } - } -}*/ void ImageViewer::newLayer(){ //param = new toolParameters_t; @@ -712,18 +516,32 @@ void ImageViewer::updateVisible(){ } void ImageViewer::calculateVisible(){ QPixmap *px = new QPixmap(interactionTool->getPicture()->getMaxSize()); + px->fill(QColor(0,0,0,0)); + QSize ms = interactionTool->getPicture()->getMinOffset(); + int mdx=ms.width()%10; + int mdy=ms.height()%10; + bool c=true; + bool ug=(px->size().height()/10+1-ms.height()/10)%2==1; QPainter *painter= new QPainter(px); QBrush *br1 = new QBrush(QColor(100,100,100)); QBrush *br2 = new QBrush(QColor(200,200,200)); - for (int i = 0; i < px->size().width()/10+1;i++){ - for (int j = 0; j < px->size().height()/10+1;j++){ - if((i+j)&1){ - painter->fillRect(i*10,j*10,10,10,*br1); + //QBrush *br3 = new QBrush(QColor(0,0,0,0)); + for (int i = ms.width()/10; i < px->size().width()/10+1;i++){ + if(!ug&&i>ms.width()/10){ + c=!c; + } + for (int j = ms.height()/10; j < px->size().height()/10+1;j++){ + if(c){ + painter->fillRect(i*10+mdx,j*10+mdy,10,10,*br1); + c=!c; } else { - painter->fillRect(i*10,j*10,10,10,*br2); + painter->fillRect(i*10+mdx,j*10+mdy,10,10,*br2); + c=!c; } } } + //painter->fillRect(0,0,px->size().width(),ms.height(),*br3); + //painter->fillRect(0,0,ms.width(),px->size().height(),*br3); for (int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) { if (layerDock->isLayerCheckboxChecked(i)){ painter->drawImage(interactionTool->getPicture()->xOffset(i),interactionTool->getPicture()->yOffset(i),*interactionTool->getPicture()->getLayerAsQ(i)); @@ -739,7 +557,6 @@ void ImageViewer::makeShaped(){ //updateColors(); colorDock->updateColors(); } - } bool ImageViewer::getHasLayer(){ diff --git a/Implementation/GUI/imageviewer.h b/Implementation/GUI/imageviewer.h index 445e3bdf792486c9fbe920008fecbb6d2c971d24..aca1c68388d319476c4d706583263d7a9d3784b3 100644 --- a/Implementation/GUI/imageviewer.h +++ b/Implementation/GUI/imageviewer.h @@ -121,37 +121,14 @@ private slots: void about(); void draw(); void translate(); - //void calcTranslation(); - //void doTranslation(); void setTranslationParams(toolParameters_t * param); void setMergeParams(toolParameters_t * param); void updateHasLayer(bool b); void updateall(); void updateWithoutLayer(); void updateVisible(); - //void pencil(); - //void startDraw(); - //void lines(); - //void notFilledRect(); - //void filledRect(); - //void existingColor(); - //void newColor(); - //void actualColorVect(); - //void standartColorVect(); - //void smallColorVect(); - //void customColorVect(); - //void setNewColor(); - //void setDrawColor(); - //void changeColor(); - //void changeCurrentLayer(); - //void updateVisible(); void makeShaped(); void newLayer(); - //void addNewLayer(); - //void setWidth(int w); - //void setNewLayerX(int w); - //void setNewLayerY(int w); - //void scrollAreaChanged(); void drawShowI(para1 p); void drawShowII(para2 p); void updateLayerDock(); @@ -159,14 +136,7 @@ private slots: private: void createActions(); - //void createColorDock(); - //void createLayerDock(); - //void createTranslateDock(); - //void createDrawDock(); void createMenus(); - //void createNewLayerDock(); - //void addColor(QColor col, int pos); - void updateActions(); bool saveFile(const QString &fileName); void setImage(QImage newImage); @@ -177,43 +147,11 @@ private: QImage image; QLabel *imageLabel; QScrollArea *scrollArea; - //QScrollArea *ColorScrollArea; - //QScrollArea *layerScrollArea; - //QWidget *colors; - //QWidget *layers; QMenu *viewMenu; //QDockWidget *colorDock; QDockWidget *layerDockW; - //QGridLayout* colorLayout; - //QGridLayout* layerLayout; - //std::vector<QToolButton*> colorButtons; - //std::vector<QPushButton*> layerButtons; - //std::vector<QCheckBox*> layerCheckboxes; QVector<QRgb> colorVect; QVector<QRgb> newColorVect; - //QList<QAction*> colorAct; - //QPushButton *colorButton; - //QSlider *drawSlider; - //QSpinBox *drawSpinbox; - //QSlider *newLayerXSlider; - //QSpinBox *newLayerXSpinbox; - //QSlider *newLayerYSlider; - //QSpinBox *newLayerYSpinbox; - //QPushButton *drawStartButton; - //QMenu *colorMenu; - /*QCheckBox *mirrorCheckbox; - QLineEdit *zoomXInp; - QLineEdit *zoomYInp; - QLineEdit *rotInp; - QLabel *translationLabelA; - QLabel *translationLabelB; - QLabel *translationLabelC; - QLabel *translationLabelD; - QMatrix *transMat;*/ - //QPushButton *newColorButton; - //drawModus_e actDrawModus = drawModus_e::pencil; - //QRgb newLayerColor; - //QGridLayout *newLayerLayout; QPixmap *pixmap; //QCheckBox *ignoreShaped; //QRadioButton *newColormap[4]; @@ -222,13 +160,6 @@ private: bool moveStart = false; //bool isNewLayerColor = false; double scaleFactor = 1.0; - //bool isDraw=false; - //bool isRot; - //int drawWidth=3; - //int newLayerX = 100; - //int newLayerY = 100; - //int drawColorIndex=0; - //bool drawStart=false; bool hasLayer=false; toolParameters_t *param = nullptr; InteractionTool *interactionTool; diff --git a/Implementation/build-imageviewer-Desktop-Release/InteractionTool.o b/Implementation/build-imageviewer-Desktop-Release/InteractionTool.o index e364580c78d6a001231fa652da472586379c2695..9aa47848e458a2bf8e83e9f11bc7a000a3894e02 100644 Binary files a/Implementation/build-imageviewer-Desktop-Release/InteractionTool.o and b/Implementation/build-imageviewer-Desktop-Release/InteractionTool.o differ diff --git a/Implementation/build-imageviewer-Desktop-Release/Makefile b/Implementation/build-imageviewer-Desktop-Release/Makefile index d9f0fd61802eae0d60dc66f8112732e2c283f29d..16b3104ff838c44bc54b4ce3a5104c2963b10d45 100644 --- a/Implementation/build-imageviewer-Desktop-Release/Makefile +++ b/Implementation/build-imageviewer-Desktop-Release/Makefile @@ -203,7 +203,6 @@ DIST = /usr/lib/qt/mkspecs/features/spec_pre.prf \ /usr/lib/qt/mkspecs/features/qt_config.prf \ /usr/lib/qt/mkspecs/linux-g++/qmake.conf \ /usr/lib/qt/mkspecs/features/spec_post.prf \ - ../GUI/.qmake.stash \ /usr/lib/qt/mkspecs/features/exclusive_builds.prf \ /usr/lib/qt/mkspecs/features/toolchain.prf \ /usr/lib/qt/mkspecs/features/default_pre.prf \ @@ -374,7 +373,6 @@ Makefile: ../GUI/imageviewer.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/l /usr/lib/qt/mkspecs/features/qt_config.prf \ /usr/lib/qt/mkspecs/linux-g++/qmake.conf \ /usr/lib/qt/mkspecs/features/spec_post.prf \ - .qmake.stash \ /usr/lib/qt/mkspecs/features/exclusive_builds.prf \ /usr/lib/qt/mkspecs/features/toolchain.prf \ /usr/lib/qt/mkspecs/features/default_pre.prf \ @@ -502,7 +500,6 @@ Makefile: ../GUI/imageviewer.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/l /usr/lib/qt/mkspecs/features/qt_config.prf: /usr/lib/qt/mkspecs/linux-g++/qmake.conf: /usr/lib/qt/mkspecs/features/spec_post.prf: -.qmake.stash: /usr/lib/qt/mkspecs/features/exclusive_builds.prf: /usr/lib/qt/mkspecs/features/toolchain.prf: /usr/lib/qt/mkspecs/features/default_pre.prf: diff --git a/Implementation/build-imageviewer-Desktop-Release/Picture.o b/Implementation/build-imageviewer-Desktop-Release/Picture.o index c997aadc9a29edb411e263022258e1b6e35c52ac..e6c591e8c58da66ec5800726c27095eef0f8a328 100644 Binary files a/Implementation/build-imageviewer-Desktop-Release/Picture.o and b/Implementation/build-imageviewer-Desktop-Release/Picture.o differ diff --git a/Implementation/build-imageviewer-Desktop-Release/imageviewer.o b/Implementation/build-imageviewer-Desktop-Release/imageviewer.o index 50816bbdc333f4176728a9b8b89527eba6350719..baa5c16f55566968114e248f2e54f9b67c04f1b0 100644 Binary files a/Implementation/build-imageviewer-Desktop-Release/imageviewer.o and b/Implementation/build-imageviewer-Desktop-Release/imageviewer.o differ