fix: 修复关机图标与插件区域间距过大的问题

高效模式下,关机插件不显示文本,在计算尺寸的时候,不考虑文本的尺寸

Log: 修复高效模式间距过大的问题
Influence: 高效模式下,观察关机图标与左右侧插件和时间的距离
Task: https://pms.uniontech.com/task-view-112073.html
Change-Id: I50c80880b811e7bb06b917891045d462628a8ee4
This commit is contained in:
donghualin 2022-11-09 05:36:03 +00:00
parent 091ed36a88
commit e011333e5a
2 changed files with 23 additions and 25 deletions

View File

@ -51,15 +51,7 @@ SystemPluginWindow::~SystemPluginWindow()
void SystemPluginWindow::setDisplayMode(const DisplayMode &displayMode) void SystemPluginWindow::setDisplayMode(const DisplayMode &displayMode)
{ {
m_displayMode = displayMode; m_displayMode = displayMode;
StretchPluginsItem::setDisplayMode(displayMode);
QObjectList childObjects = children();
for (QObject *childObject : childObjects) {
StretchPluginsItem *item = qobject_cast<StretchPluginsItem *>(childObject);
if (!item)
continue;
item->setDisplayMode(displayMode);
}
} }
void SystemPluginWindow::setPositon(Position position) void SystemPluginWindow::setPositon(Position position)
@ -74,13 +66,15 @@ void SystemPluginWindow::setPositon(Position position)
else else
m_mainLayout->setDirection(QBoxLayout::Direction::TopToBottom); m_mainLayout->setDirection(QBoxLayout::Direction::TopToBottom);
StretchPluginsItem::setPosition(position);
QObjectList childObjects = children(); QObjectList childObjects = children();
for (QObject *childObject : childObjects) { for (QObject *childObject : childObjects) {
StretchPluginsItem *item = qobject_cast<StretchPluginsItem *>(childObject); StretchPluginsItem *item = qobject_cast<StretchPluginsItem *>(childObject);
if (!item) if (!item)
continue; continue;
item->setPosition(m_position); item->update();
} }
} }
@ -199,12 +193,13 @@ void SystemPluginWindow::onPluginItemUpdated(PluginsItemInterface *pluginItem)
#define ICONTEXTSPACE 6 #define ICONTEXTSPACE 6
#define PLUGIN_ITEM_DRAG_THRESHOLD 20 #define PLUGIN_ITEM_DRAG_THRESHOLD 20
Dock::DisplayMode StretchPluginsItem::m_displayMode = Dock::DisplayMode::Efficient;
Dock::Position StretchPluginsItem::m_position = Dock::Position::Bottom;
StretchPluginsItem::StretchPluginsItem(PluginsItemInterface * const pluginInter, const QString &itemKey, QWidget *parent) StretchPluginsItem::StretchPluginsItem(PluginsItemInterface * const pluginInter, const QString &itemKey, QWidget *parent)
: DockItem(parent) : DockItem(parent)
, m_pluginInter(pluginInter) , m_pluginInter(pluginInter)
, m_itemKey(itemKey) , m_itemKey(itemKey)
, m_displayMode(Dock::DisplayMode::Efficient)
, m_position(Dock::Position::Bottom)
{ {
} }
@ -220,7 +215,6 @@ void StretchPluginsItem::setDisplayMode(const DisplayMode &displayMode)
void StretchPluginsItem::setPosition(Position position) void StretchPluginsItem::setPosition(Position position)
{ {
m_position = position; m_position = position;
update();
} }
QString StretchPluginsItem::itemKey() const QString StretchPluginsItem::itemKey() const
@ -272,15 +266,19 @@ QSize StretchPluginsItem::suitableSize(const Position &position) const
{ {
int iconSize = static_cast<int>(ICONSIZE * (qApp->devicePixelRatio())); int iconSize = static_cast<int>(ICONSIZE * (qApp->devicePixelRatio()));
if (position == Dock::Position::Top || position == Dock::Position::Bottom) { if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
int textWidth = QFontMetrics(textFont(position)).boundingRect(m_pluginInter->pluginDisplayName()).width(); int textWidth = 0;
return QSize(qMax(textWidth, iconSize) + 10 * 2, -1); 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);
} }
int height = 6; // 图标上边距6 int height = 6; // 图标上边距6
height += iconSize; // 图标尺寸20 height += iconSize; // 图标尺寸20
height += ICONTEXTSPACE; // 图标与文字间距6 height += ICONTEXTSPACE; // 图标与文字间距6
height += QFontMetrics(textFont(position)).height(); // 文本高度 if (needShowText()) // 只有在显示文本的时候才计算文本的高度
height += 4; // 下间距4 height += QFontMetrics(textFont(position)).height(); // 文本高度
height += 4; // 下间距4
return QSize(-1, height); return QSize(-1, height);
} }
@ -373,7 +371,7 @@ void StretchPluginsItem::mouseClick()
{ {
const QString command = m_pluginInter->itemCommand(m_itemKey); const QString command = m_pluginInter->itemCommand(m_itemKey);
if (!command.isEmpty()) { if (!command.isEmpty()) {
QProcess::startDetached(command); QProcess::startDetached(command, QStringList());
return; return;
} }

View File

@ -77,8 +77,8 @@ class StretchPluginsItem : public DockItem
public: public:
StretchPluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent = nullptr); StretchPluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent = nullptr);
~StretchPluginsItem() override; ~StretchPluginsItem() override;
void setDisplayMode(const Dock::DisplayMode &displayMode); static void setDisplayMode(const Dock::DisplayMode &displayMode);
void setPosition(Dock::Position position); static void setPosition(Dock::Position position);
PluginsItemInterface *pluginInter() const; PluginsItemInterface *pluginInter() const;
QString itemKey() const; QString itemKey() const;
QSize suitableSize() const; QSize suitableSize() const;
@ -105,8 +105,8 @@ private:
private: private:
PluginsItemInterface *m_pluginInter; PluginsItemInterface *m_pluginInter;
QString m_itemKey; QString m_itemKey;
Dock::DisplayMode m_displayMode; static Dock::DisplayMode m_displayMode;
Dock::Position m_position; static Dock::Position m_position;
QPoint m_mousePressPoint; QPoint m_mousePressPoint;
}; };