summaryrefslogtreecommitdiff
blob: f9960340b9069f01864afc049317423e93143e26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
From eccfb1f62bbf67ebffee11e241bd05757b826ff1 Mon Sep 17 00:00:00 2001
From: Wolfgang Bauer <wbauer@tmo.at>
Date: Mon, 4 Mar 2019 09:59:45 -0500
Subject: 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 543b897..397422c 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);
     }
 }
 
-- 
cgit v1.1