From 40254b068b9389c30608184e33ffce42ee3fc74c Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Mon, 18 Mar 2019 18:53:28 +0000
Subject: [PATCH] user/konsole: fix cursor rendering bug

---
 user/konsole/APKBUILD     |  7 +++-
 user/konsole/cursor.patch | 87 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+), 2 deletions(-)
 create mode 100644 user/konsole/cursor.patch

diff --git a/user/konsole/APKBUILD b/user/konsole/APKBUILD
index 827af3d24f..551c181481 100644
--- a/user/konsole/APKBUILD
+++ b/user/konsole/APKBUILD
@@ -16,7 +16,9 @@ makedepends="cmake extra-cmake-modules qt5-qtbase-dev kbookmarks-dev
 	kpty-dev kservice-dev ktextwidgets-dev kwidgetsaddons-dev python3
 	kwindowsystem-dev kxmlgui-dev kdbusaddons-dev knewstuff-dev"
 subpackages="$pkgname-doc $pkgname-lang"
-source="https://download.kde.org/stable/applications/$pkgver/src/konsole-$pkgver.tar.xz"
+source="https://download.kde.org/stable/applications/$pkgver/src/konsole-$pkgver.tar.xz
+	cursor.patch
+	"
 
 build() {
 	cd "$builddir"
@@ -44,4 +46,5 @@ package() {
 	make DESTDIR="$pkgdir" install
 }
 
-sha512sums="9fecd316a9bc7adaca9a3fac38a57d293286b6328e88d96ac1cf8967fcb67ef8e9a5b085e185c4373599eafd0eaa18f0d73df70df16b98a1badd9efb689e1f7c  konsole-18.12.3.tar.xz"
+sha512sums="9fecd316a9bc7adaca9a3fac38a57d293286b6328e88d96ac1cf8967fcb67ef8e9a5b085e185c4373599eafd0eaa18f0d73df70df16b98a1badd9efb689e1f7c  konsole-18.12.3.tar.xz
+66dcb31dd63f7a300b64058e8f9e56aa122c407d3a4a85c2323e7abf2e8eb4a3e1dd83de9445dac4938f9395b612eac5ceb9626bf895b532cfd19f63e0fbb2d7  cursor.patch"
diff --git a/user/konsole/cursor.patch b/user/konsole/cursor.patch
new file mode 100644
index 0000000000..621a4f36bd
--- /dev/null
+++ b/user/konsole/cursor.patch
@@ -0,0 +1,87 @@
+From 9af659c73e3203e1d5ef3873fa6c0144258b9673 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
+
+(cherry picked from commit eccfb1f62bbf67ebffee11e241bd05757b826ff1)
+---
+ src/TerminalDisplay.cpp | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp
+index 64c831c..7c8137d 100644
+--- a/src/TerminalDisplay.cpp
++++ b/src/TerminalDisplay.cpp
+@@ -958,16 +958,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
+
-- 
GitLab