diff options
Diffstat (limited to 'gui')
-rw-r--r-- | gui/fpgaviewwidget.cc | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 84a74587..0bbf80e2 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -240,9 +240,10 @@ void FPGAViewWidget::populateQuadTree(RendererData *data, const DecalXY &decal, continue; } + bool res = true; if (el.type == GraphicElement::TYPE_BOX) { // Boxes are bounded by themselves. - data->qt->insert(PickQuadTree::BoundingBox(x + el.x1, y + el.y1, x + el.x2, y + el.y2), element); + res = data->qt->insert(PickQuadTree::BoundingBox(x + el.x1, y + el.y1, x + el.x2, y + el.y2), element); } if (el.type == GraphicElement::TYPE_LINE || el.type == GraphicElement::TYPE_ARROW) { @@ -261,7 +262,11 @@ void FPGAViewWidget::populateQuadTree(RendererData *data, const DecalXY &decal, x1 += 0.01; y1 += 0.01; - data->qt->insert(PickQuadTree::BoundingBox(x0, y0, x1, y1), element); + res = data->qt->insert(PickQuadTree::BoundingBox(x0, y0, x1, y1), element); + } + + if (!res) { + NPNR_ASSERT_FALSE("populateQuadTree: could not insert element"); } } } @@ -450,8 +455,17 @@ void FPGAViewWidget::renderLines(void) NPNR_ASSERT(data->bbGlobal.w() != 0); NPNR_ASSERT(data->bbGlobal.h() != 0); + // Enlarge the bounding box slightly for the picking - when we insert + // elements into it, we enlarge their bounding boxes slightly, so + // we need to give ourselves some sagery margin here. + auto bb = data->bbGlobal; + bb.setX0(bb.x0() - 1); + bb.setY0(bb.y0() - 1); + bb.setX1(bb.x1() + 1); + bb.setY1(bb.y1() + 1); + // Populate picking quadtree. - data->qt = std::unique_ptr<PickQuadTree>(new PickQuadTree(data->bbGlobal)); + data->qt = std::unique_ptr<PickQuadTree>(new PickQuadTree(bb)); for (auto const &decal : belDecals) { populateQuadTree(data.get(), decal.first, PickedElement::fromBel(decal.second, decal.first.x, decal.first.y)); |