feat(dde-dock): change the plugins logic for task 13189

This commit is contained in:
wangxuwen 2020-01-06 14:27:22 +08:00
parent 0a268da426
commit 1212175e55
2 changed files with 43 additions and 31 deletions

View File

@ -777,16 +777,18 @@ void MainPanelControl::resizeDockIcon()
// 插件有点特殊因为会引入第三方的插件并不会受dock的缩放影响我们只能限制我们自己的插件否则会导致显示错误。 // 插件有点特殊因为会引入第三方的插件并不会受dock的缩放影响我们只能限制我们自己的插件否则会导致显示错误。
// 以下是受控制的插件 // 以下是受控制的插件
PluginsItem *trashPlugin = nullptr; PluginsItem *trashPlugin = nullptr;
PluginsItem *shutdownPlugin = nullptr; int pluginTotalWidth = 0;
PluginsItem *keyboardPlugin = nullptr; int pluginTotalHeight = 0;
int count = 0; //计算除时间和垃圾箱之外的插件个数
for (int i = 0; i < m_pluginLayout->count(); ++ i) { for (int i = 0; i < m_pluginLayout->count(); ++ i) {
PluginsItem *w = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget()); PluginsItem *w = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget());
if (w->pluginName() == "trash") { if (w->pluginName() == "trash") {
trashPlugin = w; trashPlugin = w;
} else if (w->pluginName() == "shutdown") { } else if (w->pluginName() == "datetime") {
shutdownPlugin = w; } else {
} else if (w->pluginName() == "onboard") { pluginTotalWidth += w->width();
keyboardPlugin = w; pluginTotalHeight += w->height();
count++;
} }
} }
@ -803,14 +805,12 @@ void MainPanelControl::resizeDockIcon()
if ((m_position == Position::Top) || (m_position == Position::Bottom)) { if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
totalLength -= m_pluginAreaWidget->width(); totalLength -= m_pluginAreaWidget->width();
if (trashPlugin) totalLength += trashPlugin->width(); if (trashPlugin) totalLength += trashPlugin->width();
if (shutdownPlugin) totalLength += shutdownPlugin->width(); totalLength += pluginTotalWidth;
if (keyboardPlugin) totalLength += keyboardPlugin->width();
totalLength -= m_desktopWidget->width(); totalLength -= m_desktopWidget->width();
} else { } else {
totalLength -= m_pluginAreaWidget->height(); totalLength -= m_pluginAreaWidget->height();
if (trashPlugin) totalLength += trashPlugin->height(); if (trashPlugin) totalLength += trashPlugin->height();
if (shutdownPlugin) totalLength += shutdownPlugin->height(); totalLength += pluginTotalHeight;
if (keyboardPlugin) totalLength += keyboardPlugin->height();
totalLength -= m_desktopWidget->height(); totalLength -= m_desktopWidget->height();
} }
@ -818,7 +818,7 @@ void MainPanelControl::resizeDockIcon()
return; return;
// 参与计算的插件的个数(包含托盘和插件,垃圾桶,关机,屏幕键盘) // 参与计算的插件的个数(包含托盘和插件,垃圾桶,关机,屏幕键盘)
int pluginCount = m_tray->trayVisableItemCount() + (trashPlugin ? 1 : 0) + (shutdownPlugin ? 1 : 0) + (keyboardPlugin ? 1 : 0); int pluginCount = m_tray->trayVisableItemCount() + (trashPlugin ? 1 : 0) + count;
// icon个数 // icon个数
int iconCount = m_fixedAreaLayout->count() + m_appAreaSonLayout->count() + pluginCount; int iconCount = m_fixedAreaLayout->count() + m_appAreaSonLayout->count() + pluginCount;
@ -848,20 +848,20 @@ void MainPanelControl::resizeDockIcon()
if ((m_position == Position::Top) || (m_position == Position::Bottom)) { if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
if (iconSize >= height()) { if (iconSize >= height()) {
calcuDockIconSize(height(), height(), trashPlugin, shutdownPlugin, keyboardPlugin); calcuDockIconSize(height(), height());
} else { } else {
calcuDockIconSize(iconSize, height(), trashPlugin, shutdownPlugin, keyboardPlugin); calcuDockIconSize(iconSize, height());
} }
} else { } else {
if (iconSize >= width()) { if (iconSize >= width()) {
calcuDockIconSize(width(), width(), trashPlugin, shutdownPlugin, keyboardPlugin); calcuDockIconSize(width(), width());
} else { } else {
calcuDockIconSize(width(), iconSize, trashPlugin, shutdownPlugin, keyboardPlugin); calcuDockIconSize(width(), iconSize);
} }
} }
} }
void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin, PluginsItem *shutdownPlugin, PluginsItem *keyboardPlugin) void MainPanelControl::calcuDockIconSize(int w, int h)
{ {
for (int i = 0; i < m_fixedAreaLayout->count(); ++ i) { for (int i = 0; i < m_fixedAreaLayout->count(); ++ i) {
m_fixedAreaLayout->itemAt(i)->widget()->setFixedSize(w, h); m_fixedAreaLayout->itemAt(i)->widget()->setFixedSize(w, h);
@ -871,9 +871,14 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
m_fixedSpliter->setFixedSize(SPLITER_SIZE, int(w * 0.6)); m_fixedSpliter->setFixedSize(SPLITER_SIZE, int(w * 0.6));
m_appSpliter->setFixedSize(SPLITER_SIZE, int(w * 0.6)); m_appSpliter->setFixedSize(SPLITER_SIZE, int(w * 0.6));
m_traySpliter->setFixedSize(SPLITER_SIZE, int(w * 0.5)); m_traySpliter->setFixedSize(SPLITER_SIZE, int(w * 0.5));
// 垃圾桶 // 垃圾桶
if (trashPlugin) for (int i = 0; i < m_pluginLayout->count(); ++ i) {
trashPlugin->setFixedSize(std::min(w, h - 20), h - 20); PluginsItem *pluginItem = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget());
if (pluginItem->pluginName() == "trash"){
pluginItem->setFixedSize(std::min(w, h - 20), h - 20);
}
}
for (int i = 0; i < m_appAreaSonLayout->count(); ++ i) { for (int i = 0; i < m_appAreaSonLayout->count(); ++ i) {
m_appAreaSonLayout->itemAt(i)->widget()->setMaximumWidth(h); m_appAreaSonLayout->itemAt(i)->widget()->setMaximumWidth(h);
@ -884,10 +889,14 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
m_fixedSpliter->setFixedSize(int(h * 0.6), SPLITER_SIZE); m_fixedSpliter->setFixedSize(int(h * 0.6), SPLITER_SIZE);
m_appSpliter->setFixedSize(int(h * 0.6), SPLITER_SIZE); m_appSpliter->setFixedSize(int(h * 0.6), SPLITER_SIZE);
m_traySpliter->setFixedSize(int(h * 0.5), SPLITER_SIZE); m_traySpliter->setFixedSize(int(h * 0.5), SPLITER_SIZE);
// 垃圾桶
if (trashPlugin)
trashPlugin->setFixedSize(w - 20, std::min(w - 20, h));
// 垃圾桶
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
PluginsItem *pluginItem = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget());
if (pluginItem->pluginName() == "trash"){
pluginItem->setFixedSize(w - 20, std::min(w - 20, h));
}
}
for (int i = 0; i < m_appAreaSonLayout->count(); ++ i) { for (int i = 0; i < m_appAreaSonLayout->count(); ++ i) {
m_appAreaSonLayout->itemAt(i)->widget()->setMaximumHeight(w); m_appAreaSonLayout->itemAt(i)->widget()->setMaximumHeight(w);
@ -915,17 +924,20 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
m_tray->centralWidget()->setProperty("iconSize", tray_item_size); m_tray->centralWidget()->setProperty("iconSize", tray_item_size);
// 插件 // 插件
if (shutdownPlugin) for (int i = 0; i < m_pluginLayout->count(); ++ i) {
shutdownPlugin->setFixedSize(tray_item_size, h - 20); PluginsItem *pluginItem = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget());
if (keyboardPlugin) if (pluginItem->pluginName() != "trash" && pluginItem->pluginName() != "datetime"){
keyboardPlugin->setFixedSize(tray_item_size, h - 20); pluginItem->setFixedSize(tray_item_size, h - 20);
}
}
} else { } else {
m_tray->centralWidget()->setProperty("iconSize", tray_item_size); m_tray->centralWidget()->setProperty("iconSize", tray_item_size);
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
if (shutdownPlugin) PluginsItem *pluginItem = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget());
shutdownPlugin->setFixedSize(w - 20, tray_item_size); if (pluginItem->pluginName() != "trash" && pluginItem->pluginName() != "datetime"){
if (keyboardPlugin) pluginItem->setFixedSize(w - 20, tray_item_size);
keyboardPlugin->setFixedSize(w - 20, tray_item_size); }
}
} }
} }

View File

@ -90,7 +90,7 @@ private:
void handleDragMove(QDragMoveEvent *e, bool isFilter); void handleDragMove(QDragMoveEvent *e, bool isFilter);
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;
void resizeDockIcon(); void resizeDockIcon();
void calcuDockIconSize(const int w, const int h, PluginsItem *trashPlugin, PluginsItem *shutdownPlugin, PluginsItem *keyboardPlugin); void calcuDockIconSize(const int w, const int h);
public slots: public slots:
void insertItem(const int index, DockItem *item); void insertItem(const int index, DockItem *item);