basics of zoom and scroll

This commit is contained in:
Jonas Mucke
2020-01-22 21:19:24 +01:00
parent 31553b2e94
commit 8e187ba6b3
5 changed files with 71 additions and 41 deletions

View File

@@ -18,7 +18,6 @@ IntelliPhotoGui::IntelliPhotoGui(){
setIntelliStyle();
// Size the app
resize(600,600);
showMaximized();
setDefaultToolValue();
}
@@ -550,6 +549,7 @@ void IntelliPhotoGui::createMenus(){
layerCreationMenu = new QMenu(tr("&Create new Layer"), this);
layerCreationMenu->addAction(actionCreateNewRasterLayer);
layerCreationMenu->addAction(actionCreateNewShapedLayer);
// Attach all actions to Layer
layerMenu = new QMenu(tr("&Layer"), this);
layerMenu->addMenu(layerCreationMenu);
@@ -626,7 +626,7 @@ void IntelliPhotoGui::createGui(){
// create Gui elements
// get and set max width and height
paintingArea = new PaintingArea(1280, 720);
paintingArea->DummyGui = this;
paintingArea->guiReference = this;
preview = QPixmap(":/Icons/Buttons/icons/circle-tool.svg");
CircleButton = new QPushButton();
@@ -740,8 +740,14 @@ void IntelliPhotoGui::createGui(){
QString String = QString("%1x%2").arg(paintingArea->Canvas->width()).arg(paintingArea->Canvas->height());
dimCanvas->setText(String);
ScrollArea = new QScrollArea(this);
ScrollArea->setBackgroundRole(QPalette::Dark);
ScrollArea->setWidget(paintingArea);
ScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
// set gui elements
mainLayout->addWidget(paintingArea,1,1,20,1);
mainLayout->addWidget(ScrollArea,1,1,20,1);
mainLayout->addWidget(CircleButton,1,2,1,1);
mainLayout->addWidget(FloodFillButton,1,3,1,1);
mainLayout->addWidget(LineButton,2,2,1,1);
@@ -846,7 +852,9 @@ void IntelliPhotoGui::UpdateGui(){
tmp.fill(Qt::transparent);
preview = preview.fromImage(tmp);
}
ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
ActiveLayerImageLabel->setPixmap(preview.scaled(Buttonsize * 2));
string = QString("background-color: %1").arg(paintingArea->colorPicker.getFirstColor().name());
FirstColorButton->setStyleSheet(string);

View File

@@ -14,6 +14,7 @@
#include <QTextEdit>
#include <QLabel>
#include <QLineEdit>
#include <QScrollArea>
#include "IntelliInputDialog.h"
//for unit testing
@@ -96,10 +97,11 @@ void slotSetInnerAlpha();
void slotResetTools();
private:
//setup functions for gui
void createActions();
void createMenus();
void createGui();
// Set the style of the GUI
void setIntelliStyle();
// Will check if changes have occurred since last save
@@ -107,13 +109,19 @@ bool maybeSave();
// Opens the Save dialog and saves
bool saveFile(const QByteArray &fileFormat);
//basic to set tool values to begin
void setDefaultToolValue();
// What we'll draw on
PaintingArea* paintingArea;
const QSize Buttonsize = QSize(35,35);
//used to display a preview of the active layer
QPixmap preview;
//size of all buttons
const QSize Buttonsize = QSize(35,35);
//buttons used for gui
QPushButton* CircleButton;
QPushButton* FloodFillButton;
QPushButton* LineButton;
@@ -121,35 +129,42 @@ QPushButton* PenButton;
QPushButton* PlainButton;
QPushButton* PolygonButton;
QPushButton* RectangleButton;
QLabel* WidthLine;
QLabel* innerAlphaLine;
QLineEdit* EditLineWidth;
QLineEdit* EditLineInnerAlpha;
QIntValidator* ValidatorLineWidth;
QIntValidator* ValidatorInnerAlpha;
QPushButton* FirstColorButton;
QPushButton* SecondColorButton;
QPushButton* SwitchColorButton;
QLabel* ActiveLayerLine;
QLabel* ActiveLayerImageLabel;
QPushButton* dimActive;
QPushButton* dimCanvas;
//labels used for gui
QLabel* WidthLine;
QLabel* innerAlphaLine;
QLabel* ActiveLayerLine;
QLabel* ActiveLayerImageLabel;
//scroll area to display canvas
QScrollArea* ScrollArea;
//line edits used for gui
QLineEdit* EditLineWidth;
QLineEdit* EditLineInnerAlpha;
//int validator used for gui
QIntValidator* ValidatorLineWidth;
QIntValidator* ValidatorInnerAlpha;
// The menu widgets
QMenu*saveAsMenu;
QMenu*fileMenu;
QMenu*renderMenu;
QMenu*optionMenu;
QMenu*layerCreationMenu;
QMenu*layerMenu;
QMenu*colorMenu;
QMenu*toolCreationMenu;
QMenu*toolSettingsMenu;
QMenu*toolMenu;
QMenu*helpMenu;
QMenu* saveAsMenu;
QMenu* fileMenu;
QMenu* renderMenu;
QMenu* optionMenu;
QMenu* layerCreationMenu;
QMenu* layerMenu;
QMenu* colorMenu;
QMenu* toolCreationMenu;
QMenu* toolSettingsMenu;
QMenu* toolMenu;
QMenu* helpMenu;
// All the actions that can occur
// meta image actions (need further modularisation)
@@ -175,7 +190,9 @@ QAction* actionCreatePolygonTool;
QAction* actionCreateFloodFillTool;
// dimension actions
QAction*actionChangeDim;
QAction* actionChangeDim;
QAction* actionSetWidth;
QAction* actionSetInnerAlpha;
// dialog actions
QAction* actionAboutDialog;
@@ -198,8 +215,7 @@ QAction* actionMoveLayerDown;
// Actions tied to specific file formats
QList<QAction*> actionSaveAs;
QAction* actionSetWidth;
QAction* actionSetInnerAlpha;
// main GUI elements
QWidget* centralGuiWidget;

View File

@@ -20,7 +20,7 @@
PaintingArea::PaintingArea(int maxWidth, int maxHeight, QWidget*parent)
: QWidget(parent){
: QLabel(parent){
this->Tool = nullptr;
this->setLayerDimensions(maxWidth, maxHeight);
@@ -120,7 +120,7 @@ void PaintingArea::setPolygon(int idx){
delete this->Tool;
this->Tool = new IntelliToolPolygon(this,&colorPicker,&Toolsettings, true);
isSettingPolygon = true;
this->DummyGui->setToolWidth(5);
this->guiReference->setToolWidth(5);
}
}
}
@@ -174,7 +174,7 @@ void PaintingArea::moveActiveLayer(int idx){
}else if(idx==-1) {
this->selectLayerDown();
}
DummyGui->UpdateGui();
guiReference->UpdateGui();
}
void PaintingArea::slotActivateLayer(int a){
@@ -322,11 +322,16 @@ void PaintingArea::wheelEvent(QWheelEvent*event){
// The QPaintEvent is sent to widgets that need to
// update themselves
void PaintingArea::paintEvent(QPaintEvent*event){
this->setFixedSize(QSize(maxWidth,maxHeight));
this->drawLayers();
QPainter painter(this);
QRect dirtyRec = event->rect();
painter.drawImage(dirtyRec, *Canvas, dirtyRec);
QPainter painter(this);
//insert zoom factor here
painter.scale(1,1);
//calulate image here for scroll
painter.drawImage(0,0, *Canvas);
update();
}

View File

@@ -50,7 +50,7 @@ struct LayerObject {
/*!
* \brief The PaintingArea class manages the methods and stores information about the current painting area, which is the currently opened project
*/
class PaintingArea : public QWidget
class PaintingArea : public QLabel
{
friend UnitTest;
// Declares our class as a QObject which is the base class
@@ -228,6 +228,7 @@ void selectLayerDown();
IntelliTool* copyActiveTool();
QImage* Canvas;
QImage ScaledCanvas;
int maxWidth;
int maxHeight;
@@ -235,7 +236,7 @@ bool isSettingPolygon = false;
IntelliRenderSettings renderSettings;
IntelliTool* Tool;
IntelliPhotoGui* DummyGui;
IntelliPhotoGui* guiReference;
std::vector<LayerObject> layerBundle;
int activeLayer = -1;

View File

@@ -50,7 +50,7 @@ void IntelliTool::onMouseMoved(int x, int y){
void IntelliTool::onWheelScrolled(int value){
//if needed for future general tasks implement in here
Area->DummyGui->setToolWidth(value + Toolsettings->getLineWidth());
Area->guiReference->setToolWidth(value + Toolsettings->getLineWidth());
}
bool IntelliTool::createToolLayer(){
@@ -88,7 +88,7 @@ void IntelliTool::mergeToolLayer(){
if(Canvas->image->getPolygonData().size() > 0) {
activeLayer->image->setPolygon(Canvas->image->getPolygonData());
}
Area->DummyGui->UpdateGui();
Area->guiReference->UpdateGui();
}
void IntelliTool::deleteToolLayer(){