VirtualBox

Changeset 47058 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jul 9, 2013 4:18:57 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
87102
Message:

FE/Qt: QImage frame-buffer: Do not clear part of painted region which will be repainted anyway.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp

    r46364 r47058  
    226226    QPainter painter(m_pMachineView->viewport());
    227227
    228     /* Clear paint rectangle first: */
    229     painter.setCompositionMode(QPainter::CompositionMode_Clear);
    230     painter.eraseRect(paintRect);
    231     painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
    232 
    233     /* Manually clip paint rectangle using visible-region: */
     228    /* Determine the region to erase: */
    234229    lock();
    235     QRegion visiblePaintRegion = m_syncVisibleRegion & paintRect;
     230    QRegion regionToErase = (QRegion)paintRect - m_syncVisibleRegion;
    236231    unlock();
    237 
    238     /* Repaint all the rectangles of visible-region: */
    239     foreach (const QRect &rect, visiblePaintRegion.rects())
    240     {
     232    if (!regionToErase.isEmpty())
     233    {
     234        /* Optimize composition-mode: */
     235        painter.setCompositionMode(QPainter::CompositionMode_Clear);
     236        /* Erase required region, slowly, rectangle-by-rectangle: */
     237        foreach (const QRect &rect, regionToErase.rects())
     238            painter.eraseRect(rect);
     239        /* Restore composition-mode: */
     240        painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
     241    }
     242
     243    /* Determine the region to paint: */
     244    lock();
     245    QRegion regionToPaint = (QRegion)paintRect & m_syncVisibleRegion;
     246    unlock();
     247    if (!regionToPaint.isEmpty())
     248    {
     249        /* Paint required region, slowly, rectangle-by-rectangle: */
     250        foreach (const QRect &rect, regionToPaint.rects())
     251        {
    241252#ifdef Q_WS_WIN
    242         /* Replace translucent background with black one,
    243          * that is necessary for window with Qt::WA_TranslucentBackground: */
    244         painter.setCompositionMode(QPainter::CompositionMode_Source);
    245         painter.fillRect(rect, QColor(Qt::black));
    246         painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
     253            /* Replace translucent background with black one,
     254             * that is necessary for window with Qt::WA_TranslucentBackground: */
     255            painter.setCompositionMode(QPainter::CompositionMode_Source);
     256            painter.fillRect(rect, QColor(Qt::black));
     257            painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
    247258#endif /* Q_WS_WIN */
    248259
    249         /* Draw image rectangle depending on rectangle width: */
    250         if ((ulong)rect.width() < m_width * 2 / 3)
    251             drawImageRectNarrow(painter, m_img,
    252                                 rect, m_pMachineView->contentsX(), m_pMachineView->contentsY());
    253         else
    254             drawImageRectWide(painter, m_img,
    255                               rect, m_pMachineView->contentsX(), m_pMachineView->contentsY());
     260            /* Draw image rectangle depending on rectangle width: */
     261            if ((ulong)rect.width() < m_width * 2 / 3)
     262                drawImageRectNarrow(painter, m_img,
     263                                    rect, m_pMachineView->contentsX(), m_pMachineView->contentsY());
     264            else
     265                drawImageRectWide(painter, m_img,
     266                                  rect, m_pMachineView->contentsX(), m_pMachineView->contentsY());
     267        }
    256268    }
    257269}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette