X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Flogicsignal.cpp;h=438e4e21c1f6a6c639543897cb65f35362e9a746;hp=8396323f4ee05623c3e49d747ef9b44caf47cc15;hb=b4bc9b55381ff22196785291d3862c8c8c131885;hpb=4514c57217fc050918f211da391ac31d0272298b diff --git a/pv/views/trace/logicsignal.cpp b/pv/views/trace/logicsignal.cpp index 8396323f..438e4e21 100644 --- a/pv/views/trace/logicsignal.cpp +++ b/pv/views/trace/logicsignal.cpp @@ -320,6 +320,51 @@ void LogicSignal::paint_fore(QPainter &p, ViewItemPaintParams &pp) } } +void LogicSignal::hover_point_changed(const QPoint &hp) +{ + Signal::hover_point_changed(hp); + + assert(base_); + assert(owner_); + + if ((!base_->enabled()) || (hp.x() == 0)) + return; + + // Ignore if mouse cursor is not hovering over this trace + const int y = get_visual_y(); + const pair extents = v_extents(); + if ((hp.y() < (y + extents.first)) || ((hp.y() > (y + extents.second)))) + return; + + shared_ptr segment = get_logic_segment_to_paint(); + if (!segment || (segment->get_sample_count() == 0)) + return; + + double samplerate = segment->samplerate(); + + // Show sample rate as 1Hz when it is unknown + if (samplerate == 0.0) + samplerate = 1.0; + + const View *view = owner_->view(); + assert(view); + const double scale = view->scale(); + const double pixels_offset = + ((view->offset() - segment->start_time()) / scale).convert_to(); + const double samples_per_pixel = samplerate * scale; + + const uint64_t sample_pos = (uint64_t)max( + (hp.x() + pixels_offset) * samples_per_pixel, 0.0); + + vector edges; + + segment->get_surrounding_edges(edges, sample_pos, + samples_per_pixel / Oversampling, base_->index()); + + if (edges.empty()) + return; +} + void LogicSignal::paint_caps(QPainter &p, QLineF *const lines, vector< pair > &edges, bool level, double samples_per_pixel, double pixels_offset, float x_offset,