diff options
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r-- | gui/fpgaviewwidget.cc | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 16f70056..a6552ec9 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -202,8 +202,6 @@ void FPGAViewWidget::renderGraphicElement(LineShaderData &out, PickQuadTree::Bou bb.setY0(std::min(bb.y0(), y + el.y1)); bb.setX1(std::max(bb.x1(), x + el.x2)); bb.setY1(std::max(bb.y1(), y + el.y2)); - - out.last_render++; return; } @@ -213,8 +211,6 @@ void FPGAViewWidget::renderGraphicElement(LineShaderData &out, PickQuadTree::Bou bb.setY0(std::min(bb.y0(), y + el.y1)); bb.setX1(std::max(bb.x1(), x + el.x2)); bb.setY1(std::max(bb.y1(), y + el.y2)); - - out.last_render++; return; } } @@ -461,12 +457,18 @@ void FPGAViewWidget::renderLines(void) highlightedOrSelectedChanged = rendererArgs_->changed; rendererArgs_->changed = false; - flags = rendererArgs_->flags; } // Render decals if necessary. if (decalsChanged) { + int last_render[GraphicElement::STYLE_HIGHLIGHTED0]; + { + QMutexLocker locker(&rendererDataLock_); + for(int i =0; i<GraphicElement::STYLE_HIGHLIGHTED0; i++) + last_render[i] = rendererData_->gfxByStyle[(enum GraphicElement::style_t)i].last_render; + } + auto data = std::unique_ptr<FPGAViewWidget::RendererData>(new FPGAViewWidget::RendererData); // Reset bounding box. data->bbGlobal.clear(); @@ -532,7 +534,8 @@ void FPGAViewWidget::renderLines(void) for (int i = 0; i < 8; i++) data->gfxHighlighted[i] = rendererData_->gfxHighlighted[i]; } - + for(int i =0; i<GraphicElement::STYLE_HIGHLIGHTED0; i++) + data->gfxByStyle[(enum GraphicElement::style_t)i].last_render = ++last_render[i]; rendererData_ = std::move(data); } } @@ -543,6 +546,7 @@ void FPGAViewWidget::renderLines(void) // Whether the currently being hovered decal is also selected. bool hoveringSelected = false; // Render selected. + int prev = rendererData_->gfxSelected.indices.size(); rendererData_->bbSelected.clear(); rendererData_->gfxSelected.clear(); for (auto &decal : selectedDecals) { @@ -550,19 +554,27 @@ void FPGAViewWidget::renderLines(void) hoveringSelected = true; renderDecal(rendererData_->gfxSelected, rendererData_->bbSelected, decal); } + int curr = rendererData_->gfxSelected.indices.size(); + if (curr!=prev) rendererData_->gfxSelected.last_render++; // Render hovered. + prev = rendererData_->gfxHovered.indices.size(); rendererData_->gfxHovered.clear(); if (!hoveringSelected) { renderDecal(rendererData_->gfxHovered, rendererData_->bbGlobal, hoveredDecal); } + curr = rendererData_->gfxHovered.indices.size(); + if (curr!=prev) rendererData_->gfxHovered.last_render++; // Render highlighted. for (int i = 0; i < 8; i++) { + prev = rendererData_->gfxHighlighted[i].indices.size(); rendererData_->gfxHighlighted[i].clear(); for (auto &decal : highlightedDecals[i]) { renderDecal(rendererData_->gfxHighlighted[i], rendererData_->bbGlobal, decal); } + curr = rendererData_->gfxHighlighted[i].indices.size(); + if (curr!=prev) rendererData_->gfxHighlighted[i].last_render++; } } |