From eccfb1f62bbf67ebffee11e241bd05757b826ff1 Mon Sep 17 00:00:00 2001 From: Wolfgang Bauer Date: Mon, 4 Mar 2019 09:59:45 -0500 Subject: [PATCH] Fix ibeam and underline cursor rendering Summary: Since anti-aliasing was enabled in the painter, coordinates need to be shifted half a pixel so that they align with the pixel grid, otherwise the result gets "blurred" due to the anti-aliasing. And as parts of the blurred shape leak outside the cursor rectangle, this also leaves artifacts when the cursor moves or blinks as these parts are not cleared. This is basically the same as commit e7085310d6d594823d0ed491fa8bdbd99dec4932 for the standard block cursor. BUG: 402589 Test Plan: - Switch cursor shape to "I-Beam" or "Underline" in the "Advanced" profile settings The cursors are a single line again now, before they were blurred by anti-aliasing. Screenshots: Before: {F6656366} {F6656370} After: {F6656371} {F6656373} Also, there are no more artifacts when the cursor is moved or cursor blinking is enabled. Reviewers: #konsole, hindenburg Reviewed By: #konsole, hindenburg Subscribers: hindenburg, konsole-devel Tags: #konsole Differential Revision: https://phabricator.kde.org/D19513 --- src/TerminalDisplay.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp index 543b8970..397422c4 100644 --- a/src/TerminalDisplay.cpp +++ b/src/TerminalDisplay.cpp @@ -716,16 +716,18 @@ void TerminalDisplay::drawCursor(QPainter& painter, } } } else if (_cursorShape == Enum::UnderlineCursor) { - painter.drawLine(cursorRect.left(), - cursorRect.bottom(), - cursorRect.right(), - cursorRect.bottom()); + QLineF line(cursorRect.left() + 0.5, + cursorRect.bottom() - 0.5, + cursorRect.right() - 0.5, + cursorRect.bottom() - 0.5); + painter.drawLine(line); } else if (_cursorShape == Enum::IBeamCursor) { - painter.drawLine(cursorRect.left(), - cursorRect.top(), - cursorRect.left(), - cursorRect.bottom()); + QLineF line(cursorRect.left() + 0.5, + cursorRect.top() + 0.5, + cursorRect.left() + 0.5, + cursorRect.bottom() - 0.5); + painter.drawLine(line); } }