Changeset 22798 in vbox
- Timestamp:
- Sep 6, 2009 10:39:41 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 51991
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/include/VBoxFrameBuffer.h
r22797 r22798 939 939 } 940 940 941 size_t size() {return mSurfaces.size(); }941 size_t size() const {return mSurfaces.size(); } 942 942 943 943 void remove(VBoxVHWASurfaceBase *pSurf) … … 998 998 } 999 999 1000 VBoxVHWASurfaceBase * getVGA() 1000 VBoxVHWASurfaceBase * getVGA() const 1001 1001 { 1002 1002 return mSurfVGA; … … 1485 1485 void vboxDoVHWACmdExec(void *cmd); 1486 1486 void vboxShowOverlay(bool show); 1487 boolvboxDoCheckUpdateViewport();1487 void vboxDoCheckUpdateViewport(); 1488 1488 void vboxDoVHWACmd(void *cmd); 1489 1489 void vboxDoUpdateRect(const QRect * pRect); 1490 void vboxUpdateOverlayPosition(const QPoint & pos);1491 void vbox UpdateOverlay(const QRect & rect, bool show);1490 // void vboxUpdateOverlayPosition(const QPoint & pos); 1491 void vboxCheckUpdateOverlay(const QRect & rect); 1492 1492 VBoxVHWACommandElement * processCmdList(VBoxVHWACommandElement * pCmd); 1493 1493 VBoxGLWidget *mpOverlayWidget; 1494 1494 bool mGlOn; 1495 bool mOverlayWidgetVisible; 1495 1496 bool mOverlayVisible; 1496 1497 bool mGlCurrent; 1497 1498 bool mProcessingCommands; 1498 QRect mOverlayViewport Coords;1499 QRect mOverlayViewport; 1499 1500 VBoxVHWADirtyRect mMainDirtyRect; 1500 1501 -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBQGL.cpp
r22797 r22798 4663 4663 bool VBoxGLWidget::hasSurfaces() const 4664 4664 { 4665 return mDisplay.overlays().size() != 0; 4665 if(mDisplay.overlays().size() != 0) 4666 return true; 4667 if(mDisplay.primaries().size() > 1) 4668 return true; 4669 return mDisplay.getVGA()->handle() != VBOXVHWA_SURFHANDLE_INVALID; 4666 4670 } 4667 4671 … … 5231 5235 : VBoxQImageFrameBuffer(aView), 5232 5236 mGlOn(false), 5237 mOverlayWidgetVisible(false), 5233 5238 mOverlayVisible(false), 5234 5239 mGlCurrent(false), … … 5237 5242 { 5238 5243 mpOverlayWidget = new VBoxGLWidget (aView, aView->viewport()); 5239 mpOverlayWidget->setVisible(false); 5244 mOverlayWidgetVisible = true; /* to ensure it is set hidden with vboxShowOverlay */ 5245 vboxShowOverlay(false); 5240 5246 } 5241 5247 … … 5292 5298 } 5293 5299 5294 bool VBoxQGLOverlayFrameBuffer::vboxDoCheckUpdateViewport()5295 {5296 Assert(0);5297 // QRect vp(mView->contentsX(), mView->contentsY(), mpOverlayWidget->width(), mpOverlayWidget->height());5298 // if(vp != mpOverlayWidget->vboxViewport())5299 // {5300 // mpOverlayWidget->vboxDoUpdateViewport(vp);5301 // return true;5302 // }5303 return false;5304 }5305 5306 5300 void VBoxQGLOverlayFrameBuffer::paintEvent (QPaintEvent *pe) 5307 5301 { 5308 if(mOverlay Visible && !mProcessingCommands)5302 if(mOverlayWidgetVisible && !mProcessingCommands) 5309 5303 { 5310 5304 Assert(!mGlCurrent); 5305 vboxDoCheckUpdateViewport(); 5311 5306 vboxOpExit(); 5312 5307 } … … 5347 5342 makeCurrent(); 5348 5343 mpOverlayWidget->vboxDoUpdateRect(pRect); 5349 // if(mOverlayVisible)5350 // {5351 // mpOverlayWidget->performDisplay();5352 // mpOverlayWidget->swapBuffers();5353 // }5354 5344 vboxOpExit(); 5355 5345 } … … 5391 5381 Assert(!mpOverlayWidget->isVisible()); 5392 5382 /* just to ensure */ 5393 mpOverlayWidget->setVisible(false); 5383 vboxShowOverlay(false); 5384 mOverlayVisible = false; 5394 5385 vboxSynchGl(); 5395 5386 } … … 5397 5388 { 5398 5389 VBOXQGLLOGREL(("Switching Gl mode off\n")); 5390 mOverlayVisible = false; 5391 vboxShowOverlay(false); 5399 5392 /* for now just set the flag w/o destroying anything */ 5400 5393 } 5401 5394 } 5402 5395 5396 void VBoxQGLOverlayFrameBuffer::vboxDoCheckUpdateViewport() 5397 { 5398 Assert(0); 5399 int cX = mView->contentsX(); 5400 int cY = mView->contentsY(); 5401 QRect fbVp(cX, cY, mView->viewport()->width(), mView->viewport()->height()); 5402 QRect overVp = fbVp.intersected(mOverlayViewport); 5403 5404 if(overVp.isEmpty()) 5405 { 5406 vboxShowOverlay(false); 5407 } 5408 else 5409 { 5410 if(overVp != mpOverlayWidget->vboxViewport()) 5411 { 5412 makeCurrent(); 5413 mpOverlayWidget->vboxDoUpdateViewport(overVp); 5414 } 5415 5416 QRect rect(overVp.x() - cX, overVp.y() - cY, overVp.width(), overVp.height()); 5417 5418 vboxCheckUpdateOverlay(rect); 5419 5420 vboxShowOverlay(true); 5421 } 5422 } 5423 5403 5424 void VBoxQGLOverlayFrameBuffer::vboxShowOverlay(bool show) 5404 5425 { 5405 mpOverlayWidget->setVisible(show); 5406 mOverlayVisible = show; 5407 } 5408 5409 void VBoxQGLOverlayFrameBuffer::vboxUpdateOverlayPosition(const QPoint & pos) 5410 { 5411 makeCurrent(); 5412 5413 mpOverlayWidget->move(pos); 5414 5415 /* */ 5416 QRect rect = mpOverlayWidget->vboxViewport(); 5417 rect.moveTo(pos); 5418 mpOverlayWidget->vboxDoUpdateViewport(rect); 5419 } 5420 5421 void VBoxQGLOverlayFrameBuffer::vboxUpdateOverlay(const QRect & rect, bool show) 5422 { 5423 mpOverlayWidget->move(rect.x(), rect.y()); 5424 mpOverlayWidget->resize(rect.width(), rect.height()); 5425 5426 mpOverlayWidget->vboxDoUpdateViewport(rect); 5427 5428 vboxShowOverlay(show); 5426 if(mOverlayWidgetVisible != show) 5427 { 5428 mpOverlayWidget->setVisible(show); 5429 mOverlayWidgetVisible = show; 5430 } 5431 } 5432 5433 //void VBoxQGLOverlayFrameBuffer::vboxUpdateOverlayPosition(const QPoint & pos) 5434 //{ 5435 //// makeCurrent(); 5436 // 5437 // mpOverlayWidget->move(pos); 5438 // 5439 //// /* */ 5440 //// QRect rect = mpOverlayWidget->vboxViewport(); 5441 //// rect.moveTo(pos); 5442 //// mpOverlayWidget->vboxDoUpdateViewport(rect); 5443 //} 5444 5445 void VBoxQGLOverlayFrameBuffer::vboxCheckUpdateOverlay(const QRect & rect) 5446 { 5447 QRect overRect = mpOverlayWidget->rect(); 5448 if(overRect.x() != rect.x() || overRect.y() != rect.y()) 5449 { 5450 mpOverlayWidget->move(rect.x(), rect.y()); 5451 } 5452 5453 if(overRect.width() != rect.width() || overRect.height() != rect.height()) 5454 { 5455 mpOverlayWidget->resize(rect.width(), rect.height()); 5456 } 5457 5458 // mpOverlayWidget->vboxDoUpdateViewport(rect); 5459 // 5460 // vboxShowOverlay(show); 5429 5461 } 5430 5462 … … 5449 5481 vboxSetGlOn(false); 5450 5482 } 5451 else if(mpOverlayWidget->hasVisibleOverlays())5483 else 5452 5484 { 5453 QRect overRect = mpOverlayWidget->overlaysRectUnion(); 5454 vboxUpdateOverlay(overRect, true); 5485 mOverlayVisible = mpOverlayWidget->hasVisibleOverlays(); 5486 if(mOverlayVisible) 5487 { 5488 mOverlayViewport = mpOverlayWidget->overlaysRectUnion(); 5489 } 5455 5490 } 5456 5491 } break; … … 5463 5498 vboxSetGlOn(false); 5464 5499 } 5500 else 5501 { 5502 mOverlayVisible = mpOverlayWidget->hasVisibleOverlays(); 5503 if(mOverlayVisible) 5504 { 5505 mOverlayViewport = mpOverlayWidget->overlaysRectUnion(); 5506 } 5507 } 5465 5508 } break; 5466 5509 case VBOXVHWACMD_TYPE_SURF_LOCK: … … 5488 5531 VBOXVHWACMD_SURF_OVERLAY_UPDATE * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE); 5489 5532 pCmd->rc = mpOverlayWidget->vhwaSurfaceOverlayUpdate(pBody); 5490 if(mpOverlayWidget->hasVisibleOverlays()) 5533 mOverlayVisible = mpOverlayWidget->hasVisibleOverlays(); 5534 if(mOverlayVisible) 5491 5535 { 5492 QRect overRect = mpOverlayWidget->overlaysRectUnion(); 5493 vboxUpdateOverlay(overRect, true); 5536 mOverlayViewport = mpOverlayWidget->overlaysRectUnion(); 5494 5537 } 5495 else 5496 { 5497 vboxShowOverlay(false); 5498 } 5538 vboxDoCheckUpdateViewport(); 5499 5539 } break; 5500 5540 case VBOXVHWACMD_TYPE_SURF_OVERLAY_SETPOSITION: … … 5502 5542 VBOXVHWACMD_SURF_OVERLAY_SETPOSITION * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_SETPOSITION); 5503 5543 pCmd->rc = mpOverlayWidget->vhwaSurfaceOverlaySetPosition(pBody); 5504 if(mpOverlayWidget->hasVisibleOverlays()) 5544 mOverlayVisible = mpOverlayWidget->hasVisibleOverlays(); 5545 if(mOverlayVisible) 5505 5546 { 5506 QRect overRect = mpOverlayWidget->overlaysRectUnion(); 5507 vboxUpdateOverlayPosition(QPoint(overRect.x(), overRect.y())); 5547 mOverlayViewport = mpOverlayWidget->overlaysRectUnion(); 5508 5548 } 5549 vboxDoCheckUpdateViewport(); 5509 5550 } break; 5510 5551 case VBOXVHWACMD_TYPE_SURF_COLORKEY_SET:
Note:
See TracChangeset
for help on using the changeset viewer.