Changeset 23766 in vbox
- Timestamp:
- Oct 14, 2009 3:06:33 PM (15 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/include/VBoxFBOverlay.h
r23746 r23766 373 373 bool performDisplay(VBoxVHWASurfaceBase *pPrimary, bool bForce); 374 374 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); 378 379 379 380 static ulong calcBytesPerPixel(GLenum format, GLenum type); … … 514 515 const VBoxVHWADirtyRect & getDirtyRect() { return mUpdateMem2TexRect; } 515 516 private: 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); 517 519 518 520 void setComplexList(VBoxVHWASurfList *aComplexList) { mComplexList = aComplexList; } … … 542 544 543 545 bool mVisibleDisplayInitialized; 546 bool mNeedVisibilityReinit; 544 547 545 548 uchar * mAddress; … … 1020 1023 mpfnOp = NULL; 1021 1024 } 1025 VBOXQGLLOG(("paintGL\n")); 1022 1026 // else 1023 1027 // { … … 1188 1192 mNeedOverlayRepaint = false; 1189 1193 performDisplayOverlay(); 1194 } 1195 if(mNeedSetVisible) 1196 { 1197 mNeedSetVisible = false; 1198 mpOverlayWidget->setVisible(true); 1190 1199 } 1191 1200 } … … 1248 1257 bool mProcessingCommands; 1249 1258 bool mNeedOverlayRepaint; 1259 bool mNeedSetVisible; 1250 1260 QRect mOverlayViewport; 1251 1261 VBoxVHWADirtyRect mMainDirtyRect; -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
r23740 r23766 1183 1183 mpProgram(NULL), 1184 1184 mVisibleDisplayInitialized(false), 1185 mNeedVisibilityReinit(true), 1185 1186 mAddress(NULL), 1186 1187 mColorFormat(aColorFormat), … … 1219 1220 } 1220 1221 1221 doSetRectValuesInternal(aTargRect, aSrcRect, aVisTargRect); 1222 setRectValues(aTargRect, aSrcRect); 1223 setVisibleRectValues(aVisTargRect); 1222 1224 // mTargSize = QRect(0, 0, aTargSize->width(), aTargSize->height()); 1223 1225 … … 2103 2105 } 2104 2106 2105 void VBoxVHWASurfaceBase::doSetRectValuesInternal(const QRect & aTargRect, const QRect & aSrcRect, const QRect & aVisTargRect) 2106 { 2107 mVisibleTargRect = aVisTargRect.intersected(aTargRect); 2107 void VBoxVHWASurfaceBase::setRectValues (const QRect & aTargRect, const QRect & aSrcRect) 2108 { 2108 2109 mTargRect = aTargRect; 2109 2110 mSrcRect = aSrcRect; 2111 } 2112 2113 void VBoxVHWASurfaceBase::setVisibleRectValues (const QRect & aVisTargRect) 2114 { 2115 mVisibleTargRect = aVisTargRect.intersected(mTargRect); 2110 2116 if(mVisibleTargRect.isEmpty() || mTargRect.isEmpty()) 2111 2117 { … … 2140 2146 } 2141 2147 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 2149 void 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 2158 void VBoxVHWASurfaceBase::setTargRectPosition(const QPoint & aPoint) 2159 2159 { 2160 2160 QRect tRect = targRect(); 2161 2161 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 2165 void 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 } 2168 2173 } 2169 2174 … … 3302 3307 } 3303 3308 3304 pSrcSurf->setRects(pDstSurf, dstRect, srcRect, mViewport, true); 3309 pSrcSurf->setRects(dstRect, srcRect); 3310 pSrcSurf->setVisibilityReinitFlag(); 3305 3311 } 3306 3312 } … … 3346 3352 if(pCmd->u.in.flags & VBOXVHWA_OVER_HIDE) 3347 3353 { 3348 VBOXQGLLOG(("hide "));3354 VBOXQGLLOG(("hide\n")); 3349 3355 pList->setCurrentVisible(NULL); 3350 3356 } 3351 3357 else if(pCmd->u.in.flags & VBOXVHWA_OVER_SHOW) 3352 3358 { 3353 VBOXQGLLOG(("show "));3359 VBOXQGLLOG(("show\n")); 3354 3360 pList->setCurrentVisible(pSrcSurf); 3355 3361 } … … 3395 3401 { 3396 3402 VBoxVHWASurfaceBase *pCurSrcSurf = (*it); 3397 pCurSrcSurf->setTargRectPosition(p DstSurf, pos, mViewport);3403 pCurSrcSurf->setTargRectPosition(pos); 3398 3404 } 3399 3405 … … 4137 4143 { 4138 4144 VBoxVHWASurfaceBase *pSurf = *pr; 4139 pSurf->updateVisib leTargRect(NULL, aRect);4145 pSurf->updateVisibility(NULL, aRect, false); 4140 4146 } 4141 4147 … … 4151 4157 { 4152 4158 VBoxVHWASurfaceBase *pSurf = *sit; 4153 pSurf->updateVisib leTargRect(mDisplay.getPrimary(), aRect);4159 pSurf->updateVisibility(mDisplay.getPrimary(), aRect, false); 4154 4160 } 4155 4161 } … … 4678 4684 mProcessingCommands(false), 4679 4685 mNeedOverlayRepaint(false), 4686 mNeedSetVisible(false), 4680 4687 mCmdPipe(aView) 4681 4688 { … … 4961 4968 void VBoxQGLOverlay::vboxCheckUpdateOverlay(const QRect & rect) 4962 4969 { 4963 QRect overRect = mpOverlayWidget->rect();4970 QRect overRect(mpOverlayWidget->pos(), mpOverlayWidget->size()); 4964 4971 if(overRect.x() != rect.x() || overRect.y() != rect.y()) 4965 4972 { 4973 mpOverlayWidget->setVisible(false); 4974 mNeedSetVisible = true; 4975 VBOXQGLLOG_QRECT("moving wgt to " , &rect, "\n"); 4966 4976 mpOverlayWidget->move(rect.x(), rect.y()); 4967 4977 mGlCurrent = false; … … 4970 4980 if(overRect.width() != rect.width() || overRect.height() != rect.height()) 4971 4981 { 4982 mpOverlayWidget->setVisible(false); 4983 mNeedSetVisible = true; 4984 VBOXQGLLOG(("resizing wgt to w(%d) ,h(%d)\n" , rect.width(), rect.height())); 4972 4985 mpOverlayWidget->resize(rect.width(), rect.height()); 4973 4986 mGlCurrent = false;
Note:
See TracChangeset
for help on using the changeset viewer.