X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Flogicsignal.cpp;h=6a9bf432a07157c2a2e7713e60dbd7972c8abd8f;hp=8396323f4ee05623c3e49d747ef9b44caf47cc15;hb=eeceee9955e7db4ac777d49d1b7a766069476b08;hpb=cc844e861276b56837c345d69975c50f009d57af diff --git a/pv/views/trace/logicsignal.cpp b/pv/views/trace/logicsignal.cpp index 8396323..6a9bf43 100644 --- a/pv/views/trace/logicsignal.cpp +++ b/pv/views/trace/logicsignal.cpp @@ -57,6 +57,8 @@ using sigrok::Trigger; using sigrok::TriggerMatch; using sigrok::TriggerMatchType; +using pv::data::LogicSegment; + namespace pv { namespace views { namespace trace { @@ -181,7 +183,7 @@ void LogicSignal::paint_mid(QPainter &p, ViewItemPaintParams &pp) const float high_offset = y - signal_height_ + 0.5f; const float low_offset = y + 0.5f; - shared_ptr segment = get_logic_segment_to_paint(); + shared_ptr segment = get_logic_segment_to_paint(); if (!segment || (segment->get_sample_count() == 0)) return; @@ -320,6 +322,33 @@ void LogicSignal::paint_fore(QPainter &p, ViewItemPaintParams &pp) } } +vector LogicSignal::get_nearest_level_changes(uint64_t sample_pos) +{ + assert(base_); + assert(owner_); + + if (sample_pos == 0) + return vector(); + + shared_ptr segment = get_logic_segment_to_paint(); + if (!segment || (segment->get_sample_count() == 0)) + return vector(); + + const View *view = owner_->view(); + assert(view); + const double samples_per_pixel = base_->get_samplerate() * view->scale(); + + vector edges; + + segment->get_surrounding_edges(edges, sample_pos, + samples_per_pixel / Oversampling, base_->index()); + + if (edges.empty()) + return vector(); + + return edges; +} + void LogicSignal::paint_caps(QPainter &p, QLineF *const lines, vector< pair > &edges, bool level, double samples_per_pixel, double pixels_offset, float x_offset,