using sigrok::TriggerMatch;
using sigrok::TriggerMatchType;
+using pv::data::LogicSegment;
+
namespace pv {
namespace views {
namespace trace {
return make_pair(-signal_height_ - signal_margin, signal_margin);
}
-int LogicSignal::scale_handle_offset() const
-{
- return -signal_height_;
-}
-
-void LogicSignal::scale_handle_dragged(int offset)
-{
- const int font_height = QFontMetrics(QApplication::font()).height();
- const int units = (-offset / font_height);
- signal_height_ = ((units < 1) ? 1 : units) * font_height;
-}
-
void LogicSignal::paint_mid(QPainter &p, ViewItemPaintParams &pp)
{
QLineF *line;
const float high_offset = y - signal_height_ + 0.5f;
const float low_offset = y + 0.5f;
- shared_ptr<pv::data::LogicSegment> segment = get_logic_segment_to_paint();
+ shared_ptr<LogicSegment> segment = get_logic_segment_to_paint();
if (!segment || (segment->get_sample_count() == 0))
return;
}
}
+vector<LogicSegment::EdgePair> LogicSignal::get_nearest_level_changes(uint64_t sample_pos)
+{
+ assert(base_);
+ assert(owner_);
+
+ if (sample_pos == 0)
+ return vector<LogicSegment::EdgePair>();
+
+ shared_ptr<LogicSegment> segment = get_logic_segment_to_paint();
+ if (!segment || (segment->get_sample_count() == 0))
+ return vector<LogicSegment::EdgePair>();
+
+ const View *view = owner_->view();
+ assert(view);
+ const double samples_per_pixel = base_->get_samplerate() * view->scale();
+
+ vector<LogicSegment::EdgePair> edges;
+
+ segment->get_surrounding_edges(edges, sample_pos,
+ samples_per_pixel / Oversampling, base_->index());
+
+ if (edges.empty())
+ return vector<LogicSegment::EdgePair>();
+
+ return edges;
+}
+
void LogicSignal::paint_caps(QPainter &p, QLineF *const lines,
vector< pair<int64_t, bool> > &edges, bool level,
double samples_per_pixel, double pixels_offset, float x_offset,