From a767229eb18acbd70af38bb660c8ebd1bbd82e73 Mon Sep 17 00:00:00 2001 From: Soeren Apel Date: Wed, 26 Feb 2020 09:22:34 +0100 Subject: [PATCH] Fix #1505 by always updating the DecodeTrace height when needed --- pv/views/trace/decodetrace.cpp | 30 +++++++----------------------- pv/views/trace/decodetrace.hpp | 2 +- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp index c451635f..1cc89feb 100644 --- a/pv/views/trace/decodetrace.cpp +++ b/pv/views/trace/decodetrace.cpp @@ -150,7 +150,6 @@ DecodeTrace::DecodeTrace(pv::Session &session, shared_ptr signalbase, int index) : Trace(signalbase), session_(session), - max_visible_rows_(0), show_hidden_rows_(false), delete_mapper_(this), show_hide_mapper_(this), @@ -276,6 +275,7 @@ void DecodeTrace::paint_back(QPainter &p, ViewItemPaintParams &pp) void DecodeTrace::paint_mid(QPainter &p, ViewItemPaintParams &pp) { lock_guard lock(row_modification_mutex_); + unsigned int visible_rows; #if DECODETRACE_SHOW_RENDER_TIME render_time_.restart(); @@ -292,7 +292,7 @@ void DecodeTrace::paint_mid(QPainter &p, ViewItemPaintParams &pp) sample_range.second = min((int64_t)sample_range.second, decode_signal_->get_decoded_sample_count(current_segment_, false)); - visible_rows_ = 0; + visible_rows = 0; int y = get_visual_y(); for (DecodeTraceRow& r : rows_) { @@ -322,14 +322,14 @@ void DecodeTrace::paint_mid(QPainter &p, ViewItemPaintParams &pp) if (r.currently_visible) { draw_annotations(annotations, p, pp, y, r); y += r.height; - visible_rows_++; + visible_rows++; } } draw_unresolved_period(p, pp.left(), pp.right()); - if (visible_rows_ > max_visible_rows_) { - max_visible_rows_ = visible_rows_; + if (visible_rows != visible_rows_) { + visible_rows_ = visible_rows; // Call order is important, otherwise the lazy event handler won't work owner_->extents_changed(false, true); @@ -1481,8 +1481,6 @@ void DecodeTrace::set_row_expanded(DecodeTraceRow* r) r->container->resize(owner_->view()->viewport()->width() - r->container->pos().x(), r->height - 2 * default_row_height_); - - max_visible_rows_ = 0; } void DecodeTrace::set_row_collapsed(DecodeTraceRow* r) @@ -1495,8 +1493,6 @@ void DecodeTrace::set_row_collapsed(DecodeTraceRow* r) r->container->resize(owner_->view()->viewport()->width() - r->container->pos().x(), r->height - 2 * default_row_height_); - - max_visible_rows_ = 0; } void DecodeTrace::update_expanded_rows() @@ -1526,10 +1522,8 @@ void DecodeTrace::on_setting_changed(const QString &key, const QVariant &value) { Trace::on_setting_changed(key, value); - if (key == GlobalSettings::Key_Dec_AlwaysShowAllRows) { - max_visible_rows_ = 0; + if (key == GlobalSettings::Key_Dec_AlwaysShowAllRows) always_show_all_rows_ = value.toBool(); - } } void DecodeTrace::on_new_annotations() @@ -1546,7 +1540,6 @@ void DecodeTrace::on_delayed_trace_update() void DecodeTrace::on_decode_reset() { - max_visible_rows_ = 0; update_rows(); if (owner_) @@ -1618,8 +1611,6 @@ void DecodeTrace::on_delete_decoder(int index) decode_signal_->remove_decoder(index); update_rows(); - // Force re-calculation of the trace height - max_visible_rows_ = 0; owner_->extents_changed(false, true); create_popup_form(); @@ -1632,11 +1623,8 @@ void DecodeTrace::on_show_hide_decoder(int index) assert(index < (int)decoder_forms_.size()); decoder_forms_[index]->set_decoder_visible(state); - if (!state) { - // Force re-calculation of the trace height, see paint_mid() - max_visible_rows_ = 0; + if (!state) owner_->extents_changed(false, true); - } owner_->row_item_appearance_changed(false, true); } @@ -1651,8 +1639,6 @@ void DecodeTrace::on_show_hide_row(int row_id) if (!rows_[row_id].decode_row->visible()) set_row_collapsed(&rows_[row_id]); - // Force re-calculation of the trace height, see paint_mid() - max_visible_rows_ = 0; owner_->extents_changed(false, true); owner_->row_item_appearance_changed(false, true); } @@ -1879,8 +1865,6 @@ void DecodeTrace::on_hide_hidden_rows() if (!any_highlighted) { show_hidden_rows_ = false; - // Force re-calculation of the trace height, see paint_mid() - max_visible_rows_ = 0; owner_->extents_changed(false, true); owner_->row_item_appearance_changed(false, true); } diff --git a/pv/views/trace/decodetrace.hpp b/pv/views/trace/decodetrace.hpp index f2b28be0..258509e6 100644 --- a/pv/views/trace/decodetrace.hpp +++ b/pv/views/trace/decodetrace.hpp @@ -319,7 +319,7 @@ private: QPushButton* stack_button_; unsigned int default_row_height_, annotation_height_; - unsigned int visible_rows_, max_visible_rows_; + unsigned int visible_rows_; int min_useful_label_width_; bool always_show_all_rows_, show_hidden_rows_; -- 2.30.2