fix: 修复截图插件显示尺寸问题

判断插件的尺寸如果是自定义,则设置为插件自己的尺寸

Log: 修复截图插件的显示问题
Influence: 截图-查看截图计时插件是否正常显示
Bug: https://pms.uniontech.com/bug-view-179083.html
Change-Id: Ia7f08f78429df68b045c074c3054aca388ae7ce4
This commit is contained in:
donghualin 2022-12-30 19:20:22 +08:00
parent 05a98ac8b7
commit 4cf80b7f32
2 changed files with 68 additions and 21 deletions

View File

@ -128,6 +128,7 @@ void QuickPluginWindow::setPositon(Position position)
m_position = position; m_position = position;
QuickSettingContainer::setPosition(position); QuickSettingContainer::setPosition(position);
QuickDockItem::setPosition(position);
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
m_mainLayout->setDirection(QBoxLayout::RightToLeft); m_mainLayout->setDirection(QBoxLayout::RightToLeft);
m_mainLayout->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_mainLayout->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
@ -169,19 +170,27 @@ QSize QuickPluginWindow::suitableSize() const
QSize QuickPluginWindow::suitableSize(const Dock::Position &position) const QSize QuickPluginWindow::suitableSize(const Dock::Position &position) const
{ {
if (position == Dock::Position::Top || position == Dock::Position::Bottom) if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
return QSize((ITEMSPACE + ICONWIDTH) * m_mainLayout->count() + ITEMSPACE, ITEMSIZE); int itemWidth = 0;
for (int i = 0; i < m_mainLayout->count(); i++) {
QWidget *itemWidget = m_mainLayout->itemAt(i)->widget();
if (itemWidget)
itemWidth += itemWidget->width() + ITEMSPACE;
}
itemWidth += ITEMSPACE;
int height = 0; return QSize(itemWidth, ITEMSIZE);
int itemCount = m_mainLayout->count();
if (itemCount > 0) {
// 每个图标占据的高度
height += ICONHEIGHT * itemCount;
// 图标间距占据的高度
height += ITEMSPACE * itemCount;
} }
return QSize(ITEMSIZE, height); int itemHeight = 0;
for (int i = 0; i < m_mainLayout->count(); i++) {
QWidget *itemWidget = m_mainLayout->itemAt(i)->widget();
if (itemWidget)
itemHeight += itemWidget->height() + ITEMSPACE;
}
itemHeight += ITEMSPACE;
return QSize(ITEMSIZE, itemHeight);
} }
PluginsItemInterface *QuickPluginWindow::findQuickSettingItem(const QPoint &mousePoint, const QList<PluginsItemInterface *> &settingItems) PluginsItemInterface *QuickPluginWindow::findQuickSettingItem(const QPoint &mousePoint, const QList<PluginsItemInterface *> &settingItems)
@ -346,13 +355,8 @@ void QuickPluginWindow::onRequestUpdate()
if (pluginItems.contains(item)) { if (pluginItems.contains(item)) {
itemWidget = pluginItems[item]; itemWidget = pluginItems[item];
} else { } else {
QJsonObject metaData;
QPluginLoader *pluginLoader = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginLoader(item);
if (pluginLoader)
metaData = pluginLoader->metaData().value("MetaData").toObject();
itemWidget = new QuickDockItem(item, quickController->itemKey(item), this); itemWidget = new QuickDockItem(item, quickController->itemKey(item), this);
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT); itemWidget->setFixedSize(itemWidget->suitableSize());
itemWidget->installEventFilter(this); itemWidget->installEventFilter(this);
itemWidget->setMouseTracking(true); itemWidget->setMouseTracking(true);
countChanged = true; countChanged = true;
@ -409,9 +413,11 @@ void QuickPluginWindow::onUpdatePlugin(PluginsItemInterface *itemInter, const Do
if (dockPart != DockPart::QuickShow) if (dockPart != DockPart::QuickShow)
return; return;
QuickDockItem *dockItem = getDockItemByPlugin(itemInter); QuickDockItem *quickDockItem = getDockItemByPlugin(itemInter);
if (dockItem) if (quickDockItem) {
dockItem->update(); quickDockItem->setFixedSize(quickDockItem->suitableSize());
quickDockItem->update();
}
} }
void QuickPluginWindow::onRequestAppletShow(PluginsItemInterface *itemInter, const QString &itemKey) void QuickPluginWindow::onRequestAppletShow(PluginsItemInterface *itemInter, const QString &itemKey)
@ -591,11 +597,13 @@ void QuickPluginWindow::initConnection()
* @param pluginItem * @param pluginItem
* @param parent * @param parent
*/ */
Dock::Position QuickDockItem::m_position(Dock::Position::Bottom);
QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent) QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent)
: QWidget(parent) : QWidget(parent)
, m_pluginItem(pluginItem) , m_pluginItem(pluginItem)
, m_itemKey(itemKey) , m_itemKey(itemKey)
, m_position(Dock::Position::Bottom)
, m_popupWindow(new DockPopupWindow) , m_popupWindow(new DockPopupWindow)
, m_contextMenu(new QMenu(this)) , m_contextMenu(new QMenu(this))
, m_tipParent(nullptr) , m_tipParent(nullptr)
@ -616,6 +624,11 @@ QuickDockItem::~QuickDockItem()
m_popupWindow->deleteLater(); m_popupWindow->deleteLater();
} }
void QuickDockItem::setPosition(Dock::Position position)
{
m_position = position;
}
PluginsItemInterface *QuickDockItem::pluginItem() PluginsItemInterface *QuickDockItem::pluginItem()
{ {
return m_pluginItem; return m_pluginItem;
@ -631,6 +644,37 @@ void QuickDockItem::hideToolTip()
m_popupWindow->hide(); m_popupWindow->hide();
} }
QSize QuickDockItem::suitableSize() const
{
if (m_pluginItem->pluginSizePolicy() == PluginsItemInterface::PluginSizePolicy::Custom) {
QPixmap pixmap = iconPixmap();
if (!pixmap.isNull())
return pixmap.size();
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
if (itemWidget) {
int itemWidth = ICONWIDTH;
int itemHeight = ICONHEIGHT;
QSize itemSize = itemWidget->sizeHint();
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
if (itemSize.width() > 0)
itemWidth = itemSize.width();
if (itemSize.height() > 0 && itemSize.height() <= topLevelWidget()->height())
itemHeight = itemSize.height();
} else {
if (itemSize.width() > 0 && itemSize.width() < topLevelWidget()->width())
itemWidth = itemSize.width();
if (itemSize.height() > 0 && itemSize.height() < ICONHEIGHT)
itemHeight = itemSize.height();
}
return QSize(itemWidth, itemHeight);
}
}
return QSize(ICONWIDTH, ICONHEIGHT);
}
void QuickDockItem::paintEvent(QPaintEvent *event) void QuickDockItem::paintEvent(QPaintEvent *event)
{ {
if (!m_pluginItem) if (!m_pluginItem)

View File

@ -100,10 +100,13 @@ public:
explicit QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent = nullptr); explicit QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent = nullptr);
~QuickDockItem(); ~QuickDockItem();
static void setPosition(Dock::Position position);
PluginsItemInterface *pluginItem(); PluginsItemInterface *pluginItem();
bool canInsert() const; bool canInsert() const;
void hideToolTip(); void hideToolTip();
QSize suitableSize() const;
protected: protected:
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override;
@ -129,7 +132,7 @@ private Q_SLOTS:
private: private:
PluginsItemInterface *m_pluginItem; PluginsItemInterface *m_pluginItem;
QString m_itemKey; QString m_itemKey;
Dock::Position m_position; static Dock::Position m_position;
DockPopupWindow *m_popupWindow; DockPopupWindow *m_popupWindow;
QMenu *m_contextMenu; QMenu *m_contextMenu;
QWidget *m_tipParent; QWidget *m_tipParent;