src/gui/styles/qcommonstyle.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
   768 
   768 
   769             if ((vopt->state & QStyle::State_Selected) &&  proxy()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, opt, widget))
   769             if ((vopt->state & QStyle::State_Selected) &&  proxy()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, opt, widget))
   770                 p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight));
   770                 p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight));
   771             else if (vopt->features & QStyleOptionViewItemV2::Alternate)
   771             else if (vopt->features & QStyleOptionViewItemV2::Alternate)
   772                 p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase));
   772                 p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase));
   773             else if (!(vopt->state & QStyle::State_Enabled))
       
   774                 p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Base));
       
   775         }
   773         }
   776         break;
   774         break;
   777     case PE_PanelItemViewItem:
   775     case PE_PanelItemViewItem:
   778         if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(opt)) {
   776         if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(opt)) {
   779             QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled
   777             QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled
  2775             }
  2773             }
  2776 
  2774 
  2777             QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize;
  2775             QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize;
  2778             int w = size.width();
  2776             int w = size.width();
  2779             int h = size.height();
  2777             int h = size.height();
  2780             int midHeight = static_cast<int>(ceil(float(tr.height() - h) / 2));
  2778             int midHeight = static_cast<int>(qCeil(float(tr.height() - h) / 2));
  2781             int midWidth = ((tr.width() - w) / 2);
  2779             int midWidth = ((tr.width() - w) / 2);
  2782 
  2780 
  2783             bool atTheTop = true;
  2781             bool atTheTop = true;
  2784             switch (tab->shape) {
  2782             switch (tab->shape) {
  2785             case QTabBar::RoundedWest:
  2783             case QTabBar::RoundedWest:
  4394         ret = int(QStyleHelper::dpiScaled(16.));
  4392         ret = int(QStyleHelper::dpiScaled(16.));
  4395         break;
  4393         break;
  4396     case PM_TitleBarHeight: {
  4394     case PM_TitleBarHeight: {
  4397         if (const QStyleOptionTitleBar *tb = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
  4395         if (const QStyleOptionTitleBar *tb = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
  4398             if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) {
  4396             if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) {
  4399                 ret = qMax(widget ? widget->fontMetrics().lineSpacing() : opt->fontMetrics.lineSpacing(), 16);
  4397                 ret = qMax(widget ? widget->fontMetrics().height() : opt->fontMetrics.height(), 16);
  4400 #ifndef QT_NO_DOCKWIDGET
  4398 #ifndef QT_NO_DOCKWIDGET
  4401             } else if (qobject_cast<const QDockWidget*>(widget)) {
  4399             } else if (qobject_cast<const QDockWidget*>(widget)) {
  4402                 ret = qMax(widget->fontMetrics().lineSpacing(), int(QStyleHelper::dpiScaled(13)));
  4400                 ret = qMax(widget->fontMetrics().height(), int(QStyleHelper::dpiScaled(13)));
  4403 #endif
  4401 #endif
  4404             } else {
  4402             } else {
  4405                 ret = qMax(widget ? widget->fontMetrics().lineSpacing() : opt->fontMetrics.lineSpacing(), 18);
  4403                 ret = qMax(widget ? widget->fontMetrics().height() : opt->fontMetrics.height(), 18);
  4406             }
  4404             }
  4407         } else {
  4405         } else {
  4408             ret = int(QStyleHelper::dpiScaled(18.));
  4406             ret = int(QStyleHelper::dpiScaled(18.));
  4409         }
  4407         }
  4410 
  4408 
  4659         break;
  4657         break;
  4660 
  4658 
  4661     case PM_ToolBarIconSize:
  4659     case PM_ToolBarIconSize:
  4662         ret = qt_guiPlatformPlugin()->platformHint(QGuiPlatformPlugin::PH_ToolBarIconSize);
  4660         ret = qt_guiPlatformPlugin()->platformHint(QGuiPlatformPlugin::PH_ToolBarIconSize);
  4663         if (!ret)
  4661         if (!ret)
  4664             ret = proxy()->pixelMetric(PM_SmallIconSize, opt, widget);
  4662             ret = int(QStyleHelper::dpiScaled(24.));
  4665         break;
  4663         break;
  4666 
  4664 
  4667     case PM_TabBarIconSize:
  4665     case PM_TabBarIconSize:
  4668     case PM_ListViewIconSize:
  4666     case PM_ListViewIconSize:
  4669         ret = proxy()->pixelMetric(PM_SmallIconSize, opt, widget);
  4667         ret = proxy()->pixelMetric(PM_SmallIconSize, opt, widget);
  5167 
  5165 
  5168 /*! \reimp */
  5166 /*! \reimp */
  5169 QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *option,
  5167 QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *option,
  5170                                      const QWidget *widget) const
  5168                                      const QWidget *widget) const
  5171 {
  5169 {
       
  5170     const bool rtl = (option && option->direction == Qt::RightToLeft) || (!option && QApplication::isRightToLeft());
  5172 #ifdef QT_NO_IMAGEFORMAT_PNG
  5171 #ifdef QT_NO_IMAGEFORMAT_PNG
  5173     Q_UNUSED(option);
       
  5174     Q_UNUSED(widget);
  5172     Q_UNUSED(widget);
  5175     Q_UNUSED(sp);
  5173     Q_UNUSED(sp);
  5176 #else
  5174 #else
  5177     QPixmap pixmap;
  5175     QPixmap pixmap;
  5178     const bool rtl = (option && option->direction == Qt::RightToLeft) || (!option && QApplication::isRightToLeft());
       
  5179 
  5176 
  5180     if (QApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) {
  5177     if (QApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) {
  5181         switch (sp) {
  5178         switch (sp) {
  5182         case SP_DialogYesButton:
  5179         case SP_DialogYesButton:
  5183         case SP_DialogOkButton:
  5180         case SP_DialogOkButton:
  5655         }
  5652         }
  5656         break;
  5653         break;
  5657         default:
  5654         default:
  5658             break;
  5655             break;
  5659         }
  5656         }
  5660 
  5657     } // if (QApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty())
  5661         if (!icon.isNull())
  5658         if (!icon.isNull())
  5662             return icon;
  5659             return icon;
  5663 #if defined(Q_WS_MAC)
  5660 #if defined(Q_WS_MAC)
  5664     OSType iconType = 0;
  5661     if (QApplication::desktopSettingsAware()) {
  5665     switch (standardIcon) {
  5662         OSType iconType = 0;
  5666     case QStyle::SP_MessageBoxQuestion:
  5663         switch (standardIcon) {
  5667     case QStyle::SP_MessageBoxInformation:
  5664         case QStyle::SP_MessageBoxQuestion:
  5668     case QStyle::SP_MessageBoxWarning:
  5665         case QStyle::SP_MessageBoxInformation:
  5669     case QStyle::SP_MessageBoxCritical:
  5666         case QStyle::SP_MessageBoxWarning:
  5670         iconType = kGenericApplicationIcon;
  5667         case QStyle::SP_MessageBoxCritical:
  5671         break;
  5668             iconType = kGenericApplicationIcon;
  5672     case SP_DesktopIcon:
  5669             break;
  5673         iconType = kDesktopIcon;
  5670         case SP_DesktopIcon:
  5674         break;
  5671             iconType = kDesktopIcon;
  5675     case SP_TrashIcon:
  5672             break;
  5676         iconType = kTrashIcon;
  5673         case SP_TrashIcon:
  5677         break;
  5674             iconType = kTrashIcon;
  5678     case SP_ComputerIcon:
  5675             break;
  5679         iconType = kComputerIcon;
  5676         case SP_ComputerIcon:
  5680         break;
  5677             iconType = kComputerIcon;
  5681     case SP_DriveFDIcon:
  5678             break;
  5682         iconType = kGenericFloppyIcon;
  5679         case SP_DriveFDIcon:
  5683         break;
  5680             iconType = kGenericFloppyIcon;
  5684     case SP_DriveHDIcon:
  5681             break;
  5685         iconType = kGenericHardDiskIcon;
  5682         case SP_DriveHDIcon:
  5686         break;
  5683             iconType = kGenericHardDiskIcon;
  5687     case SP_DriveCDIcon:
  5684             break;
  5688     case SP_DriveDVDIcon:
  5685         case SP_DriveCDIcon:
  5689         iconType = kGenericCDROMIcon;
  5686         case SP_DriveDVDIcon:
  5690         break;
  5687             iconType = kGenericCDROMIcon;
  5691     case SP_DriveNetIcon:
  5688             break;
  5692         iconType = kGenericNetworkIcon;
  5689         case SP_DriveNetIcon:
  5693         break;
  5690             iconType = kGenericNetworkIcon;
  5694     case SP_DirOpenIcon:
  5691             break;
  5695         iconType = kOpenFolderIcon;
  5692         case SP_DirOpenIcon:
  5696         break;
  5693             iconType = kOpenFolderIcon;
  5697     case SP_DirClosedIcon:
  5694             break;
  5698     case SP_DirLinkIcon:
  5695         case SP_DirClosedIcon:
  5699         iconType = kGenericFolderIcon;
  5696         case SP_DirLinkIcon:
  5700         break;
  5697             iconType = kGenericFolderIcon;
  5701     case SP_FileLinkIcon:
  5698             break;
  5702     case SP_FileIcon:
  5699         case SP_FileLinkIcon:
  5703         iconType = kGenericDocumentIcon;
  5700         case SP_FileIcon:
  5704         break;
  5701             iconType = kGenericDocumentIcon;
  5705     case SP_DirIcon: {
  5702             break;
  5706         // A rather special case
  5703         case SP_DirIcon: {
  5707         QIcon closeIcon = QStyle::standardIcon(SP_DirClosedIcon, option, widget);
  5704             // A rather special case
  5708         QIcon openIcon = QStyle::standardIcon(SP_DirOpenIcon, option, widget);
  5705             QIcon closeIcon = QStyle::standardIcon(SP_DirClosedIcon, option, widget);
  5709         closeIcon.addPixmap(openIcon.pixmap(16, 16), QIcon::Normal, QIcon::On);
  5706             QIcon openIcon = QStyle::standardIcon(SP_DirOpenIcon, option, widget);
  5710         closeIcon.addPixmap(openIcon.pixmap(32, 32), QIcon::Normal, QIcon::On);
  5707             closeIcon.addPixmap(openIcon.pixmap(16, 16), QIcon::Normal, QIcon::On);
  5711         closeIcon.addPixmap(openIcon.pixmap(64, 64), QIcon::Normal, QIcon::On);
  5708             closeIcon.addPixmap(openIcon.pixmap(32, 32), QIcon::Normal, QIcon::On);
  5712         closeIcon.addPixmap(openIcon.pixmap(128, 128), QIcon::Normal, QIcon::On);
  5709             closeIcon.addPixmap(openIcon.pixmap(64, 64), QIcon::Normal, QIcon::On);
  5713         return closeIcon;
  5710             closeIcon.addPixmap(openIcon.pixmap(128, 128), QIcon::Normal, QIcon::On);
  5714     }
  5711             return closeIcon;
  5715     case SP_TitleBarNormalButton:
  5712         }
  5716     case SP_TitleBarCloseButton: {
  5713         case SP_TitleBarNormalButton:
  5717         QIcon titleBarIcon;
  5714         case SP_TitleBarCloseButton: {
  5718         if (standardIcon == SP_TitleBarCloseButton) {
  5715             QIcon titleBarIcon;
  5719             titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-16.png"));
  5716             if (standardIcon == SP_TitleBarCloseButton) {
  5720             titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On);
  5717                 titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-16.png"));
  5721         } else {
  5718                 titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On);
  5722             titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-16.png"));
  5719             } else {
  5723             titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On);
  5720                 titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-16.png"));
  5724         }
  5721                 titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On);
  5725         return titleBarIcon;
  5722             }
  5726     }
  5723             return titleBarIcon;
  5727     default:
  5724         }
  5728         break;
  5725         default:
  5729     }
  5726             break;
  5730     if (iconType != 0) {
  5727         }
  5731         QIcon retIcon;
  5728         if (iconType != 0) {
  5732         IconRef icon;
  5729             QIcon retIcon;
  5733         IconRef overlayIcon = 0;
  5730             IconRef icon;
  5734         if (iconType != kGenericApplicationIcon) {
  5731             IconRef overlayIcon = 0;
  5735             GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon);
  5732             if (iconType != kGenericApplicationIcon) {
  5736         } else {
  5733                 GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon);
  5737             FSRef fsRef;
  5734             } else {
  5738             ProcessSerialNumber psn = { 0, kCurrentProcess };
  5735                 FSRef fsRef;
  5739             GetProcessBundleLocation(&psn, &fsRef);
  5736                 ProcessSerialNumber psn = { 0, kCurrentProcess };
  5740             GetIconRefFromFileInfo(&fsRef, 0, 0, 0, 0, kIconServicesNormalUsageFlag, &icon, 0);
  5737                 GetProcessBundleLocation(&psn, &fsRef);
  5741             if (standardIcon == SP_MessageBoxCritical) {
  5738                 GetIconRefFromFileInfo(&fsRef, 0, 0, 0, 0, kIconServicesNormalUsageFlag, &icon, 0);
  5742                 overlayIcon = icon;
  5739                 if (standardIcon == SP_MessageBoxCritical) {
  5743                 GetIconRef(kOnSystemDisk, kSystemIconsCreator, kAlertCautionIcon, &icon);
  5740                     overlayIcon = icon;
  5744             }
  5741                     GetIconRef(kOnSystemDisk, kSystemIconsCreator, kAlertCautionIcon, &icon);
  5745         }
  5742                 }
  5746         if (icon) {
  5743             }
  5747             qt_mac_constructQIconFromIconRef(icon, overlayIcon, &retIcon, standardIcon);
  5744             if (icon) {
  5748             ReleaseIconRef(icon);
  5745                 qt_mac_constructQIconFromIconRef(icon, overlayIcon, &retIcon, standardIcon);
  5749         }
  5746                 ReleaseIconRef(icon);
  5750         if (overlayIcon)
  5747             }
  5751             ReleaseIconRef(overlayIcon);
  5748             if (overlayIcon)
  5752         return retIcon;
  5749                 ReleaseIconRef(overlayIcon);
  5753     }
  5750             return retIcon;
       
  5751         }
       
  5752     } // if (QApplication::desktopSettingsAware())
  5754 #endif // Q_WS_MAC
  5753 #endif // Q_WS_MAC
  5755     }
       
  5756 
  5754 
  5757     switch (standardIcon) {
  5755     switch (standardIcon) {
  5758 #ifndef QT_NO_IMAGEFORMAT_PNG
  5756 #ifndef QT_NO_IMAGEFORMAT_PNG
  5759      case SP_FileDialogNewFolder:
  5757      case SP_FileDialogNewFolder:
  5760         icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/newdirectory-16.png"));
  5758         icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/newdirectory-16.png"));