X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Frowitem.cpp;h=293460233a8fd96ff81888664d447cd8feb4418f;hp=b64294c48907f564540c8edb91b33be01affdc95;hb=8dbbc7f0b9ea59d0f0d62225772f8a56eee125f5;hpb=32218d3e708553b4508c3510d388aded58068381 diff --git a/pv/view/rowitem.cpp b/pv/view/rowitem.cpp index b64294c4..29346023 100644 --- a/pv/view/rowitem.cpp +++ b/pv/view/rowitem.cpp @@ -28,66 +28,91 @@ namespace pv { namespace view { RowItem::RowItem() : - _owner(NULL), - _layout_v_offset(0), - _visual_v_offset(0) + owner_(NULL), + layout_v_offset_(0), + visual_v_offset_(0), + v_offset_animation_(this, "visual_v_offset") { } int RowItem::layout_v_offset() const { - return _layout_v_offset; + return layout_v_offset_; } void RowItem::set_layout_v_offset(int v_offset) { - if (_layout_v_offset == v_offset) + if (layout_v_offset_ == v_offset) return; - _layout_v_offset = v_offset; + layout_v_offset_ = v_offset; - if (_owner) - _owner->extents_changed(false, true); + if (owner_) + owner_->extents_changed(false, true); } int RowItem::visual_v_offset() const { - return _visual_v_offset; + return visual_v_offset_; } void RowItem::set_visual_v_offset(int v_offset) { - _visual_v_offset = v_offset; + visual_v_offset_ = v_offset; - if (_owner) - _owner->appearance_changed(true, true); + if (owner_) + owner_->appearance_changed(true, true); } void RowItem::force_to_v_offset(int v_offset) { - _layout_v_offset = _visual_v_offset = v_offset; + v_offset_animation_.stop(); + layout_v_offset_ = visual_v_offset_ = v_offset; +} + +void RowItem::animate_to_layout_v_offset() +{ + if (visual_v_offset_ == layout_v_offset_ || + (v_offset_animation_.endValue() == layout_v_offset_ && + v_offset_animation_.state() == QAbstractAnimation::Running)) + return; + + v_offset_animation_.setDuration(100); + v_offset_animation_.setStartValue(visual_v_offset_); + v_offset_animation_.setEndValue(layout_v_offset_); + v_offset_animation_.setEasingCurve(QEasingCurve::OutQuad); + v_offset_animation_.start(); } RowItemOwner* RowItem::owner() const { - return _owner; + return owner_; } void RowItem::set_owner(RowItemOwner *owner) { - assert(_owner || owner); - - if (_owner) - _visual_v_offset += _owner->owner_v_offset(); - _owner = owner; - if (_owner) - _visual_v_offset -= _owner->owner_v_offset(); + assert(owner_ || owner); + v_offset_animation_.stop(); + + if (owner_) { + const int owner_offset = owner_->owner_visual_v_offset(); + layout_v_offset_ += owner_offset; + visual_v_offset_ += owner_offset; + } + + owner_ = owner; + + if (owner_) { + const int owner_offset = owner_->owner_visual_v_offset(); + layout_v_offset_ -= owner_offset; + visual_v_offset_ -= owner_offset; + } } int RowItem::get_visual_y() const { - assert(_owner); - return _visual_v_offset + _owner->owner_v_offset(); + assert(owner_); + return visual_v_offset_ + owner_->owner_visual_v_offset(); } QPoint RowItem::point() const