mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +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"
|
"visibility": "private"
|
||||||
},
|
},
|
||||||
"Dock_Quick_Tray_Name": {
|
"Dock_Quick_Tray_Name": {
|
||||||
"value": ["fcitx"],
|
"value": ["fcitx", "indicator:keybord_layout"],
|
||||||
"serial": 0,
|
"serial": 0,
|
||||||
"flags": [],
|
"flags": [],
|
||||||
"name": "显示在任务栏上的托盘图标",
|
"name": "显示在任务栏上的托盘图标",
|
||||||
|
@ -837,14 +837,10 @@ void QuickDockItem::paintEvent(QPaintEvent *event)
|
|||||||
if (pixmap.isNull())
|
if (pixmap.isNull())
|
||||||
return QWidget::paintEvent(event);
|
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());
|
pixmap.setDevicePixelRatio(qApp->devicePixelRatio());
|
||||||
|
|
||||||
if (m_pluginItem->pluginSizePolicy() == PluginsItemInterface::PluginSizePolicy::System) {
|
QSize size = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? pixmap.size() / qApp->devicePixelRatio(): pixmap.size();
|
||||||
size = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size / qApp->devicePixelRatio(): size;
|
QRect pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), size);
|
||||||
pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), size);
|
|
||||||
}
|
|
||||||
painter.drawPixmap(pixmapRect, pixmap);
|
painter.drawPixmap(pixmapRect, pixmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ BluetoothMainWidget::BluetoothMainWidget(AdaptersManager *adapterManager, QWidge
|
|||||||
, m_nameLabel(new QLabel(this))
|
, m_nameLabel(new QLabel(this))
|
||||||
, m_stateLabel(new QLabel(this))
|
, m_stateLabel(new QLabel(this))
|
||||||
, m_expandLabel(new QLabel(this))
|
, m_expandLabel(new QLabel(this))
|
||||||
|
, m_mouseEnter(false)
|
||||||
{
|
{
|
||||||
initUi();
|
initUi();
|
||||||
initConnection();
|
initConnection();
|
||||||
@ -66,8 +67,11 @@ bool BluetoothMainWidget::eventFilter(QObject *watcher, QEvent *event)
|
|||||||
QPainterPath path;
|
QPainterPath path;
|
||||||
path.addEllipse(ptCenter, size / 2 - 1, size / 2 - 1);
|
path.addEllipse(ptCenter, size / 2 - 1, size / 2 - 1);
|
||||||
// 设置黑色背景色
|
// 设置黑色背景色
|
||||||
QColor backColor(Qt::black);
|
QColor backColor = (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType ? Qt::black : Qt::white);
|
||||||
backColor.setAlphaF(0.1);
|
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.setBrush(backColor);
|
||||||
painter.fillPath(path, 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);
|
painter.drawPixmap(QPoint(ptCenter.x() - pixmap.size().width() / 2, ptCenter.y() - pixmap.size().height() / 2), pixmap);
|
||||||
return true;
|
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: {
|
case QEvent::MouseButtonRelease: {
|
||||||
bool status = !(isOpen());
|
bool status = !(isOpen());
|
||||||
for (const Adapter *adapter : m_adapterManager->adapters())
|
for (const Adapter *adapter : m_adapterManager->adapters())
|
||||||
@ -115,10 +129,7 @@ void BluetoothMainWidget::initUi()
|
|||||||
QFont nameFont = DFontSizeManager::instance()->t6();
|
QFont nameFont = DFontSizeManager::instance()->t6();
|
||||||
nameFont.setBold(true);
|
nameFont.setBold(true);
|
||||||
|
|
||||||
QPalette pe;
|
|
||||||
pe.setColor(QPalette::WindowText, Qt::black);
|
|
||||||
m_nameLabel->setParent(textWidget);
|
m_nameLabel->setParent(textWidget);
|
||||||
m_nameLabel->setPalette(pe);
|
|
||||||
m_nameLabel->setFont(nameFont);
|
m_nameLabel->setFont(nameFont);
|
||||||
|
|
||||||
m_stateLabel->setParent(textWidget);
|
m_stateLabel->setParent(textWidget);
|
||||||
|
@ -59,6 +59,7 @@ private:
|
|||||||
QLabel *m_nameLabel;
|
QLabel *m_nameLabel;
|
||||||
QLabel *m_stateLabel;
|
QLabel *m_stateLabel;
|
||||||
QLabel *m_expandLabel;
|
QLabel *m_expandLabel;
|
||||||
|
bool m_mouseEnter;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BLUETOOTHMAINWIDGET_H
|
#endif // BLUETOOTHMAINWIDGET_H
|
||||||
|
@ -660,6 +660,12 @@ bool DockPluginController::eventFilter(QObject *object, QEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool DockPluginController::pluginCanDock(PluginsItemInterface *plugin) const
|
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、如果插件是强制驻留任务栏,则始终显示
|
// 1、如果插件是强制驻留任务栏,则始终显示
|
||||||
// 2、如果插件是托盘插件,例如U盘插件,则始终显示
|
// 2、如果插件是托盘插件,例如U盘插件,则始终显示
|
||||||
@ -668,8 +674,7 @@ bool DockPluginController::pluginCanDock(PluginsItemInterface *plugin) const
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
// 3、插件已经驻留在任务栏,则始终显示
|
// 3、插件已经驻留在任务栏,则始终显示
|
||||||
const QStringList configPlugins = SETTINGCONFIG->value(DOCK_QUICK_PLUGINS).toStringList();
|
return config.contains(plugin->pluginName());
|
||||||
return configPlugins.contains(plugin->pluginName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockPluginController::updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part)
|
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()) {
|
for (PluginsItemInterface *plugin : plugins()) {
|
||||||
QString itemKey = this->itemKey(plugin);
|
QString itemKey = this->itemKey(plugin);
|
||||||
if (!pluginNames.contains(plugin->pluginName()) && isPluginLoaded(plugin)) {
|
bool canDock = pluginCanDock(pluginNames, plugin);
|
||||||
|
if (!canDock && isPluginLoaded(plugin)) {
|
||||||
// 如果当前配置中不包含当前插件,但是当前插件已经加载,那么就移除该插件
|
// 如果当前配置中不包含当前插件,但是当前插件已经加载,那么就移除该插件
|
||||||
removePluginItem(plugin, itemKey);
|
removePluginItem(plugin, itemKey);
|
||||||
QWidget *itemWidget = plugin->itemWidget(itemKey);
|
QWidget *itemWidget = plugin->itemWidget(itemKey);
|
||||||
if (itemWidget)
|
if (itemWidget)
|
||||||
itemWidget->setVisible(false);
|
itemWidget->setVisible(false);
|
||||||
} else if (pluginNames.contains(plugin->pluginName()) && !isPluginLoaded(plugin)) {
|
} else if (canDock && !isPluginLoaded(plugin)) {
|
||||||
// 如果当前配置中包含当前插件,但是当前插件并未加载,那么就加载该插件
|
// 如果当前配置中包含当前插件,但是当前插件并未加载,那么就加载该插件
|
||||||
addPluginItem(plugin, itemKey);
|
addPluginItem(plugin, itemKey);
|
||||||
// 只有工具插件是通过QWidget的方式进行显示的,因此,这里只处理工具插件
|
// 只有工具插件是通过QWidget的方式进行显示的,因此,这里只处理工具插件
|
||||||
|
@ -69,6 +69,7 @@ protected:
|
|||||||
bool eventFilter(QObject *object, QEvent *event) override;
|
bool eventFilter(QObject *object, QEvent *event) override;
|
||||||
|
|
||||||
bool pluginCanDock(PluginsItemInterface *plugin) const;
|
bool pluginCanDock(PluginsItemInterface *plugin) const;
|
||||||
|
bool pluginCanDock(const QStringList &config, PluginsItemInterface *plugin) const;
|
||||||
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
|
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
#define ITEMSPACE 6
|
#define ITEMSPACE 6
|
||||||
#define ITEMHEIGHT 16
|
#define ITEMHEIGHT 16
|
||||||
#define ITEMWIDTH 18
|
#define ITEMWIDTH 18
|
||||||
|
#define MINISIZE 1
|
||||||
|
#define STARTPOS 2
|
||||||
|
|
||||||
static QStringList pluginNames = {"power", "sound", "network"};
|
static QStringList pluginNames = {"power", "sound", "network"};
|
||||||
|
|
||||||
@ -84,34 +86,44 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const
|
|||||||
return pixmap;
|
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;
|
QPixmap pixmap;
|
||||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||||
// 高效模式下,高度固定为30, 时尚模式下,高度随着任务栏的大小变化而变化
|
// 高效模式下,高度固定为30, 时尚模式下,高度随着任务栏的大小变化而变化
|
||||||
int iconHeight = (m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.height() - 8);
|
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) {
|
for (PluginsItemInterface *plugin : plugins) {
|
||||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||||
QSize iconSize(ITEMWIDTH, ITEMHEIGHT);
|
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||||
QList<QSize> iconSizes = icon.availableSizes();
|
QList<QSize> iconSizes = icon.availableSizes();
|
||||||
if (iconSizes.size() > 0)
|
if (iconSizes.size() > 0)
|
||||||
iconSize = iconSizes.first() / qApp->devicePixelRatio();
|
iconSize = iconSizes.first();
|
||||||
iconWidth += iconSize.width() + ITEMSPACE;
|
iconWidth += iconSize.width();
|
||||||
}
|
}
|
||||||
iconWidth += ITEMSPACE;
|
iconWidth += itemSpace * (plugins.size() - 1);
|
||||||
pixmap = QPixmap(iconWidth, iconHeight);
|
pixmap = QPixmap(iconWidth, iconHeight);
|
||||||
} else {
|
} else {
|
||||||
// 左右方向,高效模式下,宽度固定为30,时尚模式下,宽度随任务栏的大小变化而变化
|
// 左右方向,高效模式下,宽度固定为30,时尚模式下,宽度随任务栏的大小变化而变化
|
||||||
int iconWidth = m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.width() - 8;
|
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) {
|
for (PluginsItemInterface *plugin : plugins) {
|
||||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||||
QSize iconSize(ITEMWIDTH, ITEMHEIGHT);
|
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||||
QList<QSize> iconSizes = icon.availableSizes();
|
QList<QSize> iconSizes = icon.availableSizes();
|
||||||
if (iconSizes.size() > 0)
|
if (iconSizes.size() > 0)
|
||||||
iconSize = iconSizes.first() / qApp->devicePixelRatio();
|
iconSize = iconSizes.first();
|
||||||
iconHeight += iconSize.height() + ITEMSPACE;
|
iconHeight += iconSize.height();
|
||||||
}
|
}
|
||||||
|
iconHeight += itemSpace * (plugins.size() - 1);
|
||||||
pixmap = QPixmap(iconWidth, iconHeight);
|
pixmap = QPixmap(iconWidth, iconHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +131,7 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const
|
|||||||
QPainter painter(&pixmap);
|
QPainter painter(&pixmap);
|
||||||
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||||
int x = ITEMSPACE;
|
int x = STARTPOS;
|
||||||
for (PluginsItemInterface *plugin : plugins) {
|
for (PluginsItemInterface *plugin : plugins) {
|
||||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||||
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||||
@ -127,24 +139,22 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const
|
|||||||
if (iconSizes.size() > 0)
|
if (iconSizes.size() > 0)
|
||||||
iconSize = iconSizes.first();
|
iconSize = iconSizes.first();
|
||||||
QPixmap pixmapDraw = icon.pixmap(iconSize);
|
QPixmap pixmapDraw = icon.pixmap(iconSize);
|
||||||
QSize realIconSize = iconSize / qApp->devicePixelRatio();
|
QRect rectPixmap(QPoint(x, (pixmap.height() - iconSize.height()) / 2), iconSize);
|
||||||
QRect rectPixmap(QPoint(x, (pixmap.height() - realIconSize.height()) / 2), realIconSize);
|
|
||||||
painter.drawPixmap(rectPixmap, pixmapDraw);
|
painter.drawPixmap(rectPixmap, pixmapDraw);
|
||||||
x += ITEMWIDTH + ITEMSPACE;
|
x += iconSize.width() + itemSpace;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int y = ITEMSPACE;
|
int y = STARTPOS;
|
||||||
for (PluginsItemInterface *plugin : plugins) {
|
for (PluginsItemInterface *plugin : plugins) {
|
||||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||||
QSize iconSize(ITEMWIDTH, ITEMHEIGHT);
|
QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio();
|
||||||
QList<QSize> iconSizes = icon.availableSizes();
|
QList<QSize> iconSizes = icon.availableSizes();
|
||||||
if (iconSizes.size() > 0)
|
if (iconSizes.size() > 0)
|
||||||
iconSize = iconSizes.first() / qApp->devicePixelRatio();
|
iconSize = iconSizes.first();
|
||||||
|
|
||||||
QPixmap pixmapDraw = icon.pixmap(iconSize);
|
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);
|
painter.drawPixmap(rectPixmap, pixmapDraw);
|
||||||
y += ITEMHEIGHT + ITEMSPACE;
|
y += iconSize.height() + itemSpace;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
painter.end();
|
painter.end();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user