X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Flogicsignal.cpp;h=2967147f63a5145774df02aa7bcae1dae558865b;hb=453b6d63444bf7fb03242761653fd18e9cde7443;hp=49d1263642b9b97ee3bac15c95fbe8a897e2f724;hpb=4c60462b00cc329e61daedd1c2e66724077bd412;p=pulseview.git diff --git a/pv/view/logicsignal.cpp b/pv/view/logicsignal.cpp index 49d1263..2967147 100644 --- a/pv/view/logicsignal.cpp +++ b/pv/view/logicsignal.cpp @@ -25,6 +25,7 @@ #include +#include #include #include @@ -60,7 +61,6 @@ namespace pv { namespace view { const int LogicSignal::SignalHeight = 30; -const int LogicSignal::SignalMargin = 10; const float LogicSignal::Oversampling = 2.0f; @@ -147,7 +147,19 @@ void LogicSignal::set_logic_data(std::shared_ptr data) std::pair LogicSignal::v_extents() const { - return make_pair(-SignalHeight - SignalMargin, SignalMargin); + const int signal_margin = + QFontMetrics(QApplication::font()).height() / 2; + return make_pair(-SignalHeight - signal_margin, signal_margin); +} + +int LogicSignal::scale_handle_offset() const +{ + return SignalHeight; +} + +void LogicSignal::scale_handle_dragged(int offset) +{ + (void)offset; } void LogicSignal::paint_back(QPainter &p, const ViewItemPaintParams &pp) @@ -189,15 +201,18 @@ void LogicSignal::paint_mid(QPainter &p, const ViewItemPaintParams &pp) samplerate = 1.0; const double pixels_offset = pp.pixels_offset(); - const double start_time = segment->start_time(); + const pv::util::Timestamp& start_time = segment->start_time(); const int64_t last_sample = segment->get_sample_count() - 1; const double samples_per_pixel = samplerate * pp.scale(); - const double start = samplerate * (pp.offset() - start_time); - const double end = start + samples_per_pixel * pp.width(); + const pv::util::Timestamp start = samplerate * (pp.offset() - start_time); + const pv::util::Timestamp end = start + samples_per_pixel * pp.width(); + + const int64_t start_sample = min(max(floor(start).convert_to(), + (int64_t)0), last_sample); + const uint64_t end_sample = min(max(ceil(end).convert_to(), + (int64_t)0), last_sample); - segment->get_subsampled_edges(edges, - min(max((int64_t)floor(start), (int64_t)0), last_sample), - min(max((int64_t)ceil(end), (int64_t)0), last_sample), + segment->get_subsampled_edges(edges, start_sample, end_sample, samples_per_pixel / Oversampling, channel_->index()); assert(edges.size() >= 2); @@ -417,7 +432,7 @@ void LogicSignal::modify_trigger() if (trigger) { for (auto stage : trigger->stages()) { const auto &matches = stage->matches(); - if (std::none_of(begin(matches), end(matches), + if (std::none_of(matches.begin(), matches.end(), [&](shared_ptr match) { return match->channel() != channel_; })) continue;