From 4587b8c0001d853ab2fb6f820627f1508e28e316 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 26 Jul 2018 13:21:46 +0200 Subject: [PATCH] added buttons for new zoom operations --- gui/base.qrc | 4 ++++ gui/basewindow.cc | 29 ++++++++++++++++++++-- gui/basewindow.h | 4 ++++ gui/fpgaviewwidget.cc | 41 ++++++++++++++++++++------------ gui/fpgaviewwidget.h | 6 ++++- gui/ice40/mainwindow.cc | 2 ++ gui/resources/shape_handles.png | Bin 0 -> 538 bytes gui/resources/shape_square.png | Bin 0 -> 353 bytes gui/resources/zoom_in.png | Bin 0 -> 725 bytes gui/resources/zoom_out.png | Bin 0 -> 708 bytes 10 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 gui/resources/shape_handles.png create mode 100644 gui/resources/shape_square.png create mode 100644 gui/resources/zoom_in.png create mode 100644 gui/resources/zoom_out.png diff --git a/gui/base.qrc b/gui/base.qrc index 1a848f54..7b3fa55c 100644 --- a/gui/base.qrc +++ b/gui/base.qrc @@ -10,5 +10,9 @@ resources/resultset_next.png resources/resultset_last.png resources/cross.png + resources/zoom_in.png + resources/zoom_out.png + resources/shape_handles.png + resources/shape_square.png diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 78c2fe3a..11a7fe8d 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -25,7 +25,6 @@ #include #include "designwidget.h" #include "fpgaviewwidget.h" -#include "jsonparse.h" #include "log.h" #include "mainwindow.h" #include "pythontab.h" @@ -76,7 +75,7 @@ BaseMainWindow::BaseMainWindow(std::unique_ptr context, QWidget *parent centralTabWidget->setTabsClosable(true); connect(centralTabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); - FPGAViewWidget *fpgaView = new FPGAViewWidget(); + fpgaView = new FPGAViewWidget(); centralTabWidget->addTab(fpgaView, "Graphics"); centralTabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->resize(0, 0); @@ -163,4 +162,30 @@ void BaseMainWindow::createMenusAndBars() mainToolBar->addAction(actionSave); } +void BaseMainWindow::createGraphicsBar() +{ + QAction *actionZoomIn = new QAction("Zoom In", this); + actionZoomIn->setIcon(QIcon(":/icons/resources/zoom_in.png")); + connect(actionZoomIn, SIGNAL(triggered()), fpgaView, SLOT(zoom_in())); + + QAction *actionZoomOut = new QAction("Zoom Out", this); + actionZoomOut->setIcon(QIcon(":/icons/resources/zoom_out.png")); + connect(actionZoomOut, SIGNAL(triggered()), fpgaView, SLOT(zoom_out())); + + QAction *actionZoomSelected = new QAction("Zoom Selected", this); + actionZoomSelected->setIcon(QIcon(":/icons/resources/shape_handles.png")); + connect(actionZoomSelected, SIGNAL(triggered()), fpgaView, SLOT(zoom_selected())); + + QAction *actionZoomOutbound = new QAction("Zoom Outbound", this); + actionZoomOutbound->setIcon(QIcon(":/icons/resources/shape_square.png")); + connect(actionZoomOutbound, SIGNAL(triggered()), fpgaView, SLOT(zoom_outbound())); + + graphicsToolBar = new QToolBar(); + addToolBar(Qt::TopToolBarArea, graphicsToolBar); + graphicsToolBar->addAction(actionZoomIn); + graphicsToolBar->addAction(actionZoomOut); + graphicsToolBar->addAction(actionZoomSelected); + graphicsToolBar->addAction(actionZoomOutbound); +} + NEXTPNR_NAMESPACE_END diff --git a/gui/basewindow.h b/gui/basewindow.h index 1184fa80..a25a2854 100644 --- a/gui/basewindow.h +++ b/gui/basewindow.h @@ -37,6 +37,7 @@ NEXTPNR_NAMESPACE_BEGIN class PythonTab; class DesignWidget; +class FPGAViewWidget; class BaseMainWindow : public QMainWindow { @@ -49,6 +50,7 @@ class BaseMainWindow : public QMainWindow protected: void createMenusAndBars(); + void createGraphicsBar(); protected Q_SLOTS: void writeInfo(std::string text); @@ -70,12 +72,14 @@ class BaseMainWindow : public QMainWindow QMenuBar *menuBar; QToolBar *mainToolBar; + QToolBar *graphicsToolBar; QStatusBar *statusBar; QAction *actionNew; QAction *actionOpen; QAction *actionSave; QProgressBar *progressBar; DesignWidget *designview; + FPGAViewWidget *fpgaView; }; NEXTPNR_NAMESPACE_END diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 15f37ce0..e08667f6 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -580,21 +580,32 @@ void FPGAViewWidget::wheelEvent(QWheelEvent *event) { QPoint degree = event->angleDelta() / 8; - if (!degree.isNull()) { - - if (zoom_ < zoomNear_) { - zoom_ = zoomNear_; - } else if (zoom_ < zoomLvl1_) { - zoom_ -= degree.y() / 10.0; - } else if (zoom_ < zoomLvl2_) { - zoom_ -= degree.y() / 5.0; - } else if (zoom_ < zoomFar_) { - zoom_ -= degree.y(); - } else { - zoom_ = zoomFar_; - } - update(); - } + if (!degree.isNull()) + zoom(degree.y()); } +void FPGAViewWidget::zoom(int level) +{ + if (zoom_ < zoomNear_) { + zoom_ = zoomNear_; + } else if (zoom_ < zoomLvl1_) { + zoom_ -= level / 10.0; + } else if (zoom_ < zoomLvl2_) { + zoom_ -= level / 5.0; + } else if (zoom_ < zoomFar_) { + zoom_ -= level; + } else { + zoom_ = zoomFar_; + } + update(); +} + +void FPGAViewWidget::zoom_in() { zoom(10); } + +void FPGAViewWidget::zoom_out() { zoom(-10); } + +void FPGAViewWidget::zoom_selected() {} + +void FPGAViewWidget::zoom_outbound() {} + NEXTPNR_NAMESPACE_END diff --git a/gui/fpgaviewwidget.h b/gui/fpgaviewwidget.h index b87c5d0a..636d5672 100644 --- a/gui/fpgaviewwidget.h +++ b/gui/fpgaviewwidget.h @@ -292,9 +292,13 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions void onSelectedArchItem(std::vector decals); void onHighlightGroupChanged(std::vector decals, int group); void pokeRenderer(void); - + void zoom_in(); + void zoom_out(); + void zoom_selected(); + void zoom_outbound(); private: void renderLines(void); + void zoom(int level); QPoint lastPos_; LineShader lineShader_; diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc index 810a98ae..f06971b6 100644 --- a/gui/ice40/mainwindow.cc +++ b/gui/ice40/mainwindow.cc @@ -159,6 +159,8 @@ void MainWindow::createMenu() taskToolBar->addAction(actionPlay); taskToolBar->addAction(actionPause); taskToolBar->addAction(actionStop); + + createGraphicsBar(); } #if defined(_MSC_VER) diff --git a/gui/resources/shape_handles.png b/gui/resources/shape_handles.png new file mode 100644 index 0000000000000000000000000000000000000000..ce27fe3a0345e03e919b54ca3b6a8498743b2ee9 GIT binary patch literal 538 zcmV+#0_FXQP)Tm(Vb6n04%0-0d~Z?N5N>2x}bMx$D(zp$faLbcIm6))=iDcNsK{XO_NUIz9_#=Hl90fplE_S$iRDekpz|Us6%gcl z10>7>u(;bXN$%}9L;!i)H44lO83AA=upo5q1c5U!FDx|env1*bl?cq~cLH;UH^p~Rgca1Ok;(*H5ZUXcXOPFe6C@8ghq04j{~AV5iYe^SBjqm*l4!TaGj6|yQS zl0>W3O7lFgJbe6&SDlNa#1ExQ;_~7(-;>XH?~^Rc>h}P$EUWbUeQtj&SzNDKTyL1C zYZj|t%+odV)rMrXCP_Cezg;mNk8#e`cJr5LHk)4>jfPdL)hmSs`qPQy_Y4;U;qFB literal 0 HcmV?d00001 diff --git a/gui/resources/shape_square.png b/gui/resources/shape_square.png new file mode 100644 index 0000000000000000000000000000000000000000..33af046098e0c48e5dce566fd6c134b066a496e2 GIT binary patch literal 353 zcmV-n0iOPeP)@H!pQI5+Ti_L0YJ|=5)wx zkF=1qGlSNkDr^3|$ws8mau%VAs!N}G7ur`j3{a)&lwiJCaRceu$939gbwXgD!G7W+ z`tnW&{YVf#zprcNBv=w4wLNbW#_u=%`)~XMSM_D9ZJ#Vp00000NkvXXu0mjfl(La4 literal 0 HcmV?d00001 diff --git a/gui/resources/zoom_in.png b/gui/resources/zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf0a52fe03715dcdf399e59c8071c4572dc51f7 GIT binary patch literal 725 zcmV;`0xJE9P)m%7v+TE=2L@ zAc44q=tejYU5HLZGooZ=NXsV%)bU*sTokj@jZSo^9&w{ke7#VNQ*1zG!rIRk_@ zCqOr;g6B6CM1oPv1(~U4k@Gd+5tN0(j@GA*K*busv3Lb0UyXuowiRkTRZ#85JN!eC z_8ZVW>+upx5C#N|BTv2dK_EW@%(@F6yu1sZv>T3gm&*mIkvej1R4=RyYw#mS zx}c)#2z<)=VQ1|=ux>5PwjVE+J!Q84EQyG-j9SFYV*6AQj$Gb(7!KJE!k5iQ@O3K$ z@0NQZ)>b7&TaFd~Ciolk*Q(7cL+9cB`Y;G@rr`tk5Hdjv+))zSdlF#gI!>6`zB<@i zaKYP!9!Pl&5VMjydlq1x&}37{RQY+SSBXX-w?kCLKK%bXFYU6{?d+nH00000NkvXX Hu0mjfTSP*+ literal 0 HcmV?d00001 diff --git a/gui/resources/zoom_out.png b/gui/resources/zoom_out.png new file mode 100644 index 0000000000000000000000000000000000000000..07bf98a79cfea526e250703356dbefdb6b80d166 GIT binary patch literal 708 zcmV;#0z3VQP)TNkCP1&*^7LC~A?iZQEu_hKZoQoXI zA7tfTv}|~Fb8b^XuP>qvDk=)P)vYKtT12;}bKn-mwHWl`1Bb)&{XXC4IY$Nnvj5@N zfekg1Y}gcI!)Cq|u?lR+A{2&=d~S$}&0ei1|7pO6jkZ$6%&{R8TNpk>=dV#j&aWqO zgE~4pNU_-giktFkY-J5_XDlv`7+j?n3mXtxgadILp+c<9cr~t!x1LM6m69Z~V#pLL z22Cs~BoIdtZHTjo7Q|_U0a2OmSF=gCGFB$RVZIP(pixmBqE!^15yd!#9Z{Wh)zB%o zikBFa!WJPvMB(noe(U;k1e~Y|r$}@wh*Ymykd6>E3t69z5DT&Jq-fSG-dPdU{SG;i zbSb3<`RfKgJD|lQC`6(Cdut1PbDV&$M=Y?U)x)A(0iQN+gAeOBg2Z6fr$_Is!%M70 z=n*z7{*s%3rO7yazIO)}qa&~o@WZ=R>!b#mOSR zlCR8M*iRy2j7!PmWiiegA>Og~W1?FLk0*NI^}`$RW