From 3cfdb4e0c101b67dfe6d0d86174d8ed691ad9b28 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sun, 11 Nov 2018 09:04:20 +0100 Subject: [PATCH] Sorted out zoomout, works for all now --- gui/fpgaviewwidget.cc | 31 +++++++++---------------------- gui/fpgaviewwidget.h | 23 +++-------------------- 2 files changed, 12 insertions(+), 42 deletions(-) diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 55ed9315..45b35e6b 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -57,7 +57,7 @@ FPGAViewWidget::FPGAViewWidget(QWidget *parent) rendererArgs_->changed = false; rendererArgs_->gridChanged = false; - rendererArgs_->flags.zoomOutbound = true; + rendererArgs_->zoomOutbound = true; auto fmt = format(); fmt.setMajorVersion(3); @@ -97,7 +97,7 @@ void FPGAViewWidget::newContext(Context *ctx) onHighlightGroupChanged(std::vector(), i); { QMutexLocker lock(&rendererArgsLock_); - rendererArgs_->flags.zoomOutbound = true; + rendererArgs_->zoomOutbound = true; } pokeRenderer(); } @@ -339,22 +339,7 @@ void FPGAViewWidget::paintGL() lineShader_.draw(GraphicElement::STYLE_HOVER, colors_.hovered, thick2Px, matrix); - // Flags from pipeline. - PassthroughFlags flags = rendererData_->flags; - - // Check flags passed through pipeline. - if (flags.zoomOutbound) { - // If we're doing init zoomOutbound, make sure we're actually drawing - // something already. - if (rendererData_->gfxByStyle[GraphicElement::STYLE_FRAME].vertices.size() != 0) { - zoomOutbound(); - flags.zoomOutbound = false; - { - QMutexLocker lock(&rendererArgsLock_); - rendererArgs_->flags.zoomOutbound = false; - } - } - } + // Render ImGui QtImGui::newFrame(); QMutexLocker lock(&rendererArgsLock_); if (!(rendererArgs_->hoveredDecal == DecalXY()) && rendererArgs_->hintText.size() > 0) @@ -438,7 +423,6 @@ void FPGAViewWidget::renderLines(void) std::vector highlightedDecals[8]; bool highlightedOrSelectedChanged; bool gridChanged; - PassthroughFlags flags; { // Take the renderer arguments lock, copy over all we need. QMutexLocker lock(&rendererArgsLock_); @@ -453,7 +437,6 @@ void FPGAViewWidget::renderLines(void) gridChanged = rendererArgs_->gridChanged; rendererArgs_->changed = false; rendererArgs_->gridChanged = false; - flags = rendererArgs_->flags; } // Render decals if necessary. @@ -582,8 +565,12 @@ void FPGAViewWidget::renderLines(void) } { - QMutexLocker locker(&rendererDataLock_); - rendererData_->flags = flags; + QMutexLocker lock(&rendererArgsLock_); + + if (rendererArgs_->zoomOutbound) { + zoomOutbound(); + rendererArgs_->zoomOutbound = false; + } } } diff --git a/gui/fpgaviewwidget.h b/gui/fpgaviewwidget.h index 8c0ad609..3c0cfbbd 100644 --- a/gui/fpgaviewwidget.h +++ b/gui/fpgaviewwidget.h @@ -240,21 +240,6 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions QColor highlight[8]; } colors_; - // Flags that are passed through from renderer arguments to renderer data. - // These are used by the UI code to signal events that will only fire when - // the next frame gets rendered. - struct PassthroughFlags - { - bool zoomOutbound; - - PassthroughFlags() : zoomOutbound(false) {} - PassthroughFlags &operator=(const PassthroughFlags &other) noexcept - { - zoomOutbound = other.zoomOutbound; - return *this; - } - }; - struct RendererArgs { // Decals that he user selected. @@ -268,12 +253,12 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions // Whether to render grid or skip it. bool gridChanged; - // Flags to pass back into the RendererData. - PassthroughFlags flags; + // Flags for rendering. + bool zoomOutbound; // Hint text std::string hintText; // cursor pos - int x,y; + int x, y; }; std::unique_ptr rendererArgs_; QMutex rendererArgsLock_; @@ -291,8 +276,6 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions PickQuadTree::BoundingBox bbSelected; // Quadtree for picking objects. std::unique_ptr qt; - // Flags from args. - PassthroughFlags flags; }; std::unique_ptr rendererData_; QMutex rendererDataLock_;