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_->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<DecalXY>(), 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<DecalXY> 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;
}
}
}

View File

@ -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> rendererArgs_;
QMutex rendererArgsLock_;
@ -291,8 +276,6 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions
PickQuadTree::BoundingBox bbSelected;
// Quadtree for picking objects.
std::unique_ptr<PickQuadTree> qt;
// Flags from args.
PassthroughFlags flags;
};
std::unique_ptr<RendererData> rendererData_;
QMutex rendererDataLock_;