commit:     3490a8cb8b1f58dadaf25feedd2cf108ec1a9dd0
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 30 21:42:13 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Jun 30 21:44:04 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3490a8cb

kde-misc/kdiff3: Fix HiDPI support

Closes: https://bugs.gentoo.org/723436
Package-Manager: Portage-2.3.103, Repoman-2.3.23
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 kde-misc/kdiff3/files/kdiff3-1.8.3-hidpi.patch | 112 +++++++++++++++++++++++++
 kde-misc/kdiff3/kdiff3-1.8.3-r1.ebuild         |  41 +++++++++
 2 files changed, 153 insertions(+)

diff --git a/kde-misc/kdiff3/files/kdiff3-1.8.3-hidpi.patch 
b/kde-misc/kdiff3/files/kdiff3-1.8.3-hidpi.patch
new file mode 100644
index 00000000000..180009afe0e
--- /dev/null
+++ b/kde-misc/kdiff3/files/kdiff3-1.8.3-hidpi.patch
@@ -0,0 +1,112 @@
+From 5dcc0673c61cc75122bf5f812a45bbb15b778218 Mon Sep 17 00:00:00 2001
+From: Alexander Volkov <avol...@astralinux.ru>
+Date: Mon, 27 Apr 2020 15:52:18 +0300
+Subject: [PATCH] Add HiDPI support
+
+* Backported to 1.8 branch
+---
+ src/Overview.cpp             |  6 ++++--
+ src/directorymergewindow.cpp | 15 +++++++++------
+ src/main.cpp                 |  1 +
+ src/mergeresultwindow.cpp    |  7 +++++--
+ 4 files changed, 19 insertions(+), 10 deletions(-)
+
+diff --git a/src/Overview.cpp b/src/Overview.cpp
+index ee1d73f..ac35e7e 100644
+--- a/src/Overview.cpp
++++ b/src/Overview.cpp
+@@ -271,7 +271,8 @@ void Overview::paintEvent(QPaintEvent*)
+     int h = height() - 1;
+     int w = width();
+ 
+-    if(m_pixmap.size() != size())
++    const auto dpr = devicePixelRatioF();
++    if(m_pixmap.size() != size() * dpr)
+     {
+         if(m_pOptions->m_bWordWrap)
+         {
+@@ -287,7 +288,8 @@ void Overview::paintEvent(QPaintEvent*)
+             m_nofLines = m_pDiff3LineList->size();
+         }
+ 
+-        m_pixmap = QPixmap(size());
++        m_pixmap = QPixmap(size() * dpr);
++        m_pixmap.setDevicePixelRatio(dpr);
+ 
+         QPainter p(&m_pixmap);
+         p.fillRect(rect(), m_pOptions->m_bgColor);
+diff --git a/src/directorymergewindow.cpp b/src/directorymergewindow.cpp
+index 31dbcaf..1cc62b4 100644
+--- a/src/directorymergewindow.cpp
++++ b/src/directorymergewindow.cpp
+@@ -584,7 +584,10 @@ class DirectoryMergeWindow::DirMergeItemDelegate : public 
QStyledItemDelegate
+             //QPixmap icon = value.value<QPixmap>(); //pixmap(column);
+             if(!icon.isNull())
+             {
+-                int yOffset = (sizeHint(option, index).height() - 
icon.height()) / 2;
++                const auto dpr = thePainter->device()->devicePixelRatioF();
++                const int w = qRound(icon.width() / dpr);
++                const int h = qRound(icon.height() / dpr);
++                int yOffset = (sizeHint(option, index).height() - h) / 2;
+                 thePainter->drawPixmap(x + 2, y + yOffset, icon);
+ 
+                 int i = index == d->m_selection1Index ? 1 : index == 
d->m_selection2Index ? 2 : index == d->m_selection3Index ? 3 : 0;
+@@ -593,20 +596,20 @@ class DirectoryMergeWindow::DirMergeItemDelegate : 
public QStyledItemDelegate
+                     Options* pOpts = d->m_pOptions;
+                     QColor c(i == 1 ? pOpts->m_colorA : i == 2 ? 
pOpts->m_colorB : pOpts->m_colorC);
+                     thePainter->setPen(c); // highlight() );
+-                    thePainter->drawRect(x + 2, y + yOffset, icon.width(), 
icon.height());
++                    thePainter->drawRect(x + 2, y + yOffset, w, h);
+                     thePainter->setPen(QPen(c, 0, Qt::DotLine));
+-                    thePainter->drawRect(x + 1, y + yOffset - 1, icon.width() 
+ 2, icon.height() + 2);
++                    thePainter->drawRect(x + 1, y + yOffset - 1, w + 2, h + 
2);
+                     thePainter->setPen(Qt::white);
+                     QString s(QChar('A' + i - 1));
+ 
+-                    thePainter->drawText(x + 2 + (icon.width() - 
Utils::getHorizontalAdvance(thePainter->fontMetrics(), s)) / 2,
+-                                y + yOffset + (icon.height() + 
thePainter->fontMetrics().ascent()) / 2 - 1,
++                    thePainter->drawText(x + 2 + (w - 
Utils::getHorizontalAdvance(thePainter->fontMetrics(), s)) / 2,
++                                y + yOffset + (h + 
thePainter->fontMetrics().ascent()) / 2 - 1,
+                                 s);
+                 }
+                 else
+                 {
+                     thePainter->setPen(m_pDMW->palette().window().color());
+-                    thePainter->drawRect(x + 1, y + yOffset - 1, icon.width() 
+ 2, icon.height() + 2);
++                    thePainter->drawRect(x + 1, y + yOffset - 1, w + 2, h + 
2);
+                 }
+                 return;
+             }
+diff --git a/src/main.cpp b/src/main.cpp
+index df06eab..c62aee3 100644
+--- a/src/main.cpp
++++ b/src/main.cpp
+@@ -81,6 +81,7 @@ int main(int argc, char* argv[])
+ {
+     const QLatin1String appName("kdiff3");
+ 
++    QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
+     QApplication app(argc, argv); // KAboutData and QCommandLineParser depend 
on this being setup.
+     KLocalizedString::setApplicationDomain(appName.data());
+ 
+diff --git a/src/mergeresultwindow.cpp b/src/mergeresultwindow.cpp
+index 894bc44..29d16ae 100644
+--- a/src/mergeresultwindow.cpp
++++ b/src/mergeresultwindow.cpp
+@@ -1970,8 +1970,11 @@ void MergeResultWindow::paintEvent(QPaintEvent*)
+     if(!m_bCursorUpdate) // Don't redraw everything for blinking cursor?
+     {
+         m_selection.bSelectionContainsData = false;
+-        if(size() != m_pixmap.size())
+-            m_pixmap = QPixmap(size());
++        const auto dpr = devicePixelRatioF();
++        if(size() * dpr != m_pixmap.size()) {
++            m_pixmap = QPixmap(size() * dpr);
++            m_pixmap.setDevicePixelRatio(dpr);
++        }
+ 
+         RLPainter p(&m_pixmap, m_pOptions->m_bRightToLeftLanguage, width(), 
fontWidth);
+         p.setFont(font());
+-- 
+2.27.0
+

diff --git a/kde-misc/kdiff3/kdiff3-1.8.3-r1.ebuild 
b/kde-misc/kdiff3/kdiff3-1.8.3-r1.ebuild
new file mode 100644
index 00000000000..9611b4dd913
--- /dev/null
+++ b/kde-misc/kdiff3/kdiff3-1.8.3-r1.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+ECM_HANDBOOK="forceoptional"
+KFMIN=5.60.0
+QTMIN=5.12.3
+inherit ecm kde.org
+
+DESCRIPTION="Frontend to diff3 based on KDE Frameworks"
+HOMEPAGE="https://kde.org/applications/development/org.kde.kdiff3
+https://userbase.kde.org/KDiff3";
+SRC_URI="mirror://kde/stable/${PN}/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="5"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE=""
+
+DEPEND="
+       >=dev-qt/qtgui-${QTMIN}:5
+       >=dev-qt/qtprintsupport-${QTMIN}:5
+       >=dev-qt/qtwidgets-${QTMIN}:5
+       >=kde-frameworks/kconfig-${KFMIN}:5
+       >=kde-frameworks/kconfigwidgets-${KFMIN}:5
+       >=kde-frameworks/kcoreaddons-${KFMIN}:5
+       >=kde-frameworks/kcrash-${KFMIN}:5
+       >=kde-frameworks/ki18n-${KFMIN}:5
+       >=kde-frameworks/kiconthemes-${KFMIN}:5
+       >=kde-frameworks/kio-${KFMIN}:5
+       >=kde-frameworks/kparts-${KFMIN}:5
+       >=kde-frameworks/ktextwidgets-${KFMIN}:5
+       >=kde-frameworks/kwidgetsaddons-${KFMIN}:5
+       >=kde-frameworks/kxmlgui-${KFMIN}:5
+"
+RDEPEND="${DEPEND}
+       sys-apps/diffutils
+"
+
+PATCHES=( "${FILESDIR}/${P}-hidpi.patch" )

Reply via email to