diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index d349960d7..5ce16691b 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -839,7 +839,12 @@ void QuickDockItem::paintEvent(QPaintEvent *event) QSize size = pixmap.size(); QRect pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), pixmap.size()); + pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); + if (m_pluginItem->pluginSizePolicy() == PluginsItemInterface::PluginSizePolicy::System) { + size = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size / qApp->devicePixelRatio(): size; + pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), size); + } painter.drawPixmap(pixmapRect, pixmap); } diff --git a/plugins/onboard/onboarditem.cpp b/plugins/onboard/onboarditem.cpp index 442433192..b44eb0984 100644 --- a/plugins/onboard/onboarditem.cpp +++ b/plugins/onboard/onboarditem.cpp @@ -116,6 +116,7 @@ const QPixmap OnboardItem::loadSvg(const QString &fileName, const QSize &size) c QSize pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : (size * ratio); QPixmap pixmap = QIcon::fromTheme(fileName, m_icon).pixmap(pixmapSize); pixmap.setDevicePixelRatio(ratio); + pixmap = pixmap.scaled(size * ratio); return pixmap; } diff --git a/plugins/pluginmanager/iconmanager.cpp b/plugins/pluginmanager/iconmanager.cpp index 5929d797f..563534ba9 100644 --- a/plugins/pluginmanager/iconmanager.cpp +++ b/plugins/pluginmanager/iconmanager.cpp @@ -87,41 +87,65 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const // 组合图标 QPixmap pixmap; if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { - if (m_displayMode == Dock::DisplayMode::Efficient) { - // 高效模式下,高度固定为30,圆角固定为8 - pixmap = QPixmap(ITEMWIDTH * plugins.size() + ITEMSPACE * (plugins.size() + 1), 30); - } else { - // 时尚模式下,高度随着任务栏的大小变化而变化 - pixmap = QPixmap(ITEMWIDTH * plugins.size() + ITEMSPACE * (plugins.size() + 1), m_size.height() - 8); + // 高效模式下,高度固定为30, 时尚模式下,高度随着任务栏的大小变化而变化 + int iconHeight = (m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.height() - 8); + int iconWidth = ITEMSPACE; + for (PluginsItemInterface *plugin : plugins) { + QIcon icon = plugin->icon(DockPart::QuickShow); + QSize iconSize(ITEMWIDTH, ITEMHEIGHT); + QList iconSizes = icon.availableSizes(); + if (iconSizes.size() > 0) + iconSize = iconSizes.first() / qApp->devicePixelRatio(); + iconWidth += iconSize.width() + ITEMSPACE; } + iconWidth += ITEMSPACE; + pixmap = QPixmap(iconWidth, iconHeight); } else { - if (m_displayMode == Dock::DisplayMode::Efficient) { - // 高校模式下,宽度固定 - pixmap = QPixmap(30, ITEMWIDTH * plugins.size() + ITEMSPACE * (plugins.size() + 1)); - } else { - pixmap = QPixmap(m_size.width() - 8, ITEMWIDTH * plugins.size() + ITEMSPACE * (plugins.size() + 1)); + // 左右方向,高效模式下,宽度固定为30,时尚模式下,宽度随任务栏的大小变化而变化 + int iconWidth = m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.width() - 8; + int iconHeight = ITEMHEIGHT; + for (PluginsItemInterface *plugin : plugins) { + QIcon icon = plugin->icon(DockPart::QuickShow); + QSize iconSize(ITEMWIDTH, ITEMHEIGHT); + QList iconSizes = icon.availableSizes(); + if (iconSizes.size() > 0) + iconSize = iconSizes.first() / qApp->devicePixelRatio(); + iconHeight += iconSize.height() + ITEMSPACE; } + pixmap = QPixmap(iconWidth, iconHeight); } pixmap.fill(Qt::transparent); QPainter painter(&pixmap); painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing); if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { - QPoint pointPixmap(ITEMSPACE, (pixmap.height() - ITEMHEIGHT) / 2); + int x = ITEMSPACE; for (PluginsItemInterface *plugin : plugins) { QIcon icon = plugin->icon(DockPart::QuickShow); - QPixmap pixmapDraw = icon.pixmap(ITEMHEIGHT, ITEMHEIGHT); - painter.drawPixmap(pointPixmap, pixmapDraw); - pointPixmap.setX(pointPixmap.x() + ITEMWIDTH + ITEMSPACE); + QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); + QList iconSizes = icon.availableSizes(); + if (iconSizes.size() > 0) + iconSize = iconSizes.first(); + QPixmap pixmapDraw = icon.pixmap(iconSize); + QSize realIconSize = iconSize / qApp->devicePixelRatio(); + QRect rectPixmap(QPoint(x, (pixmap.height() - realIconSize.height()) / 2), realIconSize); + painter.drawPixmap(rectPixmap, pixmapDraw); + x += ITEMWIDTH + ITEMSPACE; } } else { - QPoint pointPixmap((pixmap.width() - ITEMWIDTH) / 2, ITEMSPACE); - for (PluginsItemInterface *plugin : plugins) { - QIcon icon = plugin->icon(DockPart::QuickShow); - QPixmap pixmapDraw = icon.pixmap(ITEMHEIGHT, ITEMHEIGHT); - painter.drawPixmap(pointPixmap, pixmapDraw); - pointPixmap.setY(pointPixmap.y() + ITEMWIDTH + ITEMSPACE); - } + int y = ITEMSPACE; + for (PluginsItemInterface *plugin : plugins) { + QIcon icon = plugin->icon(DockPart::QuickShow); + QSize iconSize(ITEMWIDTH, ITEMHEIGHT); + QList iconSizes = icon.availableSizes(); + if (iconSizes.size() > 0) + iconSize = iconSizes.first() / qApp->devicePixelRatio(); + + QPixmap pixmapDraw = icon.pixmap(iconSize); + QRect rectPixmap(QPoint((pixmap.width() - ITEMWIDTH) / 2, y), iconSize); + painter.drawPixmap(rectPixmap, pixmapDraw); + y += ITEMHEIGHT + ITEMSPACE; + } } painter.end(); return pixmap; diff --git a/plugins/sound/soundwidget.cpp b/plugins/sound/soundwidget.cpp index 878699b0e..7918fae9b 100644 --- a/plugins/sound/soundwidget.cpp +++ b/plugins/sound/soundwidget.cpp @@ -40,7 +40,7 @@ DGUI_USE_NAMESPACE -#define ICON_SIZE 24 +#define ICON_SIZE 18 #define BACKSIZE 36 SoundWidget::SoundWidget(QWidget *parent) @@ -68,7 +68,7 @@ void SoundWidget::initUi() QPixmap leftPixmap = ImageUtil::loadSvg(leftIcon(), QSize(ICON_SIZE, ICON_SIZE)); QPixmap rightPixmap = ImageUtil::loadSvg(rightIcon(), QSize(ICON_SIZE, ICON_SIZE)); - m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 12); + m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 10); m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); m_sliderContainer->setRange(0, std::round(m_dbusAudio->maxUIVolume() * 100.00)); m_sliderContainer->setPageStep(2); @@ -127,14 +127,14 @@ const QString SoundWidget::leftIcon() { const bool mute = existActiveOutputDevice() ? m_defaultSink->mute() : true; if (mute) - return QString(":/icons/resources/audio-volume-muted-dark"); + return QString(":/icons/resources/audio-volume-muted-dark.svg"); - return QString(":/icons/resources/volume"); + return QString(":/icons/resources/volume.svg"); } const QString SoundWidget::rightIcon() { - return QString(":/icons/resources/broadcast"); + return QString(":/icons/resources/broadcast.svg"); } /** 判断是否存在未禁用的声音输出设备