From 32253abbc095be8c043b977d7a04731be457426a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Tue, 2 May 2017 19:33:07 +0800 Subject: [PATCH] fix preview window size error Change-Id: I0632673eb4b77579ef0eb74849e32e1f175e9d87 --- frame/item/appitem.cpp | 4 +++- frame/item/components/previewcontainer.cpp | 11 +++++++++++ frame/item/components/previewcontainer.h | 3 +++ frame/item/components/previewwidget.cpp | 14 +++++++------- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 3f79980fa..f1f1ac0c8 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -451,6 +451,7 @@ void AppItem::updateTitle() { m_titles = m_itemEntry->titles(); + // TODO: optimize m_appPreviewTips->setWindowInfos(m_titles); update(); @@ -496,7 +497,8 @@ void AppItem::showPreview() } m_appPreviewTips->updateLayoutDirection(DockPosition); -// m_appPreviewTips->setWindowInfos(m_titles); + + qApp->processEvents(); showPopupWindow(m_appPreviewTips, true); } diff --git a/frame/item/components/previewcontainer.cpp b/frame/item/components/previewcontainer.cpp index 0ca53cd78..48a75d8b1 100644 --- a/frame/item/components/previewcontainer.cpp +++ b/frame/item/components/previewcontainer.cpp @@ -37,6 +37,12 @@ void PreviewContainer::setWindowInfos(const WindowDict &infos) m_windowListLayout->addWidget(w); } + + if (!isVisible()) + return; + + // update geometry + QMetaObject::invokeMethod(this, "updateContainerSize", Qt::QueuedConnection); } void PreviewContainer::updateLayoutDirection(const Dock::Position dockPos) @@ -64,3 +70,8 @@ void PreviewContainer::leaveEvent(QEvent *e) if (!rect().contains(p)) emit requestCancelPreview(); } + +void PreviewContainer::updateContainerSize() +{ + resize(sizeHint()); +} diff --git a/frame/item/components/previewcontainer.h b/frame/item/components/previewcontainer.h index 5af7f9f75..3faef8f78 100644 --- a/frame/item/components/previewcontainer.h +++ b/frame/item/components/previewcontainer.h @@ -29,6 +29,9 @@ public slots: protected: void leaveEvent(QEvent *e); +private slots: + void updateContainerSize(); + private: QBoxLayout *m_windowListLayout; }; diff --git a/frame/item/components/previewwidget.cpp b/frame/item/components/previewwidget.cpp index f18a9121d..a03a25938 100644 --- a/frame/item/components/previewwidget.cpp +++ b/frame/item/components/previewwidget.cpp @@ -9,9 +9,9 @@ #include #include -#define W 200 -#define H 130 -#define M 8 +#define PREVIEW_W 200 +#define PREVIEW_H 130 +#define PREVIEW_M 8 PreviewWidget::PreviewWidget(const WId wid, QWidget *parent) : QWidget(parent), @@ -34,7 +34,7 @@ PreviewWidget::PreviewWidget(const WId wid, QWidget *parent) centralLayout->addWidget(m_closeButton); centralLayout->setAlignment(m_closeButton, Qt::AlignTop | Qt::AlignRight); - setFixedSize(W + M * 2, H + M * 2); + setFixedSize(PREVIEW_W + PREVIEW_M * 2, PREVIEW_H + PREVIEW_M * 2); setLayout(centralLayout); setAcceptDrops(true); @@ -57,8 +57,8 @@ void PreviewWidget::refershImage() XImage *ximage = XGetImage(display, m_wid, 0, 0, attrs.width, attrs.height, AllPlanes, ZPixmap); const QImage qimage((const uchar*)(ximage->data), ximage->width, ximage->height, ximage->bytes_per_line, QImage::Format_RGB32); - m_image = qimage.scaled(W, H, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); - m_image = m_image.copy((m_image.width() - W) / 2, (m_image.height() - H) / 2, W, H); + m_image = qimage.scaled(PREVIEW_W, PREVIEW_H, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); + m_image = m_image.copy((m_image.width() - PREVIEW_W) / 2, (m_image.height() - PREVIEW_H) / 2, PREVIEW_W, PREVIEW_H); XDestroyImage(ximage); update(); @@ -93,7 +93,7 @@ void PreviewWidget::setVisible(const bool visible) void PreviewWidget::paintEvent(QPaintEvent *e) { - const QRect r = rect().marginsRemoved(QMargins(M, M, M, M)); + const QRect r = rect().marginsRemoved(QMargins(PREVIEW_M, PREVIEW_M, PREVIEW_M, PREVIEW_M)); QPainter painter(this);