diff options
author | Miodrag Milanović <mmicko@gmail.com> | 2018-11-10 23:00:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-10 23:00:34 -0800 |
commit | 6b197fde726a0fbbf657c9b972c94c21ec210689 (patch) | |
tree | c95192491d1badbd139e2ce216ef491e78a55c7e /gui/fpgaviewwidget.cc | |
parent | 15d9b3d3cc05656e58d01ba2f97ec92b6daaee1c (diff) | |
parent | 0a3ebfbb5b4f502e66861d3857c83b825ac34795 (diff) | |
download | nextpnr-6b197fde726a0fbbf657c9b972c94c21ec210689.tar.gz nextpnr-6b197fde726a0fbbf657c9b972c94c21ec210689.tar.bz2 nextpnr-6b197fde726a0fbbf657c9b972c94c21ec210689.zip |
Merge pull request #93 from YosysHQ/gui_changes
Gui changes
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r-- | gui/fpgaviewwidget.cc | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 24fbc35d..55ed9315 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -56,6 +56,7 @@ FPGAViewWidget::FPGAViewWidget(QWidget *parent) colors_.highlight[7] = QColor("#da70d6"); rendererArgs_->changed = false; + rendererArgs_->gridChanged = false; rendererArgs_->flags.zoomOutbound = true; auto fmt = format(); @@ -86,6 +87,11 @@ FPGAViewWidget::~FPGAViewWidget() {} void FPGAViewWidget::newContext(Context *ctx) { ctx_ = ctx; + { + QMutexLocker lock(&rendererArgsLock_); + + rendererArgs_->gridChanged = true; + } onSelectedArchItem(std::vector<DecalXY>(), false); for (int i = 0; i < 8; i++) onHighlightGroupChanged(std::vector<DecalXY>(), i); @@ -109,19 +115,6 @@ void FPGAViewWidget::initializeGL() QtImGui::initialize(this); glClearColor(colors_.background.red() / 255, colors_.background.green() / 255, colors_.background.blue() / 255, 0.0); - - - { - QMutexLocker locker(&rendererDataLock_); - // Render grid. - auto grid = LineShaderData(); - for (float i = -100.0f; i < 100.0f; i += 1.0f) { - PolyLine(-100.0f, i, 100.0f, i).build(grid); - PolyLine(i, -100.0f, i, 100.0f).build(grid); - } - grid.last_render = 1; - lineShader_.update_vbos(GraphicElement::STYLE_GRID, grid); - } } float FPGAViewWidget::PickedElement::distance(Context *ctx, float wx, float wy) const @@ -444,6 +437,7 @@ void FPGAViewWidget::renderLines(void) DecalXY hoveredDecal; std::vector<DecalXY> highlightedDecals[8]; bool highlightedOrSelectedChanged; + bool gridChanged; PassthroughFlags flags; { // Take the renderer arguments lock, copy over all we need. @@ -456,7 +450,9 @@ void FPGAViewWidget::renderLines(void) highlightedDecals[i] = rendererArgs_->highlightedDecals[i]; highlightedOrSelectedChanged = rendererArgs_->changed; + gridChanged = rendererArgs_->gridChanged; rendererArgs_->changed = false; + rendererArgs_->gridChanged = false; flags = rendererArgs_->flags; } @@ -528,6 +524,7 @@ void FPGAViewWidget::renderLines(void) // If we're not re-rendering any highlights/selections, let's // copy them over from teh current object. + data->gfxGrid = rendererData_->gfxGrid; if (!highlightedOrSelectedChanged) { data->gfxSelected = rendererData_->gfxSelected; data->gfxHovered = rendererData_->gfxHovered; @@ -539,7 +536,19 @@ void FPGAViewWidget::renderLines(void) rendererData_ = std::move(data); } } - + if (gridChanged) + { + QMutexLocker locker(&rendererDataLock_); + rendererData_->gfxGrid.clear(); + // Render grid. + for (float i = 0.0f; i < 1.0f * ctx_->getGridDimX() + 1; i += 1.0f) { + PolyLine(i, 0.0f, i, 1.0f * ctx_->getGridDimY()).build(rendererData_->gfxGrid); + } + for (float i = 0.0f; i < 1.0f * ctx_->getGridDimY() + 1; i += 1.0f) { + PolyLine(0.0f, i, 1.0f * ctx_->getGridDimX(), i).build(rendererData_->gfxGrid); + } + rendererData_->gfxGrid.last_render++; + } if (highlightedOrSelectedChanged) { QMutexLocker locker(&rendererDataLock_); @@ -851,7 +860,8 @@ void FPGAViewWidget::zoomSelected() { { QMutexLocker lock(&rendererDataLock_); - zoomToBB(rendererData_->bbSelected, 0.5f, true); + if (rendererData_->bbSelected.x0() != std::numeric_limits<float>::infinity()) + zoomToBB(rendererData_->bbSelected, 0.5f, true); } update(); } @@ -876,6 +886,8 @@ void FPGAViewWidget::leaveEvent(QEvent *event) void FPGAViewWidget::update_vbos() { + lineShader_.update_vbos(GraphicElement::STYLE_GRID, rendererData_->gfxGrid); + for (int style = GraphicElement::STYLE_FRAME; style < GraphicElement::STYLE_HIGHLIGHTED0; style++) { |