Sorted out zoomout, works for all now

This commit is contained in:
Miodrag Milanovic 2018-11-11 09:04:20 +01:00
parent 0ad5197ff4
commit 3cfdb4e0c1
2 changed files with 12 additions and 42 deletions

View File

@ -57,7 +57,7 @@ FPGAViewWidget::FPGAViewWidget(QWidget *parent)
rendererArgs_->changed = false; rendererArgs_->changed = false;
rendererArgs_->gridChanged = false; rendererArgs_->gridChanged = false;
rendererArgs_->flags.zoomOutbound = true; rendererArgs_->zoomOutbound = true;
auto fmt = format(); auto fmt = format();
fmt.setMajorVersion(3); fmt.setMajorVersion(3);
@ -97,7 +97,7 @@ void FPGAViewWidget::newContext(Context *ctx)
onHighlightGroupChanged(std::vector<DecalXY>(), i); onHighlightGroupChanged(std::vector<DecalXY>(), i);
{ {
QMutexLocker lock(&rendererArgsLock_); QMutexLocker lock(&rendererArgsLock_);
rendererArgs_->flags.zoomOutbound = true; rendererArgs_->zoomOutbound = true;
} }
pokeRenderer(); pokeRenderer();
} }
@ -339,22 +339,7 @@ void FPGAViewWidget::paintGL()
lineShader_.draw(GraphicElement::STYLE_HOVER, colors_.hovered, lineShader_.draw(GraphicElement::STYLE_HOVER, colors_.hovered,
thick2Px, matrix); thick2Px, matrix);
// Flags from pipeline. // Render ImGui
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;
}
}
}
QtImGui::newFrame(); QtImGui::newFrame();
QMutexLocker lock(&rendererArgsLock_); QMutexLocker lock(&rendererArgsLock_);
if (!(rendererArgs_->hoveredDecal == DecalXY()) && rendererArgs_->hintText.size() > 0) if (!(rendererArgs_->hoveredDecal == DecalXY()) && rendererArgs_->hintText.size() > 0)
@ -438,7 +423,6 @@ void FPGAViewWidget::renderLines(void)
std::vector<DecalXY> highlightedDecals[8]; std::vector<DecalXY> highlightedDecals[8];
bool highlightedOrSelectedChanged; bool highlightedOrSelectedChanged;
bool gridChanged; bool gridChanged;
PassthroughFlags flags;
{ {
// Take the renderer arguments lock, copy over all we need. // Take the renderer arguments lock, copy over all we need.
QMutexLocker lock(&rendererArgsLock_); QMutexLocker lock(&rendererArgsLock_);
@ -453,7 +437,6 @@ void FPGAViewWidget::renderLines(void)
gridChanged = rendererArgs_->gridChanged; gridChanged = rendererArgs_->gridChanged;
rendererArgs_->changed = false; rendererArgs_->changed = false;
rendererArgs_->gridChanged = false; rendererArgs_->gridChanged = false;
flags = rendererArgs_->flags;
} }
// Render decals if necessary. // Render decals if necessary.
@ -582,8 +565,12 @@ void FPGAViewWidget::renderLines(void)
} }
{ {
QMutexLocker locker(&rendererDataLock_); QMutexLocker lock(&rendererArgsLock_);
rendererData_->flags = flags;
if (rendererArgs_->zoomOutbound) {
zoomOutbound();
rendererArgs_->zoomOutbound = false;
}
} }
} }

View File

@ -240,21 +240,6 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions
QColor highlight[8]; QColor highlight[8];
} colors_; } 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 struct RendererArgs
{ {
// Decals that he user selected. // Decals that he user selected.
@ -268,12 +253,12 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions
// Whether to render grid or skip it. // Whether to render grid or skip it.
bool gridChanged; bool gridChanged;
// Flags to pass back into the RendererData. // Flags for rendering.
PassthroughFlags flags; bool zoomOutbound;
// Hint text // Hint text
std::string hintText; std::string hintText;
// cursor pos // cursor pos
int x,y; int x, y;
}; };
std::unique_ptr<RendererArgs> rendererArgs_; std::unique_ptr<RendererArgs> rendererArgs_;
QMutex rendererArgsLock_; QMutex rendererArgsLock_;
@ -291,8 +276,6 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions
PickQuadTree::BoundingBox bbSelected; PickQuadTree::BoundingBox bbSelected;
// Quadtree for picking objects. // Quadtree for picking objects.
std::unique_ptr<PickQuadTree> qt; std::unique_ptr<PickQuadTree> qt;
// Flags from args.
PassthroughFlags flags;
}; };
std::unique_ptr<RendererData> rendererData_; std::unique_ptr<RendererData> rendererData_;
QMutex rendererDataLock_; QMutex rendererDataLock_;