VirtualBox

Changeset 23766 in vbox


Ignore:
Timestamp:
Oct 14, 2009 3:06:33 PM (15 years ago)
Author:
vboxsync
Message:

2dvideo: bugfixing for overlay (widget) move/resize

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

Legend:

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

    r23746 r23766  
    373373    bool performDisplay(VBoxVHWASurfaceBase *pPrimary, bool bForce);
    374374
    375     void setRects(VBoxVHWASurfaceBase *pPrimary, const QRect & aTargRect, const QRect & aSrcRect, const QRect & aVisibleTargRect, bool bForceReinit);
    376     void setTargRectPosition(VBoxVHWASurfaceBase *pPrimary, const QPoint & aPoint, const QRect & aVisibleTargRect);
    377     void updateVisibleTargRect(VBoxVHWASurfaceBase *pPrimary, const QRect & aVisibleTargRect);
     375    void setRects (const QRect & aTargRect, const QRect & aSrcRect);
     376    void setTargRectPosition (const QPoint & aPoint);
     377    void setVisibilityReinitFlag() { mNeedVisibilityReinit = true; }
     378    void updateVisibility (VBoxVHWASurfaceBase *pPrimary, const QRect & aVisibleTargRect, bool bForce);
    378379
    379380    static ulong calcBytesPerPixel(GLenum format, GLenum type);
     
    514515    const VBoxVHWADirtyRect & getDirtyRect() { return mUpdateMem2TexRect; }
    515516private:
    516     void doSetRectValuesInternal(const QRect & aTargRect, const QRect & aSrcRect, const QRect & aVisTargRect);
     517    void setRectValues (const QRect & aTargRect, const QRect & aSrcRect);
     518    void setVisibleRectValues (const QRect & aVisTargRect);
    517519
    518520    void setComplexList(VBoxVHWASurfList *aComplexList) { mComplexList = aComplexList; }
     
    542544
    543545    bool mVisibleDisplayInitialized;
     546    bool mNeedVisibilityReinit;
    544547
    545548    uchar * mAddress;
     
    10201023            mpfnOp = NULL;
    10211024        }
     1025        VBOXQGLLOG(("paintGL\n"));
    10221026//        else
    10231027//        {
     
    11881192            mNeedOverlayRepaint = false;
    11891193            performDisplayOverlay();
     1194        }
     1195        if(mNeedSetVisible)
     1196        {
     1197            mNeedSetVisible = false;
     1198            mpOverlayWidget->setVisible(true);
    11901199        }
    11911200    }
     
    12481257    bool mProcessingCommands;
    12491258    bool mNeedOverlayRepaint;
     1259    bool mNeedSetVisible;
    12501260    QRect mOverlayViewport;
    12511261    VBoxVHWADirtyRect mMainDirtyRect;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp

    r23740 r23766  
    11831183                mpProgram(NULL),
    11841184                mVisibleDisplayInitialized(false),
     1185                mNeedVisibilityReinit(true),
    11851186                mAddress(NULL),
    11861187                mColorFormat(aColorFormat),
     
    12191220    }
    12201221
    1221     doSetRectValuesInternal(aTargRect, aSrcRect, aVisTargRect);
     1222    setRectValues(aTargRect, aSrcRect);
     1223    setVisibleRectValues(aVisTargRect);
    12221224//    mTargSize = QRect(0, 0, aTargSize->width(), aTargSize->height());
    12231225
     
    21032105}
    21042106
    2105 void VBoxVHWASurfaceBase::doSetRectValuesInternal(const QRect & aTargRect, const QRect & aSrcRect, const QRect & aVisTargRect)
    2106 {
    2107     mVisibleTargRect = aVisTargRect.intersected(aTargRect);
     2107void VBoxVHWASurfaceBase::setRectValues (const QRect & aTargRect, const QRect & aSrcRect)
     2108{
    21082109    mTargRect = aTargRect;
    21092110    mSrcRect = aSrcRect;
     2111}
     2112
     2113void VBoxVHWASurfaceBase::setVisibleRectValues (const QRect & aVisTargRect)
     2114{
     2115    mVisibleTargRect = aVisTargRect.intersected(mTargRect);
    21102116    if(mVisibleTargRect.isEmpty() || mTargRect.isEmpty())
    21112117    {
     
    21402146}
    21412147
    2142 void VBoxVHWASurfaceBase::setRects(VBoxVHWASurfaceBase *pPrimary, const QRect & aTargRect, const QRect & aSrcRect, const QRect & aVisTargRect, bool bForceReinit)
    2143 {
    2144     QRect aVisibleTargRect = aVisTargRect.intersected(mTargRect);
    2145 
    2146     if(mTargRect != aTargRect || mSrcRect != aSrcRect || mVisibleTargRect != aVisibleTargRect)
    2147     {
    2148         doSetRectValuesInternal(aTargRect, aSrcRect, aVisTargRect);
    2149         bForceReinit = true;
    2150     }
    2151 
    2152     if(bForceReinit)
    2153     {
    2154         initDisplay(pPrimary);
    2155     }
    2156 }
    2157 
    2158 void VBoxVHWASurfaceBase::setTargRectPosition(VBoxVHWASurfaceBase *pPrimary, const QPoint & aPoint, const QRect & aVisibleTargRect)
     2148
     2149void VBoxVHWASurfaceBase::setRects(const QRect & aTargRect, const QRect & aSrcRect)
     2150{
     2151    if(mTargRect != aTargRect || mSrcRect != aSrcRect)
     2152    {
     2153        setRectValues(aTargRect, aSrcRect);
     2154        mNeedVisibilityReinit = true;
     2155    }
     2156}
     2157
     2158void VBoxVHWASurfaceBase::setTargRectPosition(const QPoint & aPoint)
    21592159{
    21602160    QRect tRect = targRect();
    21612161    tRect.moveTopLeft(aPoint);
    2162     setRects(pPrimary, tRect, srcRect(), aVisibleTargRect, false);
    2163 }
    2164 
    2165 void VBoxVHWASurfaceBase::updateVisibleTargRect(VBoxVHWASurfaceBase *pPrimary, const QRect & aVisibleTargRect)
    2166 {
    2167     setRects(pPrimary, targRect(), srcRect(), aVisibleTargRect, false);
     2162    setRects(tRect, srcRect());
     2163}
     2164
     2165void VBoxVHWASurfaceBase::updateVisibility (VBoxVHWASurfaceBase *pPrimary, const QRect & aVisibleTargRect, bool bForce)
     2166{
     2167    if(mNeedVisibilityReinit || bForce || aVisibleTargRect.intersected(mTargRect) != mVisibleTargRect)
     2168    {
     2169        setVisibleRectValues(aVisibleTargRect);
     2170        initDisplay(pPrimary);
     2171        mNeedVisibilityReinit = false;
     2172    }
    21682173}
    21692174
     
    33023307        }
    33033308
    3304         pSrcSurf->setRects(pDstSurf, dstRect, srcRect, mViewport, true);
     3309        pSrcSurf->setRects(dstRect, srcRect);
     3310        pSrcSurf->setVisibilityReinitFlag();
    33053311    }
    33063312}
     
    33463352    if(pCmd->u.in.flags & VBOXVHWA_OVER_HIDE)
    33473353    {
    3348         VBOXQGLLOG(("hide"));
     3354        VBOXQGLLOG(("hide\n"));
    33493355        pList->setCurrentVisible(NULL);
    33503356    }
    33513357    else if(pCmd->u.in.flags & VBOXVHWA_OVER_SHOW)
    33523358    {
    3353         VBOXQGLLOG(("show"));
     3359        VBOXQGLLOG(("show\n"));
    33543360        pList->setCurrentVisible(pSrcSurf);
    33553361    }
     
    33953401    {
    33963402        VBoxVHWASurfaceBase *pCurSrcSurf = (*it);
    3397         pCurSrcSurf->setTargRectPosition(pDstSurf, pos, mViewport);
     3403        pCurSrcSurf->setTargRectPosition(pos);
    33983404    }
    33993405
     
    41374143    {
    41384144        VBoxVHWASurfaceBase *pSurf = *pr;
    4139         pSurf->updateVisibleTargRect(NULL, aRect);
     4145        pSurf->updateVisibility(NULL, aRect, false);
    41404146    }
    41414147
     
    41514157        {
    41524158            VBoxVHWASurfaceBase *pSurf = *sit;
    4153             pSurf->updateVisibleTargRect(mDisplay.getPrimary(), aRect);
     4159            pSurf->updateVisibility(mDisplay.getPrimary(), aRect, false);
    41544160        }
    41554161    }
     
    46784684      mProcessingCommands(false),
    46794685      mNeedOverlayRepaint(false),
     4686      mNeedSetVisible(false),
    46804687      mCmdPipe(aView)
    46814688{
     
    49614968void VBoxQGLOverlay::vboxCheckUpdateOverlay(const QRect & rect)
    49624969{
    4963     QRect overRect = mpOverlayWidget->rect();
     4970    QRect overRect(mpOverlayWidget->pos(), mpOverlayWidget->size());
    49644971    if(overRect.x() != rect.x() || overRect.y() != rect.y())
    49654972    {
     4973        mpOverlayWidget->setVisible(false);
     4974        mNeedSetVisible = true;
     4975        VBOXQGLLOG_QRECT("moving wgt to " , &rect, "\n");
    49664976        mpOverlayWidget->move(rect.x(), rect.y());
    49674977        mGlCurrent = false;
     
    49704980    if(overRect.width() != rect.width() || overRect.height() != rect.height())
    49714981    {
     4982        mpOverlayWidget->setVisible(false);
     4983        mNeedSetVisible = true;
     4984        VBOXQGLLOG(("resizing wgt to w(%d) ,h(%d)\n" , rect.width(), rect.height()));
    49724985        mpOverlayWidget->resize(rect.width(), rect.height());
    49734986        mGlCurrent = false;
Note: See TracChangeset for help on using the changeset viewer.

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