Changeset 53862 in vbox
- Timestamp:
- Jan 19, 2015 6:45:06 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
r53861 r53862 477 477 void UIMachineView::prepareFrameBuffer() 478 478 { 479 /* Take scale-factor and unscaled video output mode into account: */ 480 const double dScaleFactor = gEDataManager->scaleFactor(vboxGlobal().managedVMUuid()); 481 const bool fUseUnscaledHiDPIOutput = gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()); 482 483 /* Prepare frame-buffer: */ 479 /* Check whether we already have corresponding frame-buffer: */ 484 480 UIFrameBuffer *pFrameBuffer = uisession()->frameBuffer(screenId()); 481 482 /* If we do: */ 485 483 if (pFrameBuffer) 486 484 { 485 /* Assign it's view: */ 487 486 pFrameBuffer->setView(this); 488 /* Mark frame buffer as used again: */487 /* Mark frame-buffer as used again: */ 489 488 LogRelFlow(("UIMachineView::prepareFrameBuffer: Start EMT callbacks accepting for screen: %d.\n", screenId())); 490 489 pFrameBuffer->setMarkAsUnused(false); 490 /* And remember our choice: */ 491 491 m_pFrameBuffer = pFrameBuffer; 492 492 } 493 /* If we do not: */ 493 494 else 494 495 { 495 # ifdef VBOX_WITH_VIDEOHWACCEL 496 #ifdef VBOX_WITH_VIDEOHWACCEL 497 /* If 2D video acceleration is activated: */ 496 498 if (m_fAccelerate2DVideo) 497 499 { 500 /* Create new frame-buffer on the basis 501 * of VBoxOverlayFrameBuffer template: */ 498 502 ComObjPtr<VBoxOverlayFrameBuffer> pOFB; 499 503 pOFB.createObject(); … … 501 505 m_pFrameBuffer = pOFB; 502 506 } 507 /* If 2D video acceleration is not activated: */ 503 508 else 504 509 { 510 /* Create new default frame-buffer: */ 505 511 m_pFrameBuffer.createObject(); 506 512 m_pFrameBuffer->init(this); 507 513 } 508 # else /* VBOX_WITH_VIDEOHWACCEL */ 514 #else /* VBOX_WITH_VIDEOHWACCEL */ 515 /* Create new default frame-buffer: */ 509 516 m_pFrameBuffer.createObject(); 510 517 m_pFrameBuffer->init(this); 511 # endif /* !VBOX_WITH_VIDEOHWACCEL */ 518 #endif /* !VBOX_WITH_VIDEOHWACCEL */ 519 520 /* Take HiDPI optimization type into account: */ 512 521 m_pFrameBuffer->setHiDPIOptimizationType(uisession()->hiDPIOptimizationType()); 522 523 /* Take scale-factor into account: */ 524 const double dScaleFactor = gEDataManager->scaleFactor(vboxGlobal().managedVMUuid()); 513 525 m_pFrameBuffer->setScaleFactor(dScaleFactor); 514 526 display().NotifyScaleFactorChange(m_uScreenId, 515 527 (uint32_t)(dScaleFactor * VBOX_OGL_SCALE_FACTOR_MULTIPLIER), 516 528 (uint32_t)(dScaleFactor * VBOX_OGL_SCALE_FACTOR_MULTIPLIER)); 529 530 /* Take unscaled HiDPI output mode into account: */ 531 const bool fUseUnscaledHiDPIOutput = gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()); 517 532 m_pFrameBuffer->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput); 533 534 /* Associate uisession with frame-buffer finally: */ 518 535 uisession()->setFrameBuffer(screenId(), m_pFrameBuffer); 519 536 } 520 537 521 /* Ifframe-buffer was prepared: */522 if (m_pFrameBuffer)523 { 524 /* Prepare display: */525 CFramebuffer fb = display().QueryFramebuffer(m_uScreenId);526 /* Always perform AttachFramebuffer to ensure 3D gets notified: */527 if (!fb.isNull())528 display().DetachFramebuffer(m_uScreenId);529 display().AttachFramebuffer(m_uScreenId, CFramebuffer(m_pFrameBuffer));530 } 531 538 /* Make sure frame-buffer was prepared: */ 539 AssertReturnVoid(m_pFrameBuffer); 540 541 /* Prepare display: */ 542 CFramebuffer fb = display().QueryFramebuffer(m_uScreenId); 543 /* Always perform AttachFramebuffer to ensure 3D gets notified: */ 544 if (!fb.isNull()) 545 display().DetachFramebuffer(m_uScreenId); 546 display().AttachFramebuffer(m_uScreenId, CFramebuffer(m_pFrameBuffer)); 547 548 /* Calculate frame-buffer size: */ 532 549 QSize size; 550 { 533 551 #ifdef Q_WS_X11 534 /* Processing pseudo resize-event to synchronize frame-buffer with stored 535 * framebuffer size. On X11 this will be additional done when the machine 536 * state was 'saved'. */ 537 if (machine().GetState() == KMachineState_Saved) 538 size = guestSizeHint(); 552 /* Processing pseudo resize-event to synchronize frame-buffer with stored framebuffer size. 553 * On X11 this will be additional done when the machine state was 'saved'. */ 554 if (machine().GetState() == KMachineState_Saved) 555 size = guestSizeHint(); 539 556 #endif /* Q_WS_X11 */ 540 /* If there is a preview image saved, we will resize the framebuffer to the 541 * size of that image. */ 542 ULONG buffer = 0, width = 0, height = 0; 543 machine().QuerySavedScreenshotPNGSize(0, buffer, width, height); 544 if (buffer > 0) 545 { 546 /* Init with the screenshot size */ 547 size = QSize(width, height); 548 /* Try to get the real guest dimensions from the save state */ 549 ULONG guestOriginX = 0, guestOriginY = 0, guestWidth = 0, guestHeight = 0; 550 BOOL fEnabled = true; 551 machine().QuerySavedGuestScreenInfo(m_uScreenId, guestOriginX, guestOriginY, guestWidth, guestHeight, fEnabled); 552 if ( guestWidth > 0 553 && guestHeight > 0) 554 size = QSize(guestWidth, guestHeight); 555 } 556 /* If we have a valid size, resize the framebuffer. */ 557 if (size.width() > 0 && size.height() > 0) 558 { 559 frameBuffer()->resizeEvent(size.width(), size.height()); 560 frameBuffer()->setScaleFactor(dScaleFactor); 561 display().NotifyScaleFactorChange(m_uScreenId, 562 (uint32_t)(dScaleFactor * VBOX_OGL_SCALE_FACTOR_MULTIPLIER), 563 (uint32_t)(dScaleFactor * VBOX_OGL_SCALE_FACTOR_MULTIPLIER)); 564 frameBuffer()->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput); 557 558 /* If there is a preview image saved, 559 * we will resize the framebuffer to the size of that image: */ 560 ULONG uBuffer = 0, uWidth = 0, uHeight = 0; 561 machine().QuerySavedScreenshotPNGSize(0, uBuffer, uWidth, uHeight); 562 if (uBuffer > 0) 563 { 564 /* Init with the screenshot size: */ 565 size = QSize(uWidth, uHeight); 566 /* Try to get the real guest dimensions from the save-state: */ 567 ULONG uGuestOriginX = 0, uGuestOriginY = 0, uGuestWidth = 0, uGuestHeight = 0; 568 BOOL fEnabled = true; 569 machine().QuerySavedGuestScreenInfo(m_uScreenId, uGuestOriginX, uGuestOriginY, uGuestWidth, uGuestHeight, fEnabled); 570 if (uGuestWidth > 0 && uGuestHeight > 0) 571 size = QSize(uGuestWidth, uGuestHeight); 572 } 573 574 /* If we have a valid size, resize the framebuffer. */ 575 if (size.width() > 0 && size.height() > 0) 576 frameBuffer()->resizeEvent(size.width(), size.height()); 565 577 } 566 578 }
Note:
See TracChangeset
for help on using the changeset viewer.

