From 68e0bc40e107decc3f19047079fdda63d155fb15 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 1 Jul 2020 17:23:57 +0200 Subject: [PATCH] Dont use fixed font size in fancy tabbar --- src/widgets/fancytabwidget.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/widgets/fancytabwidget.cpp b/src/widgets/fancytabwidget.cpp index 31a37fded..7487ee3e6 100644 --- a/src/widgets/fancytabwidget.cpp +++ b/src/widgets/fancytabwidget.cpp @@ -91,7 +91,12 @@ class FancyTabBar: public QTabBar { } int width() { - return tabSizeHint(0).width(); + FancyTabWidget *tabWidget = qobject_cast(parentWidget()); + int width = std::max(FancyTabWidget::TabSize_LargeSidebarWidth, tabWidget->iconsize_largesidebar() + 22); + for (int i = 0 ; i < count() ; ++i) { + if (tabSizeHint(i).width() > width) width = tabSizeHint(i).width(); + } + return width; } protected: @@ -101,8 +106,11 @@ class FancyTabBar: public QTabBar { QSize size; if (tabWidget->mode() == FancyTabWidget::Mode_LargeSidebar) { - QFontMetrics fm(font()); - size = QSize(std::max(FancyTabWidget::TabSize_LargeSidebarWidth, tabWidget->iconsize_largesidebar() + 22), tabWidget->iconsize_largesidebar() + fm.boundingRect(QRect(0, 0, std::max(FancyTabWidget::TabSize_LargeSidebarWidth, tabWidget->iconsize_largesidebar() + 22), height()), Qt::TextWordWrap, QTabBar::tabText(index)).height() + 10); + QFont bold_font(font()); + bold_font.setBold(true); + QFontMetrics fm(bold_font); + QRect rect = fm.boundingRect(QRect(0, 0, std::max(FancyTabWidget::TabSize_LargeSidebarWidth, tabWidget->iconsize_largesidebar() + 22), height()), Qt::TextWordWrap, QTabBar::tabText(index)); + size = QSize(std::max(std::max(FancyTabWidget::TabSize_LargeSidebarWidth, tabWidget->iconsize_largesidebar() + 22), rect.width() + 40), tabWidget->iconsize_largesidebar() + rect.height() + 10); } else { size = QTabBar::tabSizeHint(index); @@ -254,13 +262,13 @@ class FancyTabBar: public QTabBar { tabrectLabel = QRect(QPoint(0, 0), m.mapRect(tabrect).size()); tabrectText = tabrectLabel; - tabrectText.translate(0, -5); + tabrectText.translate(-7, -5); + } p.setTransform(m); QFont boldFont(p.font()); - boldFont.setPointSizeF(StyleHelper::sidebarFontSize()); boldFont.setBold(true); p.setFont(boldFont); @@ -287,7 +295,7 @@ class FancyTabBar: public QTabBar { tabrectIcon = tabrectLabel; tabrectIcon.setSize(QSize(tabWidget->iconsize_largesidebar(), tabWidget->iconsize_largesidebar())); // Center the icon - const int moveRight = (std::max(FancyTabWidget::TabSize_LargeSidebarWidth, tabWidget->iconsize_largesidebar() + 22) - tabWidget->iconsize_largesidebar() -1) / 2; + const int moveRight = (QTabBar::width() - tabWidget->iconsize_largesidebar() -1) / 2; tabrectIcon.translate(moveRight, PADDING); } tabIcon(index).paint(&p, tabrectIcon, iconFlags);