QRect QCommonStyle_QtDShell::__override_itemTextRect(const QFontMetrics& fm0, const QRect& r1, int flags2, bool enabled3, const QString& text4, bool static_call) const { if (static_call) { return QStyle::itemTextRect((const QFontMetrics& )fm0, (const QRect& )r1, (int )flags2, (bool )enabled3, (const QString& )text4); } else { return itemTextRect((const QFontMetrics& )fm0, (const QRect& )r1, (int )flags2, (bool )enabled3, (const QString& )text4); } }
void AppItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.data(AppsListModel::AppItemIsDragingRole).value<bool>() && !(option.features & QStyleOptionViewItem::HasDisplay)) return; painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform); painter->setPen(Qt::white); painter->setBrush(QBrush(Qt::transparent)); const int leftMargin = 2, radius = 3; const int fontPixelSize = index.data(AppsListModel::AppFontSizeRole).value<int>(); const bool drawBlueDot = index.data(AppsListModel::AppNewInstallRole).toBool(); const ItemInfo itemInfo = index.data(AppsListModel::AppRawItemInfoRole).value<ItemInfo>(); const QRect boundingRect = itemBoundingRect(option.rect); const QSize iconSize = index.data(AppsListModel::AppIconSizeRole).toSize(); // draw focus background if (CurrentIndex == index && !(option.features & QStyleOptionViewItem::HasDisplay)) { const QColor borderColor(255, 255, 255, 52); const QColor brushColor(0, 0, 0, 105); QPen pen; pen.setColor(borderColor); pen.setWidth(2); QPainterPath border; border.addRoundedRect(boundingRect.marginsRemoved(QMargins(leftMargin/2, leftMargin/2, leftMargin*2/3, leftMargin*2/3)), radius, radius); painter->strokePath(border, pen); painter->setPen(Qt::transparent); painter->setBrush(brushColor); painter->drawRoundedRect(boundingRect.marginsRemoved(QMargins(leftMargin, leftMargin, leftMargin*4/3, leftMargin*4/3)), radius, radius); } // draw app icon const int iconLeftMargins = (boundingRect.width() - iconSize.width()) / 2; const int iconTopMargin = qMin(10, int(boundingRect.height() * 0.1)); const QRect iconRect = QRect(boundingRect.topLeft() + QPoint(iconLeftMargins, iconTopMargin), iconSize); painter->drawPixmap(iconRect, index.data(AppsListModel::AppIconRole).value<QPixmap>()); // draw icon if app is auto startup const QPoint autoStartIconPos = iconRect.bottomLeft() - QPoint(0, m_autoStartPixmap.height()); if (index.data(AppsListModel::AppAutoStartRole).toBool()) painter->drawPixmap(autoStartIconPos, m_autoStartPixmap); // draw app name QTextOption appNameOption; appNameOption.setAlignment(Qt::AlignHCenter | Qt::AlignTop); appNameOption.setWrapMode(QTextOption::WordWrap); QFont appNamefont(painter->font()); appNamefont.setPixelSize(fontPixelSize); const QFontMetrics fm(appNamefont); const QRectF appNameRect = itemTextRect(boundingRect, iconRect, drawBlueDot); // const QRectF appNameBoundingRect = fm.boundingRect(appNameRect.toRect(), appNameOption.alignment() | wrapFlag, itemInfo.m_name); const QString appText = holdTextInRect(fm, itemInfo.m_name, appNameRect.toRect()); // const QString appText = appNameBoundingRect.width() > appNameRect.width() || appNameBoundingRect.height() > appNameRect.height() // ? fm.elidedText(itemInfo.m_name, Qt::ElideRight, appNameRect.width(), appNameOption.alignment() | wrapFlag) // : itemInfo.m_name; painter->setFont(appNamefont); painter->setBrush(QBrush(Qt::transparent)); painter->setPen(QColor(0, 0, 0, 80)); painter->drawText(appNameRect.adjusted(0.8, 1, 0.8, 1), appText, appNameOption); painter->drawText(appNameRect.adjusted(-0.8, 1, -0.8, 1), appText, appNameOption); painter->setPen(Qt::white); painter->drawText(appNameRect, appText, appNameOption); // draw blue dot if needed if (drawBlueDot) { const int marginRight = 2; const QRectF textRect = fm.boundingRect(appNameRect.toRect(), Qt::AlignTop | Qt::AlignHCenter | Qt::TextWordWrap, appText); const QPointF blueDotPos = textRect.topLeft() + QPoint(-m_blueDotPixmap.width() - marginRight, (fm.height() - m_blueDotPixmap.height()) / 2); painter->drawPixmap(blueDotPos, m_blueDotPixmap); } }