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;
QuickSettingContainer::setPosition(position);
QuickDockItem::setPosition(position);
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
m_mainLayout->setDirection(QBoxLayout::RightToLeft);
m_mainLayout->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
@ -169,19 +170,27 @@ QSize QuickPluginWindow::suitableSize() const
QSize QuickPluginWindow::suitableSize(const Dock::Position &position) const
{
if (position == Dock::Position::Top || position == Dock::Position::Bottom)
return QSize((ITEMSPACE + ICONWIDTH) * m_mainLayout->count() + ITEMSPACE, ITEMSIZE);
if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
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;
int itemCount = m_mainLayout->count();
if (itemCount > 0) {
// 每个图标占据的高度
height += ICONHEIGHT * itemCount;
// 图标间距占据的高度
height += ITEMSPACE * itemCount;
return QSize(itemWidth, ITEMSIZE);
}
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)
@ -346,13 +355,8 @@ void QuickPluginWindow::onRequestUpdate()
if (pluginItems.contains(item)) {
itemWidget = pluginItems[item];
} 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->setFixedSize(ICONWIDTH, ICONHEIGHT);
itemWidget->setFixedSize(itemWidget->suitableSize());
itemWidget->installEventFilter(this);
itemWidget->setMouseTracking(true);
countChanged = true;
@ -409,9 +413,11 @@ void QuickPluginWindow::onUpdatePlugin(PluginsItemInterface *itemInter, const Do
if (dockPart != DockPart::QuickShow)
return;
QuickDockItem *dockItem = getDockItemByPlugin(itemInter);
if (dockItem)
dockItem->update();
QuickDockItem *quickDockItem = getDockItemByPlugin(itemInter);
if (quickDockItem) {
quickDockItem->setFixedSize(quickDockItem->suitableSize());
quickDockItem->update();
}
}
void QuickPluginWindow::onRequestAppletShow(PluginsItemInterface *itemInter, const QString &itemKey)
@ -591,11 +597,13 @@ void QuickPluginWindow::initConnection()
* @param pluginItem
* @param parent
*/
Dock::Position QuickDockItem::m_position(Dock::Position::Bottom);
QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent)
: QWidget(parent)
, m_pluginItem(pluginItem)
, m_itemKey(itemKey)
, m_position(Dock::Position::Bottom)
, m_popupWindow(new DockPopupWindow)
, m_contextMenu(new QMenu(this))
, m_tipParent(nullptr)
@ -616,6 +624,11 @@ QuickDockItem::~QuickDockItem()
m_popupWindow->deleteLater();
}
void QuickDockItem::setPosition(Dock::Position position)
{
m_position = position;
}
PluginsItemInterface *QuickDockItem::pluginItem()
{
return m_pluginItem;
@ -631,6 +644,37 @@ void QuickDockItem::hideToolTip()
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)
{
if (!m_pluginItem)

View File

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