feat:only control owner plugin

This commit is contained in:
shaojun 2019-11-04 17:22:34 +08:00
parent 76d9ac05fc
commit eae9def647
6 changed files with 38 additions and 71 deletions

View File

@ -718,15 +718,19 @@ void MainPanelControl::resizeDockIcon()
{
if (!m_tray)
return;
PluginsItem *timePlugin = nullptr;
// 插件有点特殊因为会引入第三方的插件并不会受dock的缩放影响我们只能限制我们自己的插件否则会导致显示错误。
// 以下是受控制的插件
PluginsItem *trashPlugin = nullptr;
PluginsItem *shutdownPlugin = nullptr;
PluginsItem *keyboardPlugin = nullptr;
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
PluginsItem *w = static_cast<PluginsItem *>(m_pluginLayout->itemAt(i)->widget());
if (w->pluginName() == "datetime") {
timePlugin = w;
} else if (w->pluginName() == "trash") {
if (w->pluginName() == "trash") {
trashPlugin = w;
} else if (w->pluginName() == "shutdown") {
shutdownPlugin = w;
} else if (w->pluginName() == "onboard") {
keyboardPlugin = w;
}
}
@ -739,17 +743,24 @@ void MainPanelControl::resizeDockIcon()
// 减去3个分割线的宽度
totalLength -= 3 * SPLITER_SIZE;
// 减去时间控件的宽度
if ((m_position == Position::Top) || (m_position == Position::Bottom))
totalLength -= (timePlugin ? timePlugin->centralWidget()->sizeHint().width() : 0);
else
totalLength -= (timePlugin ? timePlugin->centralWidget()->sizeHint().height() : 0);
// 减去所有插件宽度加上参与计算的3个插件宽度
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
totalLength -= m_pluginAreaWidget->width();
if (trashPlugin) totalLength += trashPlugin->width();
if (shutdownPlugin) totalLength += shutdownPlugin->width();
if (keyboardPlugin) totalLength += keyboardPlugin->width();
} else {
totalLength -= m_pluginAreaWidget->height();
if (trashPlugin) totalLength += trashPlugin->height();
if (shutdownPlugin) totalLength += shutdownPlugin->height();
if (keyboardPlugin) totalLength += keyboardPlugin->height();
}
if (totalLength < 0)
return;
// 插件的个数(包含托盘和插件,减去时间控件,减去垃圾桶)
int pluginCount = m_tray->trayVisableItemCount() + (m_pluginLayout->count() - (timePlugin ? 1 : 0) - (trashPlugin ? 1 : 0));
// 参与计算的插件的个数(包含托盘和插件,垃圾桶,关机,屏幕键盘
int pluginCount = m_tray->trayVisableItemCount() + (trashPlugin ? 1 : 0) + (shutdownPlugin ? 1 : 0) + (keyboardPlugin ? 1 : 0);
// icon个数
int iconCount = m_fixedAreaLayout->count() + m_appAreaSonLayout->count() + pluginCount;
@ -779,20 +790,20 @@ void MainPanelControl::resizeDockIcon()
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
if (iconSize >= height()) {
calcuDockIconSize(height(), height(), timePlugin, trashPlugin);
calcuDockIconSize(height(), height(), trashPlugin, shutdownPlugin, keyboardPlugin);
} else {
calcuDockIconSize(iconSize, height(), timePlugin, trashPlugin);
calcuDockIconSize(iconSize, height(), trashPlugin, shutdownPlugin, keyboardPlugin);
}
} else {
if (iconSize >= width()) {
calcuDockIconSize(width(), width(), timePlugin, trashPlugin);
calcuDockIconSize(width(), width(), trashPlugin, shutdownPlugin, keyboardPlugin);
} else {
calcuDockIconSize(width(), iconSize, timePlugin, trashPlugin);
calcuDockIconSize(width(), iconSize, trashPlugin, shutdownPlugin, keyboardPlugin);
}
}
}
void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *timePlugin, PluginsItem *trashPlugin)
void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin, PluginsItem *shutdownPlugin, PluginsItem *keyboardPlugin)
{
for (int i = 0; i < m_fixedAreaLayout->count(); ++ i) {
m_fixedAreaLayout->itemAt(i)->widget()->setFixedSize(w, h);
@ -806,7 +817,6 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *timePlugin,
if (trashPlugin)
trashPlugin->setFixedSize(std::min(w, h - 20), h - 20);
for (int i = 0; i < m_appAreaSonLayout->count(); ++ i) {
m_appAreaSonLayout->itemAt(i)->widget()->setMaximumWidth(h);
m_appAreaSonLayout->itemAt(i)->widget()->setMaximumHeight(QWIDGETSIZE_MAX);
@ -843,26 +853,21 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *timePlugin,
if (tray_item_size < 20)
return;
int pluginCount = (m_pluginLayout->count() - (timePlugin ? 1 : 0) - (trashPlugin ? 1 : 0));
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
m_tray->centralWidget()->setProperty("iconSize", tray_item_size);
// 插件区域宽度
int timeWidth = timePlugin ? timePlugin->centralWidget()->sizeHint().width() + 10 : 0;
int trashWidth = trashPlugin ? trashPlugin->width() + 10 : 0;
m_pluginAreaWidget->setFixedWidth((tray_item_size + 10)*pluginCount + timeWidth + trashWidth + 10);
m_pluginAreaWidget->setFixedHeight(h);
// 插件
if (shutdownPlugin)
shutdownPlugin->setFixedSize(tray_item_size, h - 20);
if (keyboardPlugin)
keyboardPlugin->setFixedSize(tray_item_size, h - 20);
} else {
m_tray->centralWidget()->setProperty("iconSize", tray_item_size);
int timeHeight = timePlugin ? timePlugin->centralWidget()->sizeHint().height() + 10 : 0;
int trashHeight = trashPlugin ? trashPlugin->height() + 10 : 0;
m_pluginAreaWidget->setFixedWidth(w);
m_pluginAreaWidget->setFixedHeight((tray_item_size + 10)*pluginCount + timeHeight + trashHeight + 10);
if (shutdownPlugin)
shutdownPlugin->setFixedSize(w - 20, tray_item_size);
if (keyboardPlugin)
keyboardPlugin->setFixedSize(w - 20, tray_item_size);
}
}

View File

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

View File

@ -46,11 +46,6 @@ OnboardItem::OnboardItem(QWidget *parent)
m_icon = QIcon::fromTheme(":/icons/icon/deepin-virtualkeyboard.svg");
}
QSize OnboardItem::sizeHint() const
{
return QSize(PLUGIN_BACKGROUND_MAX_SIZE, PLUGIN_BACKGROUND_MAX_SIZE);
}
void OnboardItem::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e);
@ -158,15 +153,5 @@ void OnboardItem::leaveEvent(QEvent *event)
void OnboardItem::resizeEvent(QResizeEvent *event)
{
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
// 保持横纵比
if (position == Dock::Bottom || position == Dock::Top) {
setMaximumWidth(height());
setMaximumHeight(QWIDGETSIZE_MAX);
} else {
setMaximumHeight(width());
setMaximumWidth(QWIDGETSIZE_MAX);
}
QWidget::resizeEvent(event);
}

View File

@ -35,7 +35,6 @@ public:
explicit OnboardItem(QWidget *parent = nullptr);
protected:
QSize sizeHint() const override;
void paintEvent(QPaintEvent *e) override;
private:

View File

@ -46,11 +46,6 @@ PluginWidget::PluginWidget(QWidget *parent)
m_icon = QIcon::fromTheme(":/icons/resources/icons/system-shutdown.svg");
}
QSize PluginWidget::sizeHint() const
{
return QSize(PLUGIN_BACKGROUND_MAX_SIZE, PLUGIN_BACKGROUND_MAX_SIZE);
}
void PluginWidget::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e);
@ -157,18 +152,3 @@ void PluginWidget::leaveEvent(QEvent *event)
QWidget::leaveEvent(event);
}
void PluginWidget::resizeEvent(QResizeEvent *event)
{
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
// 保持横纵比
if (position == Dock::Bottom || position == Dock::Top) {
setMaximumWidth(height());
setMaximumHeight(QWIDGETSIZE_MAX);
} else {
setMaximumHeight(width());
setMaximumWidth(QWIDGETSIZE_MAX);
}
QWidget::resizeEvent(event);
}

View File

@ -35,13 +35,11 @@ public:
explicit PluginWidget(QWidget *parent = 0);
protected:
QSize sizeHint() const override;
void paintEvent(QPaintEvent *e) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void leaveEvent(QEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
private:
const QPixmap loadSvg(const QString &fileName, const QSize &size) const;