fix preview window size error

Change-Id: I0632673eb4b77579ef0eb74849e32e1f175e9d87
This commit is contained in:
石博文 2017-05-02 19:33:07 +08:00
parent 1ad9ac4c8d
commit 32253abbc0
Notes: Deepin Code Review 2017-05-02 20:30:51 +08:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Tue, 02 May 2017 20:30:49 +0800
Reviewed-on: https://cr.deepin.io/22748
Project: dde/dde-dock
Branch: refs/heads/master
4 changed files with 24 additions and 8 deletions

View File

@ -451,6 +451,7 @@ void AppItem::updateTitle()
{ {
m_titles = m_itemEntry->titles(); m_titles = m_itemEntry->titles();
// TODO: optimize
m_appPreviewTips->setWindowInfos(m_titles); m_appPreviewTips->setWindowInfos(m_titles);
update(); update();
@ -496,7 +497,8 @@ void AppItem::showPreview()
} }
m_appPreviewTips->updateLayoutDirection(DockPosition); m_appPreviewTips->updateLayoutDirection(DockPosition);
// m_appPreviewTips->setWindowInfos(m_titles);
qApp->processEvents();
showPopupWindow(m_appPreviewTips, true); showPopupWindow(m_appPreviewTips, true);
} }

View File

@ -37,6 +37,12 @@ void PreviewContainer::setWindowInfos(const WindowDict &infos)
m_windowListLayout->addWidget(w); m_windowListLayout->addWidget(w);
} }
if (!isVisible())
return;
// update geometry
QMetaObject::invokeMethod(this, "updateContainerSize", Qt::QueuedConnection);
} }
void PreviewContainer::updateLayoutDirection(const Dock::Position dockPos) void PreviewContainer::updateLayoutDirection(const Dock::Position dockPos)
@ -64,3 +70,8 @@ void PreviewContainer::leaveEvent(QEvent *e)
if (!rect().contains(p)) if (!rect().contains(p))
emit requestCancelPreview(); emit requestCancelPreview();
} }
void PreviewContainer::updateContainerSize()
{
resize(sizeHint());
}

View File

@ -29,6 +29,9 @@ public slots:
protected: protected:
void leaveEvent(QEvent *e); void leaveEvent(QEvent *e);
private slots:
void updateContainerSize();
private: private:
QBoxLayout *m_windowListLayout; QBoxLayout *m_windowListLayout;
}; };

View File

@ -9,9 +9,9 @@
#include <QTimer> #include <QTimer>
#include <QVBoxLayout> #include <QVBoxLayout>
#define W 200 #define PREVIEW_W 200
#define H 130 #define PREVIEW_H 130
#define M 8 #define PREVIEW_M 8
PreviewWidget::PreviewWidget(const WId wid, QWidget *parent) PreviewWidget::PreviewWidget(const WId wid, QWidget *parent)
: QWidget(parent), : QWidget(parent),
@ -34,7 +34,7 @@ PreviewWidget::PreviewWidget(const WId wid, QWidget *parent)
centralLayout->addWidget(m_closeButton); centralLayout->addWidget(m_closeButton);
centralLayout->setAlignment(m_closeButton, Qt::AlignTop | Qt::AlignRight); 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); setLayout(centralLayout);
setAcceptDrops(true); setAcceptDrops(true);
@ -57,8 +57,8 @@ void PreviewWidget::refershImage()
XImage *ximage = XGetImage(display, m_wid, 0, 0, attrs.width, attrs.height, AllPlanes, ZPixmap); 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); 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 = qimage.scaled(PREVIEW_W, PREVIEW_H, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
m_image = m_image.copy((m_image.width() - W) / 2, (m_image.height() - H) / 2, W, H); m_image = m_image.copy((m_image.width() - PREVIEW_W) / 2, (m_image.height() - PREVIEW_H) / 2, PREVIEW_W, PREVIEW_H);
XDestroyImage(ximage); XDestroyImage(ximage);
update(); update();
@ -93,7 +93,7 @@ void PreviewWidget::setVisible(const bool visible)
void PreviewWidget::paintEvent(QPaintEvent *e) 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); QPainter painter(this);