fix: 修复高缩放率下图标显示异常的问题

1、高缩放率下计算图标任务栏尺寸需要乘以缩放率的数值
2、加载声音图标带上具体的后缀名,否则会出现图标显示异常
3、自定义图标的尺寸的显示,需要重新计算图标的宽度

Log: 修复高分屏下图标显示异常
Influence: 高分屏,高缩放率,观察任务栏插件区域的图标
Bug: https://pms.uniontech.com/bug-view-183543.html
Bug: https://pms.uniontech.com/bug-view-184089.html
Change-Id: Iaa8833b20608129e5c10c8614702a9e5afeae2d9
This commit is contained in:
donghualin 2023-01-31 10:55:04 +08:00
parent 50dad25442
commit da1b436796
11 changed files with 69 additions and 182 deletions

View File

@ -52,7 +52,7 @@ DockTrayWindow::DockTrayWindow(DockInter *dockInter, QWidget *parent)
, m_toolLineLabel(new QLabel(this))
, m_dateTimeWidget(new DateTimeDisplayer(true, this))
, m_systemPuginWidget(new SystemPluginWindow(dockInter, this))
, m_quickIconWidget(new QuickPluginWindow(this))
, m_quickIconWidget(new QuickPluginWindow(Dock::DisplayMode::Efficient, this))
, m_trayView(new TrayGridView(this))
, m_model(TrayModel::getDockModel())
, m_delegate(new TrayDelegate(m_trayView, this))

View File

@ -89,7 +89,6 @@ MainPanelControl::MainPanelControl(DockInter *dockInter, QWidget *parent)
, m_multiWindowLayout(new QBoxLayout(QBoxLayout::LeftToRight, m_multiWindowWidget))
, m_toolSonAreaWidget(new QWidget(m_toolAreaWidget))
, m_toolSonLayout(new QBoxLayout(QBoxLayout::LeftToRight, m_toolSonAreaWidget))
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight, this))
, m_position(Position::Bottom)
, m_placeholderItem(nullptr)
, m_appDragWidget(nullptr)
@ -226,13 +225,11 @@ void MainPanelControl::updateMainPanelLayout()
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_mainPanelLayout->setDirection(QBoxLayout::LeftToRight);
m_fixedAreaLayout->setDirection(QBoxLayout::LeftToRight);
m_pluginLayout->setDirection(QBoxLayout::LeftToRight);
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
m_recentLayout->setDirection(QBoxLayout::LeftToRight);
m_multiWindowLayout->setDirection(QBoxLayout::LeftToRight);
m_toolAreaLayout->setDirection(QBoxLayout::LeftToRight);
m_toolSonLayout->setDirection(QBoxLayout::LeftToRight);
m_pluginLayout->setContentsMargins(10, 0, 10, 0);
m_multiWindowLayout->setContentsMargins(0, 2, 0, 2);
break;
case Position::Right:
@ -241,13 +238,11 @@ void MainPanelControl::updateMainPanelLayout()
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_mainPanelLayout->setDirection(QBoxLayout::TopToBottom);
m_fixedAreaLayout->setDirection(QBoxLayout::TopToBottom);
m_pluginLayout->setDirection(QBoxLayout::TopToBottom);
m_appAreaSonLayout->setDirection(QBoxLayout::TopToBottom);
m_recentLayout->setDirection(QBoxLayout::TopToBottom);
m_multiWindowLayout->setDirection(QBoxLayout::TopToBottom);
m_toolAreaLayout->setDirection(QBoxLayout::TopToBottom);
m_toolSonLayout->setDirection(QBoxLayout::TopToBottom);
m_pluginLayout->setContentsMargins(0, 10, 0, 10);
m_multiWindowLayout->setContentsMargins(2, 0, 2, 0);
break;
}
@ -409,7 +404,6 @@ void MainPanelControl::insertItem(int index, DockItem *item)
resizeDockIcon();
item->checkEntry();
QTimer::singleShot(0, this, &MainPanelControl::updatePluginsLayout);
}
/**从任务栏移除某一应用,并更新任务栏图标大小
@ -455,17 +449,7 @@ void MainPanelControl::moveItem(DockItem *sourceItem, DockItem *targetItem)
int idx = -1;
if (targetItem->itemType() == DockItem::App)
idx = m_appAreaSonLayout->indexOf(targetItem);
else if (targetItem->itemType() == DockItem::Plugins){
//因为日期时间插件大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
//因此有拖动图标时,需要从多的一层布局中判断是否相同插件而获取插件位置顺序
for (int i = 0; i < m_pluginLayout->count(); ++i) {
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
if (layout && layout->itemAt(0)->widget() == targetItem) {
idx = i;
break;
}
}
} else if (targetItem->itemType() == DockItem::FixedPlugin)
else if (targetItem->itemType() == DockItem::FixedPlugin)
idx = m_fixedAreaLayout->indexOf(targetItem);
else
return;
@ -955,22 +939,6 @@ void MainPanelControl::moveAppSonWidget()
m_appAreaSonWidget->move(rect.x(), rect.y());
}
/**通知布局器,控件已发生变化,需要重新设置几何位置
* @brief MainPanelControl::updatePluginsLayout
*/
void MainPanelControl::updatePluginsLayout()
{
for (int i = 0; i < m_pluginLayout->count(); ++i) {
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
if (layout) {
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
if (pItem && pItem->sizeHint().width() != -1) {
pItem->updateGeometry();
}
}
}
}
void MainPanelControl::updateDockInter(DockInter *dockInter)
{
m_dockInter = dockInter;
@ -998,21 +966,30 @@ QSize MainPanelControl::suitableSize(const Position &position, int screenSize, d
}
// 如果是特效模式
int totalLength = static_cast<int>(screenSize / ratio);
int totalLength = getScreenSize();
// 减去插件区域的尺寸
totalLength -= trayAreaSize();
totalLength -= trayAreaSize(ratio);
if (m_fixedSpliter->isVisible())
totalLength -= SPLITER_SIZE;
if (m_appSpliter->isVisible())
totalLength -= SPLITER_SIZE;
if (m_recentSpliter->isVisible())
totalLength -= SPLITER_SIZE;
// 需要参与计算的图标的总数
int iconCount = m_fixedAreaLayout->count() + m_appAreaSonLayout->count() + m_recentLayout->count() + m_toolSonLayout->count();
int multiWindowCount = m_multiWindowLayout->count();
if (iconCount <= 0 && multiWindowCount <= 0) {
if (position == Position::Top || position == Position::Bottom)
return QSize((static_cast<int>(dockSize / ratio)), dockSize);
return QSize((static_cast<int>(dockSize)), dockSize);
return QSize(dockSize, static_cast<int>(dockSize / ratio));
return QSize(dockSize, static_cast<int>(dockSize));
}
int redundantLength = (totalLength % iconCount);
// icon宽度 = (总宽度-余数)/icon个数
int iconSize = qMin(((totalLength - redundantLength) / iconCount), dockSize);
int iconSize = qMin((static_cast<int>((totalLength - redundantLength) / iconCount / ratio)), dockSize);
if (position == Position::Top || position == Position::Bottom) {
int spliterWidth = m_fixedSpliter->isVisible() ? SPLITER_SIZE : 0;
@ -1034,10 +1011,10 @@ QSize MainPanelControl::suitableSize(const Position &position, int screenSize, d
}
}
int panelWidth = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterWidth / ratio),
static_cast<int>((screenSize - DOCKSPACE) / deviceRatio));
int panelWidth = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterWidth),
static_cast<int>((screenSize - DOCKSPACE)));
return QSize(panelWidth, static_cast<int>(dockSize / ratio));
return QSize(panelWidth, static_cast<int>(dockSize));
}
int spliterHeight = m_fixedSpliter->isVisible() ? SPLITER_SIZE : 0;
@ -1059,8 +1036,8 @@ QSize MainPanelControl::suitableSize(const Position &position, int screenSize, d
}
}
int panelHeight = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterHeight / ratio),
static_cast<int>((screenSize - DOCKSPACE)/ deviceRatio));
int panelHeight = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterHeight),
static_cast<int>((screenSize - DOCKSPACE)));
return QSize(dockSize, panelHeight);
}
@ -1111,10 +1088,10 @@ int MainPanelControl::getScreenSize() const
return screenRect.height();
}
int MainPanelControl::trayAreaSize() const
int MainPanelControl::trayAreaSize(qreal ratio) const
{
if (m_displayMode == Dock::DisplayMode::Efficient)
return (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? m_tray->width() : m_tray->height());
return (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? m_tray->width() * ratio: m_tray->height() * ratio);
int length = 0;
QWidgetList topLevelWidgets = qApp->topLevelWidgets();
@ -1123,10 +1100,11 @@ int MainPanelControl::trayAreaSize() const
if (!topWindow)
continue;
if (topWindow->windowType() != MainWindowBase::DockWindowType::MainWindow)
length += (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? topWindow->width() : topWindow->height());
if (topWindow->windowType() != MainWindowBase::DockWindowType::MainWindow) {
length += (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? topWindow->width() * ratio : topWindow->height() * ratio);
}
length += topWindow->dockSpace();
length += topWindow->dockSpace() * ratio;
}
return length;
@ -1138,7 +1116,6 @@ int MainPanelControl::trayAreaSize() const
void MainPanelControl::resizeDockIcon()
{
int iconSize = 0;
int tray_item_size = 0;
// 总宽度
if (m_displayMode == DisplayMode::Fashion) {
// 时尚模式
@ -1152,7 +1129,7 @@ void MainPanelControl::resizeDockIcon()
if (iconCount <= 0)
return;
int totalLength = getScreenSize() - trayAreaSize();
int totalLength = getScreenSize() - trayAreaSize(qApp->devicePixelRatio());
if (m_fixedSpliter->isVisible())
totalLength -= SPLITER_SIZE;
@ -1165,26 +1142,8 @@ void MainPanelControl::resizeDockIcon()
int yu = (totalLength % iconCount);
// icon宽度 = (总宽度-余数)/icon个数
iconSize = (totalLength - yu) / iconCount;
// 计算插件图标的最大或最小值
tray_item_size = qBound(20, iconSize, 40);
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
tray_item_size = qMin(tray_item_size, height());
tray_item_size = std::min(tray_item_size, height() - 20);
} else {
tray_item_size = qMin(tray_item_size,width());
tray_item_size = std::min(tray_item_size, width() - 20);
}
if (tray_item_size < 20)
tray_item_size = 20;
// 余数
yu = (totalLength % iconCount);
// icon宽度 = (总宽度-余数)/icon个数
iconSize = (totalLength - yu) / iconCount;
} else {
int totalLength = ((m_position == Position::Top) || (m_position == Position::Bottom)) ? width() : height();
totalLength -= trayAreaSize();
int totalLength = getScreenSize() - trayAreaSize(qApp->devicePixelRatio());
// 减去3个分割线的宽度
if (m_fixedSpliter->isVisible())
totalLength -= SPLITER_SIZE;
@ -1193,34 +1152,8 @@ void MainPanelControl::resizeDockIcon()
if (m_recentSpliter->isVisible())
totalLength -= SPLITER_SIZE;
int pluginItemCount = 0;
int calcPluginItemCount = 0;
// 因为日期时间大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
// 因此需要通过多一层布局来获取各插件
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
if (layout) {
PluginsItem *w = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
if (w) {
// 如果插件大小由自己决定,则不参与计算需要减去其宽度,其他插件则需要参与计算并计数
if ((m_position == Position::Top || m_position == Position::Bottom) && (w->sizeHint().height() != -1)) {
totalLength -= w->width();
} else if ((m_position == Position::Top || m_position == Position::Bottom) && (w->sizeHint().width() != -1)) {
totalLength -= w->height();
} else {
calcPluginItemCount ++;
}
// 所有插件个数,用于计算插件之间的间隔之和
pluginItemCount ++;
}
}
}
// 减去插件间隔大小, 只有一个插件或没有插件都是间隔20,2个或以上每多一个插件多间隔10
if (pluginItemCount > 1)
totalLength -= (pluginItemCount + 1) * 10;
else
totalLength -= 20;
totalLength -= 20;
if (totalLength < 0)
return;
@ -1236,19 +1169,6 @@ void MainPanelControl::resizeDockIcon()
// icon宽度 = (总宽度-余数)/icon个数
iconSize = (totalLength - yu) / iconCount;
// 计算插件图标的最大或最小值
tray_item_size = qBound(20, iconSize, 40);
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
tray_item_size = qMin(tray_item_size,height());
tray_item_size = std::min(tray_item_size, height() - 20);
} else {
tray_item_size = qMin(tray_item_size,width());
tray_item_size = std::min(tray_item_size, width() - 20);
}
if (tray_item_size < 20)
tray_item_size = 20;
// 余数
yu = (totalLength % iconCount);
// icon宽度 = (总宽度-余数)/icon个数
@ -1258,20 +1178,20 @@ void MainPanelControl::resizeDockIcon()
iconSize = iconSize / qApp->devicePixelRatio();
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
if (iconSize >= height()) {
calcuDockIconSize(height(), height(), tray_item_size);
calcuDockIconSize(height(), height());
} else {
calcuDockIconSize(iconSize, height(), tray_item_size);
calcuDockIconSize(iconSize, height());
}
} else {
if (iconSize >= width()) {
calcuDockIconSize(width(), width(), tray_item_size);
calcuDockIconSize(width(), width());
} else {
calcuDockIconSize(width(), iconSize, tray_item_size);
calcuDockIconSize(width(), iconSize);
}
}
}
void MainPanelControl::calcuDockIconSize(int w, int h, int traySize)
void MainPanelControl::calcuDockIconSize(int w, int h)
{
int appItemSize = qMin(w, h);
for (int i = 0; i < m_fixedAreaLayout->count(); ++i)
@ -1361,42 +1281,6 @@ void MainPanelControl::calcuDockIconSize(int w, int h, int traySize)
}
}
// 因为日期时间大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
// 因此需要通过多一层布局来获取各插件
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
// 三方插件
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
if (!layout || !layout->itemAt(0))
continue;
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
if (!pItem)
continue;
if (pItem->sizeHint().height() == -1)
pItem->setFixedSize(traySize, traySize);
else if (pItem->sizeHint().height() > height())
pItem->resize(pItem->width(), height());
}
} else {
// 三方插件
for (int i = 0; i < m_pluginLayout->count(); i++) {
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
if (!layout || !layout->itemAt(0))
continue;
PluginsItem *pItem = qobject_cast<PluginsItem *>(layout->itemAt(0)->widget());
if (!pItem)
continue;
if (pItem->sizeHint().width() == -1)
pItem->setFixedSize(traySize, traySize);
else if (pItem->sizeHint().width() > width())
pItem->resize(width(), pItem->height());
}
}
int appTopAndBottomMargin = 0;
int appLeftAndRightMargin = 0;

View File

@ -51,7 +51,6 @@ public:
void setPositonValue(Position position);
void setDisplayMode(DisplayMode dislayMode);
void resizeDockIcon();
void updatePluginsLayout();
void updateDockInter(DockInter *dockInter);
QSize suitableSize(const Position &position, int screenSize, double deviceRatio) const;
@ -79,14 +78,14 @@ private:
void removeFixedAreaItem(QWidget *wdg);
void removeAppAreaItem(QWidget *wdg);
int getScreenSize() const;
int trayAreaSize() const;
int trayAreaSize(qreal ratio) const;
// 拖拽相关
void startDrag(DockItem *);
DockItem *dropTargetItem(DockItem *sourceItem, QPoint point);
void moveItem(DockItem *sourceItem, DockItem *targetItem);
void handleDragMove(QDragMoveEvent *e, bool isFilter);
void calcuDockIconSize(int w, int h, int traySize);
void calcuDockIconSize(int w, int h);
bool checkNeedShowDesktop();
bool appIsOnDock(const QString &appDesktop);
void dockRecentApp(DockItem *dockItem);
@ -129,8 +128,6 @@ private:
QWidget *m_toolSonAreaWidget; // 工具区域,用来存放回收站等工具
QBoxLayout *m_toolSonLayout; // 工具区域布局
QBoxLayout *m_pluginLayout; // 插件区域布局
Position m_position;
QPointer<PlaceholderItem> m_placeholderItem;
QString m_draggingMimeKey;

View File

@ -69,13 +69,6 @@ MainWindow::MainWindow(MultiScreenWorker *multiScreenWorker, QWidget *parent)
m_mainPanel->insertItem(-1, item);
}
void MainWindow::resizeEvent(QResizeEvent *event)
{
MainWindowBase::resizeEvent(event);
m_mainPanel->updatePluginsLayout();
}
void MainWindow::initConnections()
{
connect(DockItemManager::instance(), &DockItemManager::itemInserted, m_mainPanel, &MainPanelControl::insertItem, Qt::DirectConnection);

View File

@ -64,7 +64,6 @@ public:
private:
using QWidget::show;
void resizeEvent(QResizeEvent *event) override;
void initConnections();
void resizeDockIcon();

View File

@ -87,12 +87,13 @@ typedef struct DragInfo{
}
} DragInfo;
QuickPluginWindow::QuickPluginWindow(QWidget *parent)
QuickPluginWindow::QuickPluginWindow(Dock::DisplayMode displayMode, QWidget *parent)
: QWidget(parent)
, m_mainLayout(new QBoxLayout(QBoxLayout::RightToLeft, this))
, m_position(Dock::Position::Bottom)
, m_dragInfo(new DragInfo)
, m_dragEnterMimeData(nullptr)
, m_displayMode(displayMode)
{
initUi();
initConnection();
@ -115,7 +116,9 @@ void QuickPluginWindow::initUi()
m_mainLayout->setDirection(QBoxLayout::RightToLeft);
m_mainLayout->setContentsMargins(0, 0, 0, 0);
m_mainLayout->setSpacing(ITEMSPACE);
m_mainLayout->addSpacing(STARTSPACE);
// 时尚模式下的插件右侧的区域增加空白的间隔
if (m_displayMode == Dock::DisplayMode::Fashion)
m_mainLayout->addSpacing(STARTSPACE);
}
void QuickPluginWindow::setPositon(Position position)
@ -397,6 +400,7 @@ void QuickPluginWindow::onRequestUpdate()
itemWidget = pluginItems[item];
} else {
itemWidget = new QuickDockItem(item, quickController->itemKey(item), this);
itemWidget->setPosition(m_position);
updateDockItemSize(itemWidget);
itemWidget->installEventFilter(this);
itemWidget->setMouseTracking(true);
@ -783,12 +787,20 @@ QSize QuickDockItem::suitableSize() const
if (!pixmap.isNull()) {
QSize size = pixmap.size();
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
if (size.width() < widgetSize)
if (size.width() < widgetSize) {
size.setWidth(widgetSize);
} else {
int scaleWidth = size.width() / (size.height() / (widgetSize * 1.0f));
size.setWidth(scaleWidth);
}
return size;
}
if (size.height() < widgetSize)
if (size.height() < widgetSize) {
size.setHeight(widgetSize);
} else {
int scaleHeight = size.height() / (size.width() / (widgetSize * 1.0f));
size.setHeight(scaleHeight);
}
return size;
}

View File

@ -47,7 +47,7 @@ class QuickPluginWindow : public QWidget
Q_OBJECT
public:
explicit QuickPluginWindow(QWidget *parent = nullptr);
explicit QuickPluginWindow(Dock::DisplayMode displayMode, QWidget *parent = nullptr);
~QuickPluginWindow() override;
void setPositon(Dock::Position position);
@ -93,6 +93,7 @@ private:
Dock::Position m_position;
struct DragInfo *m_dragInfo;
QuickPluginMimeData *m_dragEnterMimeData;
Dock::DisplayMode m_displayMode;
};
// 用于在任务栏上显示的插件

View File

@ -210,6 +210,7 @@ void SystemPluginWindow::onPluginItemUpdated(PluginsItemInterface *pluginItem)
item->update();
}
// 图标的尺寸
#define ICONSIZE 20
#define ICONTEXTSPACE 6
#define PLUGIN_ITEM_DRAG_THRESHOLD 20
@ -293,20 +294,21 @@ void StretchPluginsItem::paintEvent(QPaintEvent *event)
QSize StretchPluginsItem::suitableSize(const Position &position) const
{
int iconSize = static_cast<int>(ICONSIZE * (qApp->devicePixelRatio()));
if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
int textWidth = 0;
if (needShowText())
textWidth = QFontMetrics(textFont(position)).boundingRect(m_pluginInter->pluginDisplayName()).width();
return QSize(qMax(textWidth, iconSize) + (m_displayMode == Dock::DisplayMode::Efficient ? 5 : 10) * 2, -1);
return QSize(qMax(textWidth, ICONSIZE) + (m_displayMode == Dock::DisplayMode::Efficient ? 5 : 10) * 2, -1);
}
int height = 6; // 图标上边距6
height += iconSize; // 图标尺寸20
height += ICONTEXTSPACE; // 图标与文字间距6
if (needShowText()) // 只有在显示文本的时候才计算文本的高度
height += QFontMetrics(textFont(position)).height(); // 文本高度
height += 4; // 下间距4
int height = 6; // 图标上边距6
height += ICONSIZE; // 图标尺寸20
if (m_displayMode == Dock::DisplayMode::Fashion) {
height += ICONTEXTSPACE; // 图标与文字间距6
if (needShowText()) // 只有在显示文本的时候才计算文本的高度
height += QFontMetrics(textFont(position)).height(); // 文本高度
}
height += 4; // 下间距4
return QSize(-1, height);
}
@ -338,8 +340,6 @@ bool StretchPluginsItem::needShowText() const
if (m_displayMode == Dock::DisplayMode::Efficient)
return false;
// 图标的尺寸
#define ICONSIZE 20
// 图标与文本,图标距离上方和文本距离下方的尺寸
#define SPACEMARGIN 6
// 文本的高度

View File

@ -56,7 +56,7 @@ TrayManagerWindow::TrayManagerWindow(QWidget *parent)
, m_dockInter(new DockInter(dockServiceName(), dockServicePath(), QDBusConnection::sessionBus(), this))
, m_systemPluginWidget(new SystemPluginWindow(m_dockInter, this))
, m_appPluginWidget(new QWidget(m_appPluginDatetimeWidget))
, m_quickIconWidget(new QuickPluginWindow(m_appPluginWidget))
, m_quickIconWidget(new QuickPluginWindow(Dock::DisplayMode::Fashion, m_appPluginWidget))
, m_dateTimeWidget(new DateTimeDisplayer(false, m_appPluginDatetimeWidget))
, m_appPluginLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
, m_mainLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
@ -161,7 +161,6 @@ void TrayManagerWindow::setPositon(Dock::Position position)
void TrayManagerWindow::setDisplayMode(Dock::DisplayMode displayMode)
{
m_displayMode = displayMode;
m_systemPluginWidget->setDisplayMode(displayMode);
// 如果当前模式为高效模式则设置当前的trayView为其计算位置的参照
if (displayMode == Dock::DisplayMode::Fashion) {
ExpandIconWidget::popupTrayView()->setReferGridView(m_trayView);

View File

@ -109,7 +109,7 @@ bool QuickSettingContainer::eventFilter(QObject *watched, QEvent *event)
case QEvent::MouseButtonPress: {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
QuickSettingItem *item = qobject_cast<QuickSettingItem *>(watched);
if (item) {
if (item && item->pluginItem()->flags() & PluginFlag::Attribute_CanDrag) {
m_dragInfo->dragPosition = mouseEvent->pos();
m_dragInfo->dragItem = item;
m_dragInfo->pluginInter = item->pluginItem();

View File

@ -283,6 +283,8 @@ QPixmap SoundItem::pixmap(DGuiApplicationHelper::ColorType colorType, int iconWi
if (colorType == DGuiApplicationHelper::LightType)
iconString.append(PLUGIN_MIN_ICON_NAME);
iconString.append(".svg");
return ImageUtil::loadSvg(":/" + iconString, QSize(iconWidth, iconHeight));
}