X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Fdecoder_output%2FQHexView.cpp;h=ef57fd4c700a31974734568779baadda279bf1b5;hb=516d21289dafa7ce9b5352454a0eda31999c5efc;hp=051e0b1f350f1044649aee98fff0bd11e9413fd6;hpb=a61abf09a38e9b2e0bb7bd1753903069e0cad150;p=pulseview.git diff --git a/pv/views/decoder_output/QHexView.cpp b/pv/views/decoder_output/QHexView.cpp index 051e0b1f..ef57fd4c 100644 --- a/pv/views/decoder_output/QHexView.cpp +++ b/pv/views/decoder_output/QHexView.cpp @@ -122,6 +122,7 @@ void QHexView::initialize_byte_iterator(size_t offset) { current_chunk_id_ = 0; current_chunk_offset_ = 0; + current_offset_ = offset; for (const DecodeBinaryDataChunk& chunk : data_->chunks) if (offset >= chunk.data.size()) { @@ -132,7 +133,7 @@ void QHexView::initialize_byte_iterator(size_t offset) break; } - current_chunk_ = &(data_->chunks[current_chunk_id_]); + current_chunk_ = data_->chunks[current_chunk_id_]; } uint8_t QHexView::get_next_byte(bool* is_next_chunk) @@ -140,13 +141,15 @@ uint8_t QHexView::get_next_byte(bool* is_next_chunk) if (is_next_chunk != nullptr) *is_next_chunk = (current_chunk_offset_ == 0); - uint8_t v = current_chunk_->data[current_chunk_offset_]; + uint8_t v = current_chunk_.data[current_chunk_offset_]; + current_offset_++; current_chunk_offset_++; - if (current_chunk_offset_ == current_chunk_->data.size()) { + + if (current_chunk_offset_ == current_chunk_.data.size()) { current_chunk_id_++; current_chunk_offset_ = 0; - current_chunk_ = &(data_->chunks[current_chunk_id_]); + current_chunk_ = data_->chunks[current_chunk_id_]; } return v; @@ -237,7 +240,7 @@ void QHexView::paintEvent(QPaintEvent *event) for (size_t lineIdx = firstLineIdx, y = yStart; lineIdx < lastLineIdx; lineIdx++) { int x = posHex_; - for (size_t i = 0; i < BYTES_PER_LINE && ((lineIdx - firstLineIdx) * BYTES_PER_LINE + i) < data_size_; i++) { + for (size_t i = 0; (i < BYTES_PER_LINE) && (current_offset_ < data_size_); i++) { size_t pos = (lineIdx * BYTES_PER_LINE + i) * 2; // Fetch byte @@ -283,7 +286,7 @@ void QHexView::paintEvent(QPaintEvent *event) for (size_t lineIdx = firstLineIdx, y = yStart; lineIdx < lastLineIdx; lineIdx++) { int x = posAscii_; - for (size_t i = 0; ((lineIdx - firstLineIdx) * BYTES_PER_LINE + i) < data_size_ && (i < BYTES_PER_LINE); i++) { + for (size_t i = 0; (i < BYTES_PER_LINE) && (current_offset_ < data_size_); i++) { // Fetch byte uint8_t ch = get_next_byte();