From dba3fbf1f131fd4c9500e61a8594d96c32ace9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Sun, 3 Mar 2019 15:45:57 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@506 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad/blockview/blockeditor.ui | 3 +++ qad/blockview/blockview.cpp | 38 ++++++++++++++++++++++++++---------- qad/blockview/blockview.h | 3 ++- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/qad/blockview/blockeditor.ui b/qad/blockview/blockeditor.ui index d6ab517..29044fc 100644 --- a/qad/blockview/blockeditor.ui +++ b/qad/blockview/blockeditor.ui @@ -315,6 +315,9 @@ + + true + false diff --git a/qad/blockview/blockview.cpp b/qad/blockview/blockview.cpp index c7cd095..3aa7007 100644 --- a/qad/blockview/blockview.cpp +++ b/qad/blockview/blockview.cpp @@ -46,7 +46,7 @@ void BlockView::_init() { cur_scl = thumb_scl = prev_app_scale = 1.; _talpha = 0.; ae_enabled = is_block_anim = true; - is_nav_anim = false; + is_nav_anim = true; nav_prev_aa = nav_prev_imaa = nav_prev_grid = true; thumb_size = QSizeF(200, 200); if (scene() == 0) { @@ -667,7 +667,8 @@ void BlockView::wheelEvent(QWheelEvent * e) { //r.setHeight(r.height() * scl); r.setHeight(r.width() * vh / vw); r.translate(cx * (pw - r.width()), cy * (ph - r.height())); - animateNav(r); + animateNav(r, scl); + //_setNav(r); return; } if (!wheel_zoom) QGraphicsView::wheelEvent(e); @@ -1620,26 +1621,31 @@ QList BlockView::selectedDecors() const { } -QRectF BlockView::_nav() const { - return mapToScene(viewport()->rect()).boundingRect(); -} - - -void BlockView::animateNav(QRectF d) { +void BlockView::animateNav(QRectF d, double scl) { nav_target = d; if (is_nav_anim) { + if (anim_el.elapsed() < 10 || (qAbs(scl - 1.) <= 0.1)) { + if (nav_anim.state() == QAbstractAnimation::Running) { + nav_anim.stop(); + _navFinished(); + } + _setNav(d); + anim_el.restart(); + return; + } if (nav_anim.state() != QAbstractAnimation::Running) { nav_prev_aa = renderHints().testFlag(QPainter::Antialiasing); nav_prev_imaa = renderHints().testFlag(QPainter::SmoothPixmapTransform); nav_prev_grid = isGridVisible(); setRenderHint(QPainter::Antialiasing, false); - setRenderHint(QPainter::Antialiasing, false); + setRenderHint(QPainter::SmoothPixmapTransform, false); setGridVisible(false); } nav_anim.stop(); nav_anim.setStartValue(_nav()); nav_anim.setEndValue(d); nav_anim.start(); + anim_el.restart(); } else _setNav(d); } @@ -1815,7 +1821,19 @@ void BlockView::_setThumb(double v) { void BlockView::_setNav(QRectF v) { - QGraphicsView::fitInView(v); + //QGraphicsView::fitInView(v); + double vw = viewport()->width(), vh = viewport()->height(); + if (vw < 1. || vh < 1. || v.isEmpty()) return; + QTransform matrix; + double scl = qMin(vw / v.width(), vh / v.height()); + matrix.scale(scl, scl); + QGraphicsView::setTransform(matrix); + QGraphicsView::centerOn(v.center()); +} + + +QRectF BlockView::_nav() const { + return mapToScene(viewport()->rect()).boundingRect(); } diff --git a/qad/blockview/blockview.h b/qad/blockview/blockview.h index 0c7010e..71e9cd0 100644 --- a/qad/blockview/blockview.h +++ b/qad/blockview/blockview.h @@ -153,7 +153,7 @@ protected: void hideTmpBuses(bool clear = true); double _thumb() const {return _talpha;} QRectF _nav() const; - void animateNav(QRectF d); + void animateNav(QRectF d, double scl = 0.); void scrollFromThumb(); void deleteCopyTemp(); void emitActionEvent(BlockItemBase::Action action, QList items); @@ -188,6 +188,7 @@ protected: QWidget widget_thumb; Qt::KeyboardModifiers mm_mods; QPropertyAnimation thumb_anim, nav_anim; + QTime anim_el; int timer_thumb, thumb_hide_delay, thick; bool mm_drag, new_bus, new_branch, moved, mm_cancel, iconnect, mm_copy, mm_thumb, ae_enabled, is_nav_anim, is_block_anim, move_bus_point; bool grid_visible, grid_snap, pm_connect, navigation, m_connect, m_trace_with_buses, m_pin_mc, minimap, prev_tcb, wheel_zoom;