From 95f3d1b0750044967c6cf2f767d809453ca7819b Mon Sep 17 00:00:00 2001 From: naf Date: Tue, 2 Feb 2021 13:25:52 -0600 Subject: [PATCH] QT ByteViewText: calculate string widths consistently to prevent clipping For QT >5.11, stringWidth() uses horizontalAdvance, which gives different (longer) widths than the old boundingRect().width() method. Other locations use the boundRect().width() method directly, resulting in underestimating line widths and clipping the last characters in the byte view window. Fix by forcing all width calculations to use stringWidth(). Closes #17087. --- ui/qt/widgets/byte_view_text.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ui/qt/widgets/byte_view_text.cpp b/ui/qt/widgets/byte_view_text.cpp index 46c9f79b08..9378b06f71 100644 --- a/ui/qt/widgets/byte_view_text.cpp +++ b/ui/qt/widgets/byte_view_text.cpp @@ -344,7 +344,7 @@ const int ByteViewText::separator_interval_ = DataPrinter::separatorInterval(); void ByteViewText::updateLayoutMetrics() { - font_width_ = fontMetrics().boundingRect('M').width(); + font_width_ = stringWidth("M"); // We might want to match ProtoTree::rowHeight. line_height_ = fontMetrics().height(); } @@ -607,7 +607,7 @@ int ByteViewText::offsetPixels() if (show_offset_) { // One pad space before and after QString zeroes = QString(offsetChars(), '0'); - return fontMetrics().boundingRect(zeroes).width(); + return stringWidth(zeroes); } return 0; } @@ -618,7 +618,7 @@ int ByteViewText::hexPixels() if (show_hex_) { // One pad space before and after QString zeroes = QString(DataPrinter::hexChars() + 2, '0'); - return fontMetrics().boundingRect(zeroes).width(); + return stringWidth(zeroes); } return 0; } @@ -629,7 +629,7 @@ int ByteViewText::asciiPixels() // Two pad spaces before, one after int ascii_chars = (row_width_ + ((row_width_ - 1) / separator_interval_)); QString zeroes = QString(ascii_chars + 3, '0'); - return fontMetrics().boundingRect(zeroes).width(); + return stringWidth(zeroes); } return 0; }