From ea8ff05952d5f38b19c8dced09f4e16d3e576d0d Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 24 Feb 2017 18:41:22 +0100 Subject: [PATCH] WelcomePage: Workaround broken QFrame in HighDPI cases This change introduces Core::WelcomeFrame which draws proper rectangles. The need for this workaround is unfortunate, but the very visible regression with the new welcome mode would be worse. Task-number: QTBUG-59116 Change-Id: I158b8309cf396a247136d7017406ca1f7bce2407 Reviewed-by: Alessandro Portale --- src/plugins/coreplugin/iwelcomepage.cpp | 24 ++++++++++++++++--- src/plugins/coreplugin/iwelcomepage.h | 12 ++++++++-- .../qtsupport/gettingstartedwelcomepage.cpp | 7 ++---- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/plugins/coreplugin/iwelcomepage.cpp b/src/plugins/coreplugin/iwelcomepage.cpp index b07a399b6ea..8296d6c8f5d 100644 --- a/src/plugins/coreplugin/iwelcomepage.cpp +++ b/src/plugins/coreplugin/iwelcomepage.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -90,6 +91,25 @@ static QPalette buttonPalette(bool isActive, bool isCursorInside, bool forText) return pal; } +WelcomePageFrame::WelcomePageFrame(QWidget *parent) + : QWidget(parent) +{ + setContentsMargins(1, 1, 1, 1); +} + +void WelcomePageFrame::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + + const QRectF adjustedRect(QRectF(rect()).adjusted(0.5, 0.5, -0.5, -0.5)); + QPen pen(palette().color(QPalette::WindowText)); + pen.setJoinStyle(Qt::MiterJoin); + + QPainter p(this); + p.setPen(pen); + p.drawRect(adjustedRect); +} + class WelcomePageButtonPrivate { public: @@ -107,11 +127,9 @@ public: }; WelcomePageButton::WelcomePageButton(QWidget *parent) - : QFrame(parent), d(new WelcomePageButtonPrivate(this)) + : WelcomePageFrame(parent), d(new WelcomePageButtonPrivate(this)) { setAutoFillBackground(true); - setFrameShape(QFrame::Box); - setFrameShadow(QFrame::Plain); setPalette(buttonPalette(false, false, false)); QFont f = font(); diff --git a/src/plugins/coreplugin/iwelcomepage.h b/src/plugins/coreplugin/iwelcomepage.h index 36bbabd270a..ae59d13e501 100644 --- a/src/plugins/coreplugin/iwelcomepage.h +++ b/src/plugins/coreplugin/iwelcomepage.h @@ -29,7 +29,7 @@ #include "id.h" -#include +#include #include #include @@ -61,7 +61,15 @@ public: class WelcomePageButtonPrivate; -class CORE_EXPORT WelcomePageButton : public QFrame +class CORE_EXPORT WelcomePageFrame : public QWidget +{ +public: + WelcomePageFrame(QWidget *parent); + + void paintEvent(QPaintEvent *event) override; +}; + +class CORE_EXPORT WelcomePageButton : public WelcomePageFrame { public: WelcomePageButton(QWidget *parent); diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp index 420ea915555..4561ce5a0f5 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp @@ -244,15 +244,12 @@ static QString resourcePath() return FileUtils::normalizePathName(ICore::resourcePath()); } -class SearchBox : public QFrame +class SearchBox : public WelcomePageFrame { public: SearchBox(QWidget *parent) - : QFrame(parent) + : WelcomePageFrame(parent) { - setFrameShape(QFrame::Box); - setFrameShadow(QFrame::Plain); - QPalette pal; pal.setColor(QPalette::Base, themeColor(Theme::Welcome_BackgroundColor));