mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00
fix: 修复图标异常问题
1、修复拖动过程中组合图标尺寸显示异常的问题 2、修复从控制中心设置插件显示隐藏引起的异常问题 3、修复高缩放率下的组合图标显示异常问题 4、修复蓝牙面板在不同的主题下颜色的显示的问题 5、社区版键盘布局默认在任务栏显示 Log: 修复图标显示的问题 Influence: 高缩放率下,观察组合图标显示是否正常 Bug: https://pms.uniontech.com/bug-view-181723.html Change-Id: Id351063095a2290731876ce896c2cd05a32d4ec0
This commit is contained in:
parent
bdd4c4b722
commit
9b6d09ffab
@ -27,7 +27,7 @@
|
||||
"visibility": "private"
|
||||
},
|
||||
"Dock_Quick_Tray_Name": {
|
||||
"value": ["fcitx"],
|
||||
"value": ["fcitx", "indicator:keybord_layout"],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "显示在任务栏上的托盘图标",
|
||||
|
@ -837,14 +837,10 @@ void QuickDockItem::paintEvent(QPaintEvent *event)
|
||||
if (pixmap.isNull())
|
||||
return QWidget::paintEvent(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);
|
||||
}
|
||||
QSize size = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? pixmap.size() / qApp->devicePixelRatio(): pixmap.size();
|
||||
QRect pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), size);
|
||||
painter.drawPixmap(pixmapRect, pixmap);
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,7 @@ BluetoothMainWidget::BluetoothMainWidget(AdaptersManager *adapterManager, QWidge
|
||||
, m_nameLabel(new QLabel(this))
|
||||
, m_stateLabel(new QLabel(this))
|
||||
, m_expandLabel(new QLabel(this))
|
||||
, m_mouseEnter(false)
|
||||
{
|
||||
initUi();
|
||||
initConnection();
|
||||
@ -66,8 +67,11 @@ bool BluetoothMainWidget::eventFilter(QObject *watcher, QEvent *event)
|
||||
QPainterPath path;
|
||||
path.addEllipse(ptCenter, size / 2 - 1, size / 2 - 1);
|
||||
// 设置黑色背景色
|
||||
QColor backColor(Qt::black);
|
||||
backColor.setAlphaF(0.1);
|
||||
QColor backColor = (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType ? Qt::black : Qt::white);
|
||||
if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType)
|
||||
backColor.setAlphaF(m_mouseEnter ? 0.2 : 0.1);
|
||||
else
|
||||
backColor.setAlphaF(m_mouseEnter ? 0.1 : 0.2);
|
||||
painter.setBrush(backColor);
|
||||
painter.fillPath(path, backColor);
|
||||
// 添加图标
|
||||
@ -81,6 +85,16 @@ bool BluetoothMainWidget::eventFilter(QObject *watcher, QEvent *event)
|
||||
painter.drawPixmap(QPoint(ptCenter.x() - pixmap.size().width() / 2, ptCenter.y() - pixmap.size().height() / 2), pixmap);
|
||||
return true;
|
||||
}
|
||||
case QEvent::Enter: {
|
||||
m_mouseEnter = true;
|
||||
m_iconWidget->update();
|
||||
break;
|
||||
}
|
||||
case QEvent::Leave: {
|
||||
m_mouseEnter = false;
|
||||
m_iconWidget->update();
|
||||
break;
|
||||
}
|
||||
case QEvent::MouseButtonRelease: {
|
||||
bool status = !(isOpen());
|
||||
for (const Adapter *adapter : m_adapterManager->adapters())
|
||||
@ -115,10 +129,7 @@ void BluetoothMainWidget::initUi()
|
||||
QFont nameFont = DFontSizeManager::instance()->t6();
|
||||
nameFont.setBold(true);
|
||||
|
||||
QPalette pe;
|
||||
pe.setColor(QPalette::WindowText, Qt::black);
|
||||
m_nameLabel->setParent(textWidget);
|
||||
m_nameLabel->setPalette(pe);
|
||||
m_nameLabel->setFont(nameFont);
|
||||
|
||||
m_stateLabel->setParent(textWidget);
|
||||
|
@ -59,6 +59,7 @@ private:
|
||||
QLabel *m_nameLabel;
|
||||
QLabel *m_stateLabel;
|
||||
QLabel *m_expandLabel;
|
||||
bool m_mouseEnter;
|
||||
};
|
||||
|
||||
#endif // BLUETOOTHMAINWIDGET_H
|
||||
|
@ -660,6 +660,12 @@ bool DockPluginController::eventFilter(QObject *object, QEvent *event)
|
||||
}
|
||||
|
||||
bool DockPluginController::pluginCanDock(PluginsItemInterface *plugin) const
|
||||
{
|
||||
const QStringList configPlugins = SETTINGCONFIG->value(DOCK_QUICK_PLUGINS).toStringList();
|
||||
return pluginCanDock(configPlugins, plugin);
|
||||
}
|
||||
|
||||
bool DockPluginController::pluginCanDock(const QStringList &config, PluginsItemInterface *plugin) const
|
||||
{
|
||||
// 1、如果插件是强制驻留任务栏,则始终显示
|
||||
// 2、如果插件是托盘插件,例如U盘插件,则始终显示
|
||||
@ -668,8 +674,7 @@ bool DockPluginController::pluginCanDock(PluginsItemInterface *plugin) const
|
||||
return true;
|
||||
|
||||
// 3、插件已经驻留在任务栏,则始终显示
|
||||
const QStringList configPlugins = SETTINGCONFIG->value(DOCK_QUICK_PLUGINS).toStringList();
|
||||
return configPlugins.contains(plugin->pluginName());
|
||||
return config.contains(plugin->pluginName());
|
||||
}
|
||||
|
||||
void DockPluginController::updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part)
|
||||
@ -687,13 +692,14 @@ void DockPluginController::onConfigChanged(const QString &key, const QVariant &v
|
||||
// 这里只处理工具插件(回收站)和系统插件(电源插件)
|
||||
for (PluginsItemInterface *plugin : plugins()) {
|
||||
QString itemKey = this->itemKey(plugin);
|
||||
if (!pluginNames.contains(plugin->pluginName()) && isPluginLoaded(plugin)) {
|
||||
bool canDock = pluginCanDock(pluginNames, plugin);
|
||||
if (!canDock && isPluginLoaded(plugin)) {
|
||||
// 如果当前配置中不包含当前插件,但是当前插件已经加载,那么就移除该插件
|
||||
removePluginItem(plugin, itemKey);
|
||||
QWidget *itemWidget = plugin->itemWidget(itemKey);
|
||||
if (itemWidget)
|
||||
itemWidget->setVisible(false);
|
||||
} else if (pluginNames.contains(plugin->pluginName()) && !isPluginLoaded(plugin)) {
|
||||
} else if (canDock && !isPluginLoaded(plugin)) {
|
||||
// 如果当前配置中包含当前插件,但是当前插件并未加载,那么就加载该插件
|
||||
addPluginItem(plugin, itemKey);
|
||||
// 只有工具插件是通过QWidget的方式进行显示的,因此,这里只处理工具插件
|
||||
|
@ -69,6 +69,7 @@ protected:
|
||||
bool eventFilter(QObject *object, QEvent *event) override;
|
||||
|
||||
bool pluginCanDock(PluginsItemInterface *plugin) const;
|
||||
bool pluginCanDock(const QStringList &config, PluginsItemInterface *plugin) const;
|
||||
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
|
||||
|
||||
private:
|
||||
|
@ -33,6 +33,8 @@
|
||||
#define ITEMSPACE 6
|
||||
#define ITEMHEIGHT 16
|
||||
#define ITEMWIDTH 18
|
||||
#define MINISIZE 1
|
||||
#define STARTPOS 2
|
||||
|
||||
static QStringList pluginNames = {"power", "sound", "network"};
|
||||
|
||||
@ -84,34 +86,44 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
int itemSpace = 0;
|
||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom)
|
||||
itemSpace = (m_displayMode == Dock::DisplayMode::Efficient ? 8 : 10);
|
||||
else
|
||||
itemSpace = 2;
|
||||
// 组合图标
|
||||
QPixmap pixmap;
|
||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||
// 高效模式下,高度固定为30, 时尚模式下,高度随着任务栏的大小变化而变化
|
||||
int iconHeight = (m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.height() - 8);
|
||||
int iconWidth = ITEMSPACE;
|
||||
if (iconHeight <= 0)
|
||||
iconHeight = MINISIZE;
|
||||
int iconWidth = STARTPOS;
|
||||
for (PluginsItemInterface *plugin : plugins) {
|
||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||
QSize iconSize(ITEMWIDTH, ITEMHEIGHT);
|
||||
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||
QList<QSize> iconSizes = icon.availableSizes();
|
||||
if (iconSizes.size() > 0)
|
||||
iconSize = iconSizes.first() / qApp->devicePixelRatio();
|
||||
iconWidth += iconSize.width() + ITEMSPACE;
|
||||
iconSize = iconSizes.first();
|
||||
iconWidth += iconSize.width();
|
||||
}
|
||||
iconWidth += ITEMSPACE;
|
||||
iconWidth += itemSpace * (plugins.size() - 1);
|
||||
pixmap = QPixmap(iconWidth, iconHeight);
|
||||
} else {
|
||||
// 左右方向,高效模式下,宽度固定为30,时尚模式下,宽度随任务栏的大小变化而变化
|
||||
int iconWidth = m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.width() - 8;
|
||||
int iconHeight = ITEMHEIGHT;
|
||||
if (iconWidth <= 0)
|
||||
iconWidth = MINISIZE;
|
||||
int iconHeight = STARTPOS;
|
||||
for (PluginsItemInterface *plugin : plugins) {
|
||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||
QSize iconSize(ITEMWIDTH, ITEMHEIGHT);
|
||||
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||
QList<QSize> iconSizes = icon.availableSizes();
|
||||
if (iconSizes.size() > 0)
|
||||
iconSize = iconSizes.first() / qApp->devicePixelRatio();
|
||||
iconHeight += iconSize.height() + ITEMSPACE;
|
||||
iconSize = iconSizes.first();
|
||||
iconHeight += iconSize.height();
|
||||
}
|
||||
iconHeight += itemSpace * (plugins.size() - 1);
|
||||
pixmap = QPixmap(iconWidth, iconHeight);
|
||||
}
|
||||
|
||||
@ -119,7 +131,7 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const
|
||||
QPainter painter(&pixmap);
|
||||
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||
int x = ITEMSPACE;
|
||||
int x = STARTPOS;
|
||||
for (PluginsItemInterface *plugin : plugins) {
|
||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||
@ -127,24 +139,22 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const
|
||||
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);
|
||||
QRect rectPixmap(QPoint(x, (pixmap.height() - iconSize.height()) / 2), iconSize);
|
||||
painter.drawPixmap(rectPixmap, pixmapDraw);
|
||||
x += ITEMWIDTH + ITEMSPACE;
|
||||
x += iconSize.width() + itemSpace;
|
||||
}
|
||||
} else {
|
||||
int y = ITEMSPACE;
|
||||
int y = STARTPOS;
|
||||
for (PluginsItemInterface *plugin : plugins) {
|
||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||
QSize iconSize(ITEMWIDTH, ITEMHEIGHT);
|
||||
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||
QList<QSize> iconSizes = icon.availableSizes();
|
||||
if (iconSizes.size() > 0)
|
||||
iconSize = iconSizes.first() / qApp->devicePixelRatio();
|
||||
|
||||
iconSize = iconSizes.first();
|
||||
QPixmap pixmapDraw = icon.pixmap(iconSize);
|
||||
QRect rectPixmap(QPoint((pixmap.width() - ITEMWIDTH) / 2, y), iconSize);
|
||||
QRect rectPixmap(QPoint((pixmap.width() - iconSize.width()) / 2, y), iconSize);
|
||||
painter.drawPixmap(rectPixmap, pixmapDraw);
|
||||
y += ITEMHEIGHT + ITEMSPACE;
|
||||
y += iconSize.height() + itemSpace;
|
||||
}
|
||||
}
|
||||
painter.end();
|
||||
|
Loading…
x
Reference in New Issue
Block a user