From f111b67df608b504b48c71f8a4661ff6e0fed6ce Mon Sep 17 00:00:00 2001 From: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Wed, 15 Sep 2021 14:44:27 -0700 Subject: [PATCH] Fix issue with one frame flicker in the transition between paint modes. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> --- .../Components/FancyDockingGhostWidget.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/FancyDockingGhostWidget.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Components/FancyDockingGhostWidget.cpp index 04387875df..5456356458 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/FancyDockingGhostWidget.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/FancyDockingGhostWidget.cpp @@ -48,7 +48,7 @@ namespace AzQtComponents void FancyDockingGhostWidget::setPixmap(const QPixmap& pixmap, const QRect& targetRect, QScreen* screen) { - const bool needsRepaint = m_pixmap.cacheKey() != pixmap.cacheKey() || m_clipToWidgets; + bool needsRepaint = m_pixmap.cacheKey() != pixmap.cacheKey() || m_clipToWidgets; m_pixmap = pixmap; if (pixmap.isNull() || targetRect.isNull() || !screen) @@ -80,6 +80,7 @@ namespace AzQtComponents QPoint midPoint = targetRect.topLeft() + QPoint(targetRect.width() / 2, targetRect.height() / 2); QScreen* pointScreen = QApplication::screenAt(midPoint); QRect rect(targetRect); + PaintMode paintMode = PaintMode::FULL; if (!pointScreen || pointScreen != screen) { @@ -87,26 +88,28 @@ namespace AzQtComponents { rect.setLeft(rect.left() - rect.width()); rect.setTop(rect.top() - rect.height()); - m_paintMode = PaintMode::BOTTOMRIGHT; + paintMode = PaintMode::BOTTOMRIGHT; } else { rect.setRight(rect.right() + rect.width()); rect.setTop(rect.top() - rect.height()); - m_paintMode = PaintMode::BOTTOMLEFT; + paintMode = PaintMode::BOTTOMLEFT; } } - else + + if (m_paintMode != paintMode) { - m_paintMode = PaintMode::FULL; + needsRepaint = true; } setGeometry(rect); + m_paintMode = paintMode; setPixmapVisible(true); if (needsRepaint) { - update(); + repaint(); } }