VirtualBox

Changeset 54100 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Feb 6, 2015 3:00:48 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
98066
Message:

FE/Qt: Runtime UI: UIFrameBuffer refactoring for 6278 and 3635 (step 1).

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h

    r53964 r54100  
    19061906    }
    19071907
    1908     void resizeEvent(int iWidth, int iHeight)
    1909     {
    1910         UIFrameBuffer::resizeEvent(iWidth, iHeight);
     1908    void performResize(int iWidth, int iHeight)
     1909    {
     1910        UIFrameBuffer::performResize(iWidth, iHeight);
    19111911        mOverlay.onResizeEventPostprocess(VBoxFBSizeInfo(this),
    19121912                QPoint(mpView->contentsX(), mpView->contentsY()));
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp

    r53964 r54100  
    9393
    9494    /* Resize frame-buffer to default size: */
    95     resizeEvent(640, 480);
     95    performResize(640, 480);
    9696
    9797#ifdef Q_OS_WIN
     
    571571}
    572572
    573 void UIFrameBuffer::notifyChange(int iWidth, int iHeight)
    574 {
    575     LogRel(("UIFrameBuffer::notifyChange: Size=%dx%d\n", iWidth, iHeight));
     573void UIFrameBuffer::handleNotifyChange(int iWidth, int iHeight)
     574{
     575    LogRel(("UIFrameBuffer::handleNotifyChange: Size=%dx%d\n", iWidth, iHeight));
    576576
    577577    /* Make sure machine-view is assigned: */
     
    585585    {
    586586        /* Do nothing, change-event already processed: */
    587         LogRel2(("UIFrameBuffer::notifyChange: Already processed.\n"));
     587        LogRel2(("UIFrameBuffer::handleNotifyChange: Already processed.\n"));
    588588        /* Unlock access to frame-buffer: */
    589589        unlock();
     
    600600
    601601    /* Perform frame-buffer resize: */
    602     resizeEvent(iWidth, iHeight);
    603 }
    604 
    605 void UIFrameBuffer::resizeEvent(int iWidth, int iHeight)
    606 {
    607     LogRel(("UIFrameBuffer::resizeEvent: Size=%dx%d\n", iWidth, iHeight));
     602    performResize(iWidth, iHeight);
     603}
     604
     605void UIFrameBuffer::handlePaintEvent(QPaintEvent *pEvent)
     606{
     607    LogRel2(("UIFrameBuffer::handlePaintEvent: Origin=%lux%lu, Size=%dx%d\n",
     608             pEvent->rect().x(), pEvent->rect().y(),
     609             pEvent->rect().width(), pEvent->rect().height()));
     610
     611    /* On mode switch the enqueued paint-event may still come
     612     * while the machine-view is already null (before the new machine-view set),
     613     * ignore paint-event in that case. */
     614    if (!m_pMachineView)
     615        return;
     616
     617    /* Lock access to frame-buffer: */
     618    lock();
     619
     620    /* But if updates disabled: */
     621    if (!m_fUpdatesAllowed)
     622    {
     623        /* Unlock access to frame-buffer: */
     624        unlock();
     625        /* And return immediately: */
     626        return;
     627    }
     628
     629    /* Depending on visual-state type: */
     630    switch (m_pMachineView->machineLogic()->visualStateType())
     631    {
     632        case UIVisualStateType_Seamless:
     633            paintSeamless(pEvent);
     634            break;
     635        default:
     636            paintDefault(pEvent);
     637            break;
     638    }
     639
     640    /* Unlock access to frame-buffer: */
     641    unlock();
     642}
     643
     644void UIFrameBuffer::handleSetVisibleRegion(const QRegion &region)
     645{
     646    /* Make sure async visible-region has changed: */
     647    if (m_asyncVisibleRegion == region)
     648        return;
     649
     650    /* We are accounting async visible-regions one-by-one
     651     * to keep corresponding viewport area always updated! */
     652    if (!m_asyncVisibleRegion.isEmpty())
     653        m_pMachineView->viewport()->update(m_asyncVisibleRegion - region);
     654
     655    /* Remember last visible region: */
     656    m_asyncVisibleRegion = region;
     657
     658#ifdef VBOX_WITH_MASKED_SEAMLESS
     659    /* We have to use async visible-region to apply to [Q]Widget [set]Mask: */
     660    m_pMachineView->machineWindow()->setMask(m_asyncVisibleRegion);
     661#endif /* VBOX_WITH_MASKED_SEAMLESS */
     662}
     663
     664void UIFrameBuffer::performResize(int iWidth, int iHeight)
     665{
     666    LogRel(("UIFrameBuffer::performResize: Size=%dx%d\n", iWidth, iHeight));
    608667
    609668    /* Make sure machine-view is assigned: */
     
    623682    if (m_sourceBitmap.isNull())
    624683    {
    625         LogRel(("UIFrameBuffer::resizeEvent: "
     684        LogRel(("UIFrameBuffer::performResize: "
    626685                "Using FALLBACK buffer due to source-bitmap is not provided..\n"));
    627686
     
    637696    else
    638697    {
    639         LogRel(("UIFrameBuffer::resizeEvent: "
     698        LogRel(("UIFrameBuffer::performResize: "
    640699                "Directly using source-bitmap content\n"));
    641700
     
    667726        LONG yOrigin = 0;
    668727        KGuestMonitorStatus monitorStatus = KGuestMonitorStatus_Enabled;
    669         CDisplay display = m_pMachineView->uisession()->session().GetConsole().GetDisplay();
     728        CDisplay display = m_pMachineView->uisession()->display();
    670729        display.GetScreenResolution(m_pMachineView->screenId(),
    671730                                    ulWidth, ulHeight, ulGuestBitsPerPixel, xOrigin, yOrigin, monitorStatus);
     
    695754
    696755        /* And send async-signal to update asynchronous one: */
    697         LogRel2(("UIFrameBuffer::resizeEvent: Rectangle count=%lu, Sending to async-handler\n",
     756        LogRel2(("UIFrameBuffer::performResize: Rectangle count=%lu, Sending to async-handler\n",
    698757                 (unsigned long)m_syncVisibleRegion.rectCount()));
    699758        emit sigSetVisibleRegion(m_syncVisibleRegion);
     
    705764    if (m_pMachineView->machineLogic()->visualStateType() != UIVisualStateType_Scale)
    706765        setScaledSize(scaleFactor() == 1.0 ? QSize() : QSize((int)(m_iWidth * scaleFactor()), (int)(m_iHeight * scaleFactor())));
    707 }
    708 
    709 void UIFrameBuffer::paintEvent(QPaintEvent *pEvent)
    710 {
    711     LogRel2(("UIFrameBuffer::paintEvent: Origin=%lux%lu, Size=%dx%d\n",
    712              pEvent->rect().x(), pEvent->rect().y(),
    713              pEvent->rect().width(), pEvent->rect().height()));
    714 
    715     /* On mode switch the enqueued paint-event may still come
    716      * while the machine-view is already null (before the new machine-view set),
    717      * ignore paint-event in that case. */
    718     if (!m_pMachineView)
    719         return;
    720 
    721     /* Lock access to frame-buffer: */
    722     lock();
    723 
    724     /* But if updates disabled: */
    725     if (!m_fUpdatesAllowed)
    726     {
    727         /* Unlock access to frame-buffer: */
    728         unlock();
    729         /* And return immediately: */
    730         return;
    731     }
    732 
    733     /* Depending on visual-state type: */
    734     switch (m_pMachineView->machineLogic()->visualStateType())
    735     {
    736         case UIVisualStateType_Seamless:
    737             paintSeamless(pEvent);
    738             break;
    739         default:
    740             paintDefault(pEvent);
    741             break;
    742     }
    743 
    744     /* Unlock access to frame-buffer: */
    745     unlock();
    746 }
    747 
    748 void UIFrameBuffer::applyVisibleRegion(const QRegion &region)
    749 {
    750     /* Make sure async visible-region has changed: */
    751     if (m_asyncVisibleRegion == region)
    752         return;
    753 
    754     /* We are accounting async visible-regions one-by-one
    755      * to keep corresponding viewport area always updated! */
    756     if (!m_asyncVisibleRegion.isEmpty())
    757         m_pMachineView->viewport()->update(m_asyncVisibleRegion - region);
    758 
    759     /* Remember last visible region: */
    760     m_asyncVisibleRegion = region;
    761 
    762 #ifdef VBOX_WITH_MASKED_SEAMLESS
    763     /* We have to use async visible-region to apply to [Q]Widget [set]Mask: */
    764     m_pMachineView->machineWindow()->setMask(m_asyncVisibleRegion);
    765 #endif /* VBOX_WITH_MASKED_SEAMLESS */
    766766}
    767767
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h

    r53964 r54100  
    200200
    201201    /** Handles frame-buffer notify-change-event. */
    202     virtual void notifyChange(int iWidth, int iHeight);
    203     /** Handles frame-buffer resize-event. */
    204     virtual void resizeEvent(int iWidth, int iHeight);
     202    virtual void handleNotifyChange(int iWidth, int iHeight);
    205203    /** Handles frame-buffer paint-event. */
    206     virtual void paintEvent(QPaintEvent *pEvent);
    207     /** Handles frame-buffer apply-visible-region-event. */
    208     virtual void applyVisibleRegion(const QRegion &region);
     204    virtual void handlePaintEvent(QPaintEvent *pEvent);
     205    /** Handles frame-buffer set-visible-region-event. */
     206    virtual void handleSetVisibleRegion(const QRegion &region);
     207
     208    /** Performs frame-buffer resizing. */
     209    virtual void performResize(int iWidth, int iHeight);
    209210
    210211#ifdef VBOX_WITH_VIDEOHWACCEL
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r54082 r54100  
    218218void UIMachineView::sltHandleNotifyChange(int iWidth, int iHeight)
    219219{
    220     LogRelFlow(("UIMachineView::HandleNotifyChange: Screen=%d, Size=%dx%d.\n",
    221                 (unsigned long)m_uScreenId, iWidth, iHeight));
     220    LogRel(("UIMachineView::sltHandleNotifyChange: Screen=%d, Size=%dx%d.\n",
     221            (unsigned long)m_uScreenId, iWidth, iHeight));
    222222
    223223    // TODO: Move to appropriate place!
     
    242242
    243243        /* Perform frame-buffer mode-change: */
    244         frameBuffer()->notifyChange(iWidth, iHeight);
     244        frameBuffer()->handleNotifyChange(iWidth, iHeight);
    245245
    246246        /* Scale-mode doesn't need this.. */
     
    281281    display().InvalidateAndUpdateScreen(m_uScreenId);
    282282
    283     LogRelFlow(("UIMachineView::ResizeHandled: Screen=%d, Size=%dx%d.\n",
     283    LogRelFlow(("UIMachineView::sltHandleNotifyChange: Complete for Screen=%d, Size=%dx%d.\n",
    284284                (unsigned long)m_uScreenId, iWidth, iHeight));
    285285}
     
    364364    /* Adjust frame-buffer, machine-window and guest-screen size if necessary: */
    365365    sltHandleNotifyChange(frameBuffer()->width(), frameBuffer()->height());
    366     frameBuffer()->resizeEvent(frameBuffer()->width(), frameBuffer()->height());
     366    frameBuffer()->performResize(frameBuffer()->width(), frameBuffer()->height());
    367367    machineWindow()->normalizeGeometry(true /* adjust position */);
    368368    adjustGuestScreenSize();
     
    385385    /* Adjust frame-buffer, machine-window and guest-screen size if necessary: */
    386386    sltHandleNotifyChange(frameBuffer()->width(), frameBuffer()->height());
    387     frameBuffer()->resizeEvent(frameBuffer()->width(), frameBuffer()->height());
     387    frameBuffer()->performResize(frameBuffer()->width(), frameBuffer()->height());
    388388    machineWindow()->normalizeGeometry(true /* adjust position */);
    389389    adjustGuestScreenSize();
     
    600600        /* If we have a valid size, resize the framebuffer. */
    601601        if (size.width() > 0 && size.height() > 0)
    602             frameBuffer()->resizeEvent(size.width(), size.height());
     602            frameBuffer()->performResize(size.width(), size.height());
    603603    }
    604604}
     
    12801280    /* Delegate the paint function to the UIFrameBuffer interface: */
    12811281    if (m_pFrameBuffer)
    1282         m_pFrameBuffer->paintEvent(pPaintEvent);
     1282        m_pFrameBuffer->handlePaintEvent(pPaintEvent);
    12831283#ifdef Q_WS_MAC
    12841284    /* Update the dock icon if we are in the running state: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp

    r53912 r54100  
    8585{
    8686    /* Apply new seamless-region: */
    87     m_pFrameBuffer->applyVisibleRegion(region);
     87    m_pFrameBuffer->handleSetVisibleRegion(region);
    8888}
    8989
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