commit:     6984d3c3f7cfb5f0dfbc1d166d7bf2be409280be
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 20:41:53 2018 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sun Dec 23 01:25:26 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6984d3c3

kde-apps/konsole: Fix drawing box chars

Fixed in 18.12.1.

Thanks-to: Lars Wendler <polynomial-c <AT> gentoo.org>
Package-Manager: Portage-2.3.52, Repoman-2.3.12
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../konsole-18.12.0-fix-drawing-box-chars.patch    | 188 +++++++++++++++++++++
 kde-apps/konsole/konsole-18.12.0-r1.ebuild         |  59 +++++++
 2 files changed, 247 insertions(+)

diff --git a/kde-apps/konsole/files/konsole-18.12.0-fix-drawing-box-chars.patch 
b/kde-apps/konsole/files/konsole-18.12.0-fix-drawing-box-chars.patch
new file mode 100644
index 00000000000..1847543737a
--- /dev/null
+++ b/kde-apps/konsole/files/konsole-18.12.0-fix-drawing-box-chars.patch
@@ -0,0 +1,188 @@
+From 807ac77061604c2ac7cf84b0a0b29dd949a6c634 Mon Sep 17 00:00:00 2001
+From: "Martin T. H. Sandsmark" <[email protected]>
+Date: Thu, 6 Dec 2018 10:02:41 -0500
+Subject: fix drawing box chars, avoid storing and saving state all the time
+
+Summary:
+to get the box chars to be drawn correctly we need to turn on high
+quality antialiasing in qpainter. in addition only turn it on if
+antialiasing is enabled.
+
+lastly qpainter.save()/restore() is called very often, so try to avoid
+that if it isn't necessary.
+
+BUG: 401463
+
+Test Plan:
+`cat tests/boxes.txt`
+
+old:
+
+{F6428268}
+
+new:
+
+{F6450304}
+
+Reviewers: #konsole, hindenburg
+
+Reviewed By: #konsole, hindenburg
+
+Subscribers: wbauer, konsole-devel, #konsole
+
+Tags: #konsole
+
+Differential Revision: https://phabricator.kde.org/D16947
+
+(cherry picked from commit 14b3c8be2c15ed9711b1308b4a991de4aad5802d)
+---
+ src/TerminalDisplay.cpp | 45 ++++++++++++++++++++-------------------------
+ 1 file changed, 20 insertions(+), 25 deletions(-)
+
+diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp
+index 722e200..2b14556 100644
+--- a/src/TerminalDisplay.cpp
++++ b/src/TerminalDisplay.cpp
+@@ -619,7 +619,7 @@ static void drawLineChar(QPainter& paint, int x, int y, 
int w, int h, uchar code
+ {
+     //Calculate cell midpoints, end points.
+     const int cx = x + w / 2;
+-    const int cy = y + h / 2;
++    const int cy = y + h / 2. - 0.5;
+     const int ex = x + w - 1;
+     const int ey = y + h - 1;
+ 
+@@ -671,33 +671,33 @@ static void drawLineChar(QPainter& paint, int x, int y, 
int w, int h, uchar code
+ 
+     //Intersection points.
+     if ((toDraw & Int11) != 0u) {
+-        paint.drawPoint(cx - 1, cy - 1);
++        paint.drawPoint(cx - 2, cy - 2);
+     }
+     if ((toDraw & Int12) != 0u) {
+-        paint.drawPoint(cx, cy - 1);
++        paint.drawPoint(cx - 1, cy - 2);
+     }
+     if ((toDraw & Int13) != 0u) {
+-        paint.drawPoint(cx + 1, cy - 1);
++        paint.drawPoint(cx - 0, cy - 2);
+     }
+ 
+     if ((toDraw & Int21) != 0u) {
+-        paint.drawPoint(cx - 1, cy);
++        paint.drawPoint(cx - 2, cy - 1);
+     }
+     if ((toDraw & Int22) != 0u) {
+-        paint.drawPoint(cx, cy);
++        paint.drawPoint(cx - 1, cy - 1);
+     }
+     if ((toDraw & Int23) != 0u) {
+-        paint.drawPoint(cx + 1, cy);
++        paint.drawPoint(cx - 0, cy - 1);
+     }
+ 
+     if ((toDraw & Int31) != 0u) {
+-        paint.drawPoint(cx - 1, cy + 1);
++        paint.drawPoint(cx - 2, cy);
+     }
+     if ((toDraw & Int32) != 0u) {
+-        paint.drawPoint(cx, cy + 1);
++        paint.drawPoint(cx - 1, cy);
+     }
+     if ((toDraw & Int33) != 0u) {
+-        paint.drawPoint(cx + 1, cy + 1);
++        paint.drawPoint(cx - 0, cy);
+     }
+ }
+ 
+@@ -705,7 +705,7 @@ static void drawOtherChar(QPainter& paint, int x, int y, 
int w, int h, uchar cod
+ {
+     //Calculate cell midpoints, end points.
+     const int cx = x + w / 2;
+-    const int cy = y + h / 2;
++    const int cy = y + h / 2. - 0.5; // Compensate for the translation, to 
match fonts
+     const int ex = x + w - 1;
+     const int ey = y + h - 1;
+ 
+@@ -792,16 +792,17 @@ void TerminalDisplay::drawLineCharString(QPainter& 
painter, int x, int y, const
+         const Character* attributes)
+ {
+     painter.save();
+-    painter.setRenderHint(QPainter::Antialiasing);
+ 
+-    const QPen& originalPen = painter.pen();
++    // For antialiasing, we need to shift it so the single pixel width is in 
the middle
++    painter.translate(0.5, 0.5);
+ 
+     if (((attributes->rendition & RE_BOLD) != 0) && _boldIntense) {
+-        QPen boldPen(originalPen);
+-        boldPen.setWidth(3);
++        QPen boldPen(painter.pen());
++        boldPen.setWidth(4);
+         painter.setPen(boldPen);
+     }
+ 
++
+     for (int i = 0 ; i < str.length(); i++) {
+         const uchar code = str[i].cell();
+         if (LineChars[code] != 0u) {
+@@ -909,10 +910,10 @@ void TerminalDisplay::drawBackground(QPainter& painter, 
const QRect& rect, const
+         QColor color(backgroundColor);
+         color.setAlpha(qAlpha(_blendColor));
+ 
+-        painter.save();
++        const QPainter::CompositionMode originalMode = 
painter.compositionMode();
+         painter.setCompositionMode(QPainter::CompositionMode_Source);
+         painter.fillRect(rect, color);
+-        painter.restore();
++        painter.setCompositionMode(originalMode);
+ #endif
+     } else {
+         painter.fillRect(rect, backgroundColor);
+@@ -1041,8 +1042,6 @@ void TerminalDisplay::drawTextFragment(QPainter& painter 
,
+                                        const QString& text,
+                                        const Character* style)
+ {
+-    painter.save();
+-
+     // setup painter
+     const QColor foregroundColor = style->foregroundColor.color(_colorTable);
+     const QColor backgroundColor = style->backgroundColor.color(_colorTable);
+@@ -1062,8 +1061,6 @@ void TerminalDisplay::drawTextFragment(QPainter& painter 
,
+ 
+     // draw text
+     drawCharacters(painter, rect, text, style, invertCharacterColor);
+-
+-    painter.restore();
+ }
+ 
+ void TerminalDisplay::drawPrinterFriendlyTextFragment(QPainter& painter,
+@@ -1071,8 +1068,6 @@ void 
TerminalDisplay::drawPrinterFriendlyTextFragment(QPainter& painter,
+         const QString& text,
+         const Character* style)
+ {
+-    painter.save();
+-
+     // Set the colors used to draw to black foreground and white
+     // background for printer friendly output when printing
+     Character print_style = *style;
+@@ -1081,8 +1076,6 @@ void 
TerminalDisplay::drawPrinterFriendlyTextFragment(QPainter& painter,
+ 
+     // draw text
+     drawCharacters(painter, rect, text, &print_style, false);
+-
+-    painter.restore();
+ }
+ 
+ void TerminalDisplay::setRandomSeed(uint randomSeed)
+@@ -1499,6 +1492,8 @@ void TerminalDisplay::paintEvent(QPaintEvent* pe)
+         drawBackground(paint, rect, getBackgroundColor(), true /* use opacity 
setting */);
+     }
+ 
++    paint.setRenderHint(QPainter::Antialiasing, _antialiasText);
++
+     foreach(const QRect & rect, dirtyImageRegion.rects()) {
+         drawContents(paint, rect);
+     }
+-- 
+cgit v1.1

diff --git a/kde-apps/konsole/konsole-18.12.0-r1.ebuild 
b/kde-apps/konsole/konsole-18.12.0-r1.ebuild
new file mode 100644
index 00000000000..63fec0b9fa7
--- /dev/null
+++ b/kde-apps/konsole/konsole-18.12.0-r1.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+KDE_HANDBOOK="optional"
+KDE_TEST="true"
+VIRTUALX_REQUIRED="test"
+inherit kde5
+
+DESCRIPTION="KDE's terminal emulator"
+HOMEPAGE="https://www.kde.org/applications/system/konsole 
https://konsole.kde.org";
+
+KEYWORDS="~amd64 ~x86"
+IUSE="X"
+
+DEPEND="
+       $(add_frameworks_dep kbookmarks)
+       $(add_frameworks_dep kcompletion)
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kconfigwidgets)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kcrash)
+       $(add_frameworks_dep kdbusaddons)
+       $(add_frameworks_dep kguiaddons)
+       $(add_frameworks_dep kjobwidgets)
+       $(add_frameworks_dep ki18n)
+       $(add_frameworks_dep kinit)
+       $(add_frameworks_dep kiconthemes)
+       $(add_frameworks_dep kio)
+       $(add_frameworks_dep knewstuff)
+       $(add_frameworks_dep knotifications)
+       $(add_frameworks_dep knotifyconfig)
+       $(add_frameworks_dep kparts)
+       $(add_frameworks_dep kpty)
+       $(add_frameworks_dep kservice)
+       $(add_frameworks_dep ktextwidgets)
+       $(add_frameworks_dep kwidgetsaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_frameworks_dep kxmlgui)
+       $(add_qt_dep qtdbus)
+       $(add_qt_dep qtgui)
+       $(add_qt_dep qtnetwork)
+       $(add_qt_dep qtprintsupport)
+       $(add_qt_dep qtwidgets)
+       $(add_qt_dep qtxml)
+       X? ( x11-libs/libX11 )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${P}-fix-drawing-box-chars.patch" ) # fixed in 18.12.1
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake-utils_use_find_package X X11)
+       )
+
+       kde5_src_configure
+}

Reply via email to