gui: unselect on click and zoom fixes

This commit is contained in:
Sergiusz Bazanski 2018-07-27 15:46:00 +01:00
parent 816d33fa94
commit c210ce7768
2 changed files with 26 additions and 7 deletions

View File

@ -593,8 +593,17 @@ void FPGAViewWidget::mousePressEvent(QMouseEvent *event)
auto world = mouseToWorldCoordinates(event->x(), event->y());
auto closestOr = pickElement(world.x(), world.y());
if (!closestOr)
if (!closestOr) {
// If we clicked on empty space and aren't holding down ctrl,
// clear the selection.
if (!ctrl) {
QMutexLocker locked(&rendererArgsLock_);
rendererArgs_->selectedDecals.clear();
rendererArgs_->changed = true;
pokeRenderer();
}
return;
}
auto closest = closestOr.value();
if (closest.type == ElementType::BEL) {
@ -709,11 +718,19 @@ void FPGAViewWidget::zoom(int level)
update();
}
void FPGAViewWidget::clampZoom()
{
if (zoom_ < zoomNear_)
zoom_ = zoomNear_;
else if (zoom_ > zoomFar_)
zoom_ = zoomFar_;
}
void FPGAViewWidget::zoomIn() { zoom(10); }
void FPGAViewWidget::zoomOut() { zoom(-10); }
void FPGAViewWidget::zoomToBB(const PickQuadTree::BoundingBox &bb)
void FPGAViewWidget::zoomToBB(const PickQuadTree::BoundingBox &bb, float margin)
{
if (bb.w() < 0.00005 && bb.h() < 0.00005)
return;
@ -723,16 +740,17 @@ void FPGAViewWidget::zoomToBB(const PickQuadTree::BoundingBox &bb)
// Our FOV is π/2, so distance for camera to see a plane of width H is H/2.
// We add 1 unit to cover half a unit of extra space around.
float distance_w = bb.w() / 2 + 1;
float distance_h = bb.h() / 2 + 1;
float distance_w = bb.w() / 2 + margin;
float distance_h = bb.h() / 2 + margin;
zoom_ = std::max(distance_w, distance_h);
clampZoom();
}
void FPGAViewWidget::zoomSelected()
{
{
QMutexLocker lock(&rendererDataLock_);
zoomToBB(rendererData_->bbSelected);
zoomToBB(rendererData_->bbSelected, 0.5f);
}
update();
}
@ -741,7 +759,7 @@ void FPGAViewWidget::zoomOutbound()
{
{
QMutexLocker lock(&rendererDataLock_);
zoomToBB(rendererData_->bbGlobal);
zoomToBB(rendererData_->bbGlobal, 1.0f);
}
}

View File

@ -290,7 +290,8 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions
std::unique_ptr<RendererData> rendererData_;
QMutex rendererDataLock_;
void zoomToBB(const PickQuadTree::BoundingBox &bb);
void clampZoom();
void zoomToBB(const PickQuadTree::BoundingBox &bb, float margin);
void zoom(int level);
void renderLines(void);
void renderGraphicElement(LineShaderData &out, PickQuadTree::BoundingBox &bb, const GraphicElement &el, float x,