void DecodeTrace::paint_mid(QPainter &p, int left, int right)
{
- using pv::data::decode::Annotation;
+ using namespace pv::data::decode;
const double scale = _view->scale();
assert(scale > 0);
_decoder_stack->get_start_time()) / scale;
const double samples_per_pixel = samplerate * scale;
+ const uint64_t start_sample = (uint64_t)max((left + pixels_offset) *
+ samples_per_pixel, 0.0);
+ const uint64_t end_sample = (uint64_t)max((right + pixels_offset) *
+ samples_per_pixel, 0.0);
+
QFontMetrics m(QApplication::font());
- const int h = (m.boundingRect(QRect(), 0, "Tg").height() * 5) / 4;
+ const int text_height = m.boundingRect(QRect(), 0, "Tg").height();
+ const int annotation_height = (text_height * 5) / 4;
+ const int row_height = (text_height * 6) / 4;
assert(_decoder_stack);
const QString err = _decoder_stack->error_message();
if (!err.isEmpty())
{
draw_error(p, err, left, right);
- draw_unresolved_period(p, h, left, right, samples_per_pixel,
- pixels_offset);
+ draw_unresolved_period(p, annotation_height, left, right,
+ samples_per_pixel, pixels_offset);
return;
}
+ // Iterate through the rows
assert(_view);
- const int y = get_y();
+ int y = get_y();
assert(_decoder_stack);
- vector<Annotation> annotations(_decoder_stack->annotations());
- BOOST_FOREACH(const Annotation &a, annotations)
- draw_annotation(a, p, get_text_colour(), h, left, right,
- samples_per_pixel, pixels_offset, y);
- draw_unresolved_period(p, h, left, right,
+ const vector<Row> rows(_decoder_stack->get_rows());
+ BOOST_FOREACH (const Row &row, rows)
+ {
+ vector<Annotation> annotations;
+ _decoder_stack->get_annotation_subset(annotations, row,
+ start_sample, end_sample);
+ if (!annotations.empty()) {
+ BOOST_FOREACH(const Annotation &a, annotations)
+ draw_annotation(a, p, get_text_colour(),
+ annotation_height, left, right,
+ samples_per_pixel, pixels_offset, y);
+ y += row_height;
+ }
+ }
+
+ // Draw the hatching
+ draw_unresolved_period(p, annotation_height, left, right,
samples_per_pixel, pixels_offset);
}