From d349cafe2d41e53a74282e8942513ebdd539aa32 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Mon, 31 May 2010 15:03:38 +0200
Subject: [PATCH] Fixes rounding errors in block positions.

Influences the position of the folded-block markers.

Reviewed-by: thorbjorn
---
 src/plugins/texteditor/basetexteditor.cpp | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 2f7b32c9183..c4e995c468e 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -2002,8 +2002,8 @@ QTextBlock BaseTextEditor::collapsedBlockAt(const QPoint &pos, QRect *box) const
 {
     QPointF offset(contentOffset());
     QTextBlock block = firstVisibleBlock();
-    int top = (int)blockBoundingGeometry(block).translated(offset).top();
-    int bottom = top + (int)blockBoundingRect(block).height();
+    qreal top = blockBoundingGeometry(block).translated(offset).top();
+    qreal bottom = top + blockBoundingRect(block).height();
 
     int viewportHeight = viewport()->height();
 
@@ -2037,7 +2037,7 @@ QTextBlock BaseTextEditor::collapsedBlockAt(const QPoint &pos, QRect *box) const
 
         block = nextBlock;
         top = bottom;
-        bottom = top + (int)blockBoundingRect(block).height();
+        bottom = top + blockBoundingRect(block).height();
     }
     return QTextBlock();
 }
@@ -2621,8 +2621,8 @@ void BaseTextEditor::paintEvent(QPaintEvent *e)
     offset = contentOffset();
     block = firstVisibleBlock();
 
-    int top = (int)blockBoundingGeometry(block).translated(offset).top();
-    int bottom = top + (int)blockBoundingRect(block).height();
+    qreal top = blockBoundingGeometry(block).translated(offset).top();
+    qreal bottom = top + blockBoundingRect(block).height();
 
     QTextCursor cursor = textCursor();
     bool hasSelection = cursor.hasSelection();
@@ -2653,8 +2653,9 @@ void BaseTextEditor::paintEvent(QPaintEvent *e)
                         QTextLine line = layout->lineAt(i);
                         QRectF lineRect = line.naturalTextRect().translated(offset.x(), top);
                         QChar visualArrow((ushort)0x21b5);
-                        painter.drawText(static_cast<int>(lineRect.right()),
-                                         static_cast<int>(lineRect.top() + line.ascent()), visualArrow);
+                        painter.drawText(QPointF(lineRect.right(),
+                                                 lineRect.top() + line.ascent()),
+                                         visualArrow);
                     }
                     if (!nextBlock.isValid()) { // paint EOF symbol
                         QTextLine line = layout->lineAt(lineCount-1);
@@ -2740,7 +2741,7 @@ void BaseTextEditor::paintEvent(QPaintEvent *e)
 
         block = nextVisibleBlock;
         top = bottom;
-        bottom = top + (int)blockBoundingRect(block).height();
+        bottom = top + blockBoundingRect(block).height();
     }
 
     if (visibleCollapsedBlock.isValid() ) {
@@ -2914,7 +2915,6 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
     int selStart = textCursor().selectionStart();
     int selEnd = textCursor().selectionEnd();
 
-    const QColor baseColor = palette().base().color();
     QPalette pal = d->m_extraArea->palette();
     pal.setCurrentColorGroup(QPalette::Active);
     QPainter painter(d->m_extraArea);
@@ -2940,7 +2940,8 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
     while (block.isValid() && top <= e->rect().bottom()) {
 
         top = bottom;
-        bottom = top + blockBoundingRect(block).height();
+        const qreal height = blockBoundingRect(block).height();
+        bottom = top + height;
         QTextBlock nextBlock = block.next();
 
         QTextBlock nextVisibleBlock = nextBlock;
@@ -3087,7 +3088,7 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
                 painter.setFont(f);
                 painter.setPen(d->m_currentLineNumberFormat.foreground().color());
             }
-            painter.drawText(markWidth, top, extraAreaWidth - markWidth - 4, fm.height(), Qt::AlignRight, number);
+            painter.drawText(QRectF(markWidth, top, extraAreaWidth - markWidth - 4, height), Qt::AlignRight, number);
             if (selected)
                 painter.restore();
         }
-- 
GitLab