From 22063284065270f5a2f5be0fe77050c3cc079994 Mon Sep 17 00:00:00 2001 From: Nick Beeuwsaert Date: Thu, 8 Feb 2018 08:39:29 -0600 Subject: [PATCH] Add custom QStyle class to tab bar to fix render issue on macOS. (#3095) * Add custom QStyle class to tab bar to fix render issue on macOS. fixes #3070 * clangify --- cockatrice/src/tab_supervisor.cpp | 19 +++++++++++++++++++ cockatrice/src/tab_supervisor.h | 9 +++++++++ 2 files changed, 28 insertions(+) diff --git a/cockatrice/src/tab_supervisor.cpp b/cockatrice/src/tab_supervisor.cpp index e44c7b18..bd3f77bd 100644 --- a/cockatrice/src/tab_supervisor.cpp +++ b/cockatrice/src/tab_supervisor.cpp @@ -28,6 +28,18 @@ #include "pb/serverinfo_room.pb.h" #include "pb/serverinfo_user.pb.h" +QRect MacOSTabFixStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const +{ + if (element != SE_TabBarTabText) { + return QProxyStyle::subElementRect(element, option, widget); + } + + // Skip over QProxyStyle handling subElementRect, + // This fixes an issue with Qt 5.10 on OSX where the labels for tabs with a button and an icon + // get cut-off too early + return QCommonStyle::subElementRect(element, option, widget); +} + CloseButton::CloseButton(QWidget *parent) : QAbstractButton(parent) { setFocusPolicy(Qt::NoFocus); @@ -86,6 +98,13 @@ TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent) setElideMode(Qt::ElideRight); setMovable(true); setIconSize(QSize(15, 15)); + +#if defined(Q_OS_MAC) + // This is necessary to fix an issue on macOS with qt5.10, + // where tabs with icons and buttons get drawn incorrectly + tabBar()->setStyle(new MacOSTabFixStyle); +#endif + connect(this, SIGNAL(currentChanged(int)), this, SLOT(updateCurrent(int))); connect(client, SIGNAL(roomEventReceived(const RoomEvent &)), this, SLOT(processRoomEvent(const RoomEvent &))); diff --git a/cockatrice/src/tab_supervisor.h b/cockatrice/src/tab_supervisor.h index 6b4c59f6..10b1e69f 100644 --- a/cockatrice/src/tab_supervisor.h +++ b/cockatrice/src/tab_supervisor.h @@ -4,7 +4,9 @@ #include "chatview/userlistProxy.h" #include "deck_loader.h" #include +#include #include +#include #include class QMenu; @@ -30,6 +32,13 @@ class ServerInfo_User; class GameReplay; class DeckList; +class MacOSTabFixStyle : public QProxyStyle +{ + Q_OBJECT +public: + QRect subElementRect(SubElement, const QStyleOption *, const QWidget *) const; +}; + class CloseButton : public QAbstractButton { Q_OBJECT