mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00
fix: 修复高缩放率下插件图标显示异常的问题
高缩放率下,需要将图标按照缩放下的图标进行显示 Log: 优化高缩放率下插件图标显示异常 Influence: 高分屏,设置缩放率为最高,观察任务栏插件区域的图标显示是否正常 Bug: https://pms.uniontech.com/bug-view-183543.html Change-Id: I3087c87737a8624b906f9076351a952a2dec8452
This commit is contained in:
parent
ebd1522aea
commit
81edbf0000
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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<QSize> 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<QSize> 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<QSize> 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<QSize> 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;
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
/** 判断是否存在未禁用的声音输出设备
|
||||
|
Loading…
x
Reference in New Issue
Block a user