diff --git a/frame/item/quicksettingitem.cpp b/frame/item/quicksettingitem.cpp index 16a08f0ee..74f519845 100644 --- a/frame/item/quicksettingitem.cpp +++ b/frame/item/quicksettingitem.cpp @@ -38,9 +38,9 @@ #define BGSIZE 36 #define MARGINLEFTSPACE 10 #define OPENICONSIZE 12 -#define MARGINRIGHTSPACE 12 +#define MARGINRIGHTSPACE 9 -static QSize expandSize = QSize(6, 10); +static QSize expandSize = QSize(20, 20); QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent) : DockItem(parent) @@ -108,7 +108,18 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) // 绘制背景色 painter.fillRect(rect(), backgroundColor()); // 让图标填上前景色 - QPixmap pm = m_pluginInter->icon(DockPart::QuickPanel).pixmap(ICONWIDTH, ICONHEIGHT); + int pixmapWidth = static_cast(ICONWIDTH * qApp->devicePixelRatio()); + int pixmapHeight = static_cast(ICONHEIGHT * qApp->devicePixelRatio()); + QIcon icon = m_pluginInter->icon(DockPart::QuickPanel); + QList iconSizes = icon.availableSizes(); + if (iconSizes.size() > 0) { + QSize size = iconSizes[0]; + if (size.isValid() && !size.isEmpty() && !size.isNull()) { + pixmapWidth = size.width(); + pixmapHeight = size.height(); + } + } + QPixmap pm = icon.pixmap(pixmapWidth, pixmapHeight); QPainter pa(&pm); pa.setCompositionMode(QPainter::CompositionMode_SourceIn); pa.fillRect(pm.rect(), painter.pen().brush()); @@ -116,10 +127,17 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) // 如果是主图标,则显示阴影背景 int marginYSpace = yMarginSpace(); QRect iconBg(MARGINLEFTSPACE, marginYSpace, BGSIZE, BGSIZE); - QPixmap bgPixmap = ImageUtil::getShadowPixmap(pm, shadowColor(), QSize(BGSIZE, BGSIZE)); - painter.drawPixmap(iconBg, bgPixmap); + painter.save(); + painter.setPen(Qt::NoPen); + painter.setBrush(shadowColor()); + painter.drawEllipse(iconBg); + painter.restore(); + QRect rctIcon(iconBg.x() + (iconBg.width() - pixmapWidth) / 2, + iconBg.y() + (iconBg.height() - pixmapHeight) / 2, + pixmapWidth, pixmapHeight); + painter.drawPixmap(rctIcon, pm); // 绘制文字 - painter.setPen(QColor(0, 0, 0)); + painter.setPen(Qt::black); QRect rctPluginName(iconBg.right() + 10, iconBg.top(), BGWIDTH - BGSIZE - OPENICONSIZE - 10 * 2, BGSIZE / 2); QFont font = DFontSizeManager::instance()->t6(); @@ -128,7 +146,6 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) QTextOption textOption; textOption.setAlignment(Qt::AlignLeft | Qt::AlignVCenter); QString displayName = QFontMetrics(font).elidedText(m_pluginInter->pluginDisplayName(), Qt::TextElideMode::ElideRight, rctPluginName.width()); - QFontMetrics fm(font); painter.drawText(rctPluginName, displayName, textOption); // 绘制下方啊的状态文字 QRect rctPluginStatus(rctPluginName.x(), rctPluginName.bottom() + 1, @@ -138,16 +155,12 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) QString description = QFontMetrics(font).elidedText(m_pluginInter->description(), Qt::TextElideMode::ElideRight, rctPluginStatus.width()); painter.drawText(rctPluginStatus, description, textOption); // 绘制右侧的展开按钮 - QPen pen; - pen.setColor(QColor(0, 0, 0)); - pen.setWidth(2); - painter.setPen(pen); - int iconLeft = rect().width() - MARGINRIGHTSPACE - expandSize.width(); + QPixmap expandPixmap = ImageUtil::loadSvg(expandFileName(), expandSize); int iconRight = rect().width() - MARGINRIGHTSPACE; - painter.drawLine(QPoint(iconLeft, (iconBg.y() + (iconBg.height() - expandSize.height()) / 2)), - QPoint(iconRight, (iconBg.y() + iconBg.height() / 2))); - painter.drawLine(QPoint(iconRight, (iconBg.y() + iconBg.height() / 2)), - QPoint(iconLeft, (iconBg.y() + (iconBg.height() + expandSize.height()) / 2))); + QRect rectOfExpand(iconRight - expandSize.width(), + (rctIcon.y() + (rctIcon.height() - expandSize.height()) / 2), + expandSize.width(), expandSize.height()); + painter.drawPixmap(rectOfExpand, expandPixmap); } else { // 绘制图标 QRect rctIcon = iconRect(); @@ -224,3 +237,11 @@ int QuickSettingItem::yMarginSpace() { return (rect().height() - BGSIZE) / 2; } + +QString QuickSettingItem::expandFileName() +{ + if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) + return QString(":/icons/resources/arrow-right-dark.svg"); + + return QString(":/icons/resources/arrow-right.svg"); +} diff --git a/frame/item/quicksettingitem.h b/frame/item/quicksettingitem.h index 07321b9bf..99c3e3278 100644 --- a/frame/item/quicksettingitem.h +++ b/frame/item/quicksettingitem.h @@ -54,6 +54,7 @@ protected: private: int yMarginSpace(); + QString expandFileName(); private: PluginsItemInterface *m_pluginInter; diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index 4bf10fad9..1d2dac253 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #define ITEMSIZE 22 #define ITEMSPACE 6 @@ -488,7 +489,8 @@ void QuickDockItem::paintEvent(QPaintEvent *event) if (!m_pluginItem) return QWidget::paintEvent(event); - QPixmap pixmap = m_pluginItem->icon(DockPart::QuickPanel).pixmap(ICONHEIGHT, ICONHEIGHT); + int pixmapSize = static_cast(ICONHEIGHT * qApp->devicePixelRatio()); + QPixmap pixmap = m_pluginItem->icon(DockPart::QuickPanel).pixmap(pixmapSize, pixmapSize); QRect pixmapRect = QRect((rect().width() - ICONHEIGHT) / 2, (rect().height() - ICONHEIGHT) / 2, ICONHEIGHT, ICONHEIGHT); diff --git a/frame/window/systempluginwindow.cpp b/frame/window/systempluginwindow.cpp index fe50095e7..1a368fcc1 100644 --- a/frame/window/systempluginwindow.cpp +++ b/frame/window/systempluginwindow.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #define MAXICONSIZE 48 #define MINICONSIZE 24 @@ -192,18 +193,20 @@ void StretchPluginsItem::paintEvent(QPaintEvent *event) } // 绘制图标 - painter.drawPixmap(rctPixmap, icon.pixmap(ICONSIZE, ICONSIZE)); + int iconSize = static_cast(ICONSIZE * (qApp->devicePixelRatio())); + painter.drawPixmap(rctPixmap, icon.pixmap(iconSize, iconSize)); } QSize StretchPluginsItem::suitableSize() const { + int iconSize = static_cast(ICONSIZE * (qApp->devicePixelRatio())); if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { int textWidth = QFontMetrics(textFont()).boundingRect(m_pluginInter->pluginDisplayName()).width(); - return QSize(qMax(textWidth, ICONSIZE) + 10 * 2, -1); + return QSize(qMax(textWidth, iconSize) + 10 * 2, -1); } int height = 6; // 图标上边距6 - height += ICONSIZE; // 图标尺寸20 + height += iconSize; // 图标尺寸20 height += ICONTEXTSPACE; // 图标与文字间距6 height += QFontMetrics(textFont()).height(); // 文本高度 height += 4; // 下间距4 diff --git a/frame/window/tray/widgets/expandiconwidget.cpp b/frame/window/tray/widgets/expandiconwidget.cpp index 2d7670ed3..21da2b1bb 100644 --- a/frame/window/tray/widgets/expandiconwidget.cpp +++ b/frame/window/tray/widgets/expandiconwidget.cpp @@ -23,6 +23,7 @@ #include "tray_model.h" #include "tray_delegate.h" #include "dockpopupwindow.h" +#include "imageutil.h" #include #include @@ -88,13 +89,15 @@ QPixmap ExpandIconWidget::icon() return QPixmap(dropIconFile()); } -void ExpandIconWidget::paintEvent(QPaintEvent *e) +void ExpandIconWidget::paintEvent(QPaintEvent *) { - Q_UNUSED(e); - QPainter painter(this); - QPixmap pixmap(dropIconFile()); - painter.drawPixmap(0, 0, pixmap); + QPixmap pixmap = ImageUtil::loadSvg(dropIconFile(), QSize(ICON_SIZE, ICON_SIZE)); + QRect rectOfPixmap(rect().x() + (rect().width() - ICON_SIZE) / 2, + rect().y() + (rect().height() - ICON_SIZE) / 2, + ICON_SIZE, ICON_SIZE); + + painter.drawPixmap(rectOfPixmap, pixmap); } const QString ExpandIconWidget::dropIconFile() const diff --git a/frame/window/tray/widgets/expandiconwidget.h b/frame/window/tray/widgets/expandiconwidget.h index 4208ffa20..97e5dbe01 100644 --- a/frame/window/tray/widgets/expandiconwidget.h +++ b/frame/window/tray/widgets/expandiconwidget.h @@ -58,7 +58,7 @@ private Q_SLOTS: void onRowCountChanged(); protected: - void paintEvent(QPaintEvent *e) override; + void paintEvent(QPaintEvent *) override; const QString dropIconFile() const; void resetPosition(); diff --git a/plugins/shutdown/shutdownplugin.cpp b/plugins/shutdown/shutdownplugin.cpp index 4a29c9fb5..35d9bb1d5 100644 --- a/plugins/shutdown/shutdownplugin.cpp +++ b/plugins/shutdown/shutdownplugin.cpp @@ -296,8 +296,7 @@ QIcon ShutdownPlugin::icon(const DockPart &dockPart) { Q_UNUSED(dockPart); - static QIcon shutdownIcon; - shutdownIcon.detach(); + QIcon shutdownIcon; shutdownIcon.addPixmap(m_shutdownWidget->loadPixmap()); return shutdownIcon; }