Changeset 98838 in vbox
- Timestamp:
- Mar 6, 2023 11:14:05 AM (2 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/runtime
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
r98519 r98838 2337 2337 UIFrameBuffer::UIFrameBuffer() 2338 2338 { 2339 prepare(); 2340 } 2341 2342 UIFrameBuffer::~UIFrameBuffer() 2343 { 2344 cleanup(); 2345 } 2346 2347 HRESULT UIFrameBuffer::init(UIMachineView *pMachineView) 2348 { 2349 return m_pFrameBuffer->init(pMachineView); 2350 } 2351 2352 void UIFrameBuffer::attach() 2353 { 2354 m_pFrameBuffer->attach(); 2355 } 2356 2357 void UIFrameBuffer::detach() 2358 { 2359 m_pFrameBuffer->detach(); 2360 } 2361 2362 uchar* UIFrameBuffer::address() 2363 { 2364 return m_pFrameBuffer->address(); 2365 } 2366 2367 ulong UIFrameBuffer::width() const 2368 { 2369 return m_pFrameBuffer->width(); 2370 } 2371 2372 ulong UIFrameBuffer::height() const 2373 { 2374 return m_pFrameBuffer->height(); 2375 } 2376 2377 ulong UIFrameBuffer::bitsPerPixel() const 2378 { 2379 return m_pFrameBuffer->bitsPerPixel(); 2380 } 2381 2382 ulong UIFrameBuffer::bytesPerLine() const 2383 { 2384 return m_pFrameBuffer->bytesPerLine(); 2385 } 2386 2387 UIVisualStateType UIFrameBuffer::visualState() const 2388 { 2389 return m_pFrameBuffer->visualState(); 2390 } 2391 2392 void UIFrameBuffer::setView(UIMachineView *pMachineView) 2393 { 2394 m_pFrameBuffer->setView(pMachineView); 2395 } 2396 2397 void UIFrameBuffer::setMarkAsUnused(bool fUnused) 2398 { 2399 m_pFrameBuffer->setMarkAsUnused(fUnused); 2400 } 2401 2402 QSize UIFrameBuffer::scaledSize() const 2403 { 2404 return m_pFrameBuffer->scaledSize(); 2405 } 2406 2407 void UIFrameBuffer::setScaledSize(const QSize &size /* = QSize() */) 2408 { 2409 m_pFrameBuffer->setScaledSize(size); 2410 } 2411 2412 int UIFrameBuffer::convertHostXTo(int iX) const 2413 { 2414 return m_pFrameBuffer->convertHostXTo(iX); 2415 } 2416 2417 int UIFrameBuffer::convertHostYTo(int iY) const 2418 { 2419 return m_pFrameBuffer->convertHostXTo(iY); 2420 } 2421 2422 double UIFrameBuffer::scaleFactor() const 2423 { 2424 return m_pFrameBuffer->scaleFactor(); 2425 } 2426 2427 void UIFrameBuffer::setScaleFactor(double dScaleFactor) 2428 { 2429 m_pFrameBuffer->setScaleFactor(dScaleFactor); 2430 } 2431 2432 double UIFrameBuffer::devicePixelRatio() const 2433 { 2434 return m_pFrameBuffer->devicePixelRatio(); 2435 } 2436 2437 void UIFrameBuffer::setDevicePixelRatio(double dDevicePixelRatio) 2438 { 2439 m_pFrameBuffer->setDevicePixelRatio(dDevicePixelRatio); 2440 } 2441 2442 double UIFrameBuffer::devicePixelRatioActual() const 2443 { 2444 return m_pFrameBuffer->devicePixelRatioActual(); 2445 } 2446 2447 void UIFrameBuffer::setDevicePixelRatioActual(double dDevicePixelRatioActual) 2448 { 2449 m_pFrameBuffer->setDevicePixelRatioActual(dDevicePixelRatioActual); 2450 } 2451 2452 bool UIFrameBuffer::useUnscaledHiDPIOutput() const 2453 { 2454 return m_pFrameBuffer->useUnscaledHiDPIOutput(); 2455 } 2456 2457 void UIFrameBuffer::setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput) 2458 { 2459 m_pFrameBuffer->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput); 2460 } 2461 2462 ScalingOptimizationType UIFrameBuffer::scalingOptimizationType() const 2463 { 2464 return m_pFrameBuffer->scalingOptimizationType(); 2465 } 2466 2467 void UIFrameBuffer::setScalingOptimizationType(ScalingOptimizationType type) 2468 { 2469 m_pFrameBuffer->setScalingOptimizationType(type); 2470 } 2471 2472 void UIFrameBuffer::handleNotifyChange(int iWidth, int iHeight) 2473 { 2474 m_pFrameBuffer->handleNotifyChange(iWidth, iHeight); 2475 } 2476 2477 void UIFrameBuffer::handlePaintEvent(QPaintEvent *pEvent) 2478 { 2479 m_pFrameBuffer->handlePaintEvent(pEvent); 2480 } 2481 2482 void UIFrameBuffer::handleSetVisibleRegion(const QRegion ®ion) 2483 { 2484 m_pFrameBuffer->handleSetVisibleRegion(region); 2485 } 2486 2487 void UIFrameBuffer::performResize(int iWidth, int iHeight) 2488 { 2489 m_pFrameBuffer->performResize(iWidth, iHeight); 2490 } 2491 2492 void UIFrameBuffer::performRescale() 2493 { 2494 m_pFrameBuffer->performRescale(); 2495 } 2496 2497 void UIFrameBuffer::viewportResized(QResizeEvent *pEvent) 2498 { 2499 m_pFrameBuffer->viewportResized(pEvent); 2500 } 2501 2502 void UIFrameBuffer::prepare() 2503 { 2504 /* Creates COM object we are linked to: */ 2339 2505 m_pFrameBuffer.createObject(); 2340 } 2341 2342 UIFrameBuffer::~UIFrameBuffer() 2343 { 2506 2507 /* Take scaling optimization type into account: */ 2508 setScalingOptimizationType(gEDataManager->scalingOptimizationType(uiCommon().managedVMUuid())); 2509 } 2510 2511 void UIFrameBuffer::cleanup() 2512 { 2513 /* Detach COM object we are linked to: */ 2344 2514 m_pFrameBuffer.setNull(); 2345 2515 } 2346 2516 2347 HRESULT UIFrameBuffer::init(UIMachineView *pMachineView)2348 {2349 return m_pFrameBuffer->init(pMachineView);2350 }2351 2352 void UIFrameBuffer::attach()2353 {2354 m_pFrameBuffer->attach();2355 }2356 2357 void UIFrameBuffer::detach()2358 {2359 m_pFrameBuffer->detach();2360 }2361 2362 uchar* UIFrameBuffer::address()2363 {2364 return m_pFrameBuffer->address();2365 }2366 2367 ulong UIFrameBuffer::width() const2368 {2369 return m_pFrameBuffer->width();2370 }2371 2372 ulong UIFrameBuffer::height() const2373 {2374 return m_pFrameBuffer->height();2375 }2376 2377 ulong UIFrameBuffer::bitsPerPixel() const2378 {2379 return m_pFrameBuffer->bitsPerPixel();2380 }2381 2382 ulong UIFrameBuffer::bytesPerLine() const2383 {2384 return m_pFrameBuffer->bytesPerLine();2385 }2386 2387 UIVisualStateType UIFrameBuffer::visualState() const2388 {2389 return m_pFrameBuffer->visualState();2390 }2391 2392 void UIFrameBuffer::setView(UIMachineView *pMachineView)2393 {2394 m_pFrameBuffer->setView(pMachineView);2395 }2396 2397 void UIFrameBuffer::setMarkAsUnused(bool fUnused)2398 {2399 m_pFrameBuffer->setMarkAsUnused(fUnused);2400 }2401 2402 QSize UIFrameBuffer::scaledSize() const2403 {2404 return m_pFrameBuffer->scaledSize();2405 }2406 2407 void UIFrameBuffer::setScaledSize(const QSize &size /* = QSize() */)2408 {2409 m_pFrameBuffer->setScaledSize(size);2410 }2411 2412 int UIFrameBuffer::convertHostXTo(int iX) const2413 {2414 return m_pFrameBuffer->convertHostXTo(iX);2415 }2416 2417 int UIFrameBuffer::convertHostYTo(int iY) const2418 {2419 return m_pFrameBuffer->convertHostXTo(iY);2420 }2421 2422 double UIFrameBuffer::scaleFactor() const2423 {2424 return m_pFrameBuffer->scaleFactor();2425 }2426 2427 void UIFrameBuffer::setScaleFactor(double dScaleFactor)2428 {2429 m_pFrameBuffer->setScaleFactor(dScaleFactor);2430 }2431 2432 double UIFrameBuffer::devicePixelRatio() const2433 {2434 return m_pFrameBuffer->devicePixelRatio();2435 }2436 2437 void UIFrameBuffer::setDevicePixelRatio(double dDevicePixelRatio)2438 {2439 m_pFrameBuffer->setDevicePixelRatio(dDevicePixelRatio);2440 }2441 2442 double UIFrameBuffer::devicePixelRatioActual() const2443 {2444 return m_pFrameBuffer->devicePixelRatioActual();2445 }2446 2447 void UIFrameBuffer::setDevicePixelRatioActual(double dDevicePixelRatioActual)2448 {2449 m_pFrameBuffer->setDevicePixelRatioActual(dDevicePixelRatioActual);2450 }2451 2452 bool UIFrameBuffer::useUnscaledHiDPIOutput() const2453 {2454 return m_pFrameBuffer->useUnscaledHiDPIOutput();2455 }2456 2457 void UIFrameBuffer::setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput)2458 {2459 m_pFrameBuffer->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput);2460 }2461 2462 ScalingOptimizationType UIFrameBuffer::scalingOptimizationType() const2463 {2464 return m_pFrameBuffer->scalingOptimizationType();2465 }2466 2467 void UIFrameBuffer::setScalingOptimizationType(ScalingOptimizationType type)2468 {2469 m_pFrameBuffer->setScalingOptimizationType(type);2470 }2471 2472 void UIFrameBuffer::handleNotifyChange(int iWidth, int iHeight)2473 {2474 m_pFrameBuffer->handleNotifyChange(iWidth, iHeight);2475 }2476 2477 void UIFrameBuffer::handlePaintEvent(QPaintEvent *pEvent)2478 {2479 m_pFrameBuffer->handlePaintEvent(pEvent);2480 }2481 2482 void UIFrameBuffer::handleSetVisibleRegion(const QRegion ®ion)2483 {2484 m_pFrameBuffer->handleSetVisibleRegion(region);2485 }2486 2487 void UIFrameBuffer::performResize(int iWidth, int iHeight)2488 {2489 m_pFrameBuffer->performResize(iWidth, iHeight);2490 }2491 2492 void UIFrameBuffer::performRescale()2493 {2494 m_pFrameBuffer->performRescale();2495 }2496 2497 void UIFrameBuffer::viewportResized(QResizeEvent *pEvent)2498 {2499 m_pFrameBuffer->viewportResized(pEvent);2500 }2501 2502 2517 #include "UIFrameBuffer.moc" -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h
r98103 r98838 55 55 public: 56 56 57 /** Frame-buffer constructor. */57 /** Constructs frame-buffer. */ 58 58 UIFrameBuffer(); 59 60 /** Frame-buffer destructor. */ 61 ~UIFrameBuffer(); 59 /** Destructs frame-buffer. */ 60 virtual ~UIFrameBuffer() RT_OVERRIDE; 62 61 63 62 /** Frame-buffer initialization. … … 141 140 private: 142 141 142 /** Prepares everything. */ 143 void prepare(); 144 /** Cleanups everything. */ 145 void cleanup(); 146 143 147 /** Holds the frame-buffer private instance. */ 144 148 ComObjPtr<UIFrameBufferPrivate> m_pFrameBuffer; -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
r98700 r98838 247 247 // not 3D overlay itself, so for auto scale-up mode we have to take that into account. 248 248 if (!fUseUnscaledHiDPIOutput) 249 dScaleFactorFor3D *= frameBuffer()->devicePixelRatioActual();249 dScaleFactorFor3D *= dDevicePixelRatioActual; 250 250 #endif /* VBOX_WS_WIN || VBOX_WS_X11 */ 251 251 uimachine()->notifyScaleFactorChange(m_uScreenId, … … 1200 1200 pFrameBuffer->setView(this); 1201 1201 /* Mark frame-buffer as used again: */ 1202 LogRelFlow(("GUI: UIMachineView::prepareFrameBuffer: Start EMT callbacks accepting for screen: %d\n", screenId()));1202 LogRelFlow(("GUI: UIMachineView::prepareFrameBuffer: Restart EMT callbacks accepting for screen: %d\n", screenId())); 1203 1203 pFrameBuffer->setMarkAsUnused(false); 1204 1204 /* And remember our choice: */ … … 1210 1210 /* Create new frame-buffer: */ 1211 1211 m_pFrameBuffer = new UIFrameBuffer; 1212 frameBuffer()->init(this); 1213 1214 /* Take scaling optimization type into account: */ 1215 frameBuffer()->setScalingOptimizationType(gEDataManager->scalingOptimizationType(uiCommon().managedVMUuid())); 1216 1217 /* Acquire selected scale-factor: */ 1218 double dScaleFactor = gEDataManager->scaleFactor(uiCommon().managedVMUuid(), m_uScreenId); 1219 1220 /* Take the device-pixel-ratio into account: */ 1221 const double dDevicePixelRatioFormal = UIDesktopWidgetWatchdog::devicePixelRatio(machineWindow()); 1222 const double dDevicePixelRatioActual = UIDesktopWidgetWatchdog::devicePixelRatioActual(machineWindow()); 1223 const bool fUseUnscaledHiDPIOutput = dScaleFactor != dDevicePixelRatioActual; 1224 dScaleFactor = fUseUnscaledHiDPIOutput ? dScaleFactor : 1.0; 1225 1226 /* Assign frame-buffer with new values: */ 1227 frameBuffer()->setDevicePixelRatio(dDevicePixelRatioFormal); 1228 frameBuffer()->setDevicePixelRatioActual(dDevicePixelRatioActual); 1229 frameBuffer()->setScaleFactor(dScaleFactor); 1230 frameBuffer()->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput); 1231 1232 /* Propagate the scale-factor related attributes to 3D service if necessary: */ 1233 bool fAccelerate3DEnabled = false; 1234 uimachine()->acquireWhetherAccelerate3DEnabled(fAccelerate3DEnabled); 1235 if (fAccelerate3DEnabled) 1236 { 1237 double dScaleFactorFor3D = dScaleFactor; 1238 #if defined(VBOX_WS_WIN) || defined(VBOX_WS_X11) 1239 // WORKAROUND: 1240 // On Windows and Linux opposing to macOS it's only Qt which can auto scale up, 1241 // not 3D overlay itself, so for auto scale-up mode we have to take that into account. 1242 if (!fUseUnscaledHiDPIOutput) 1243 dScaleFactorFor3D *= dDevicePixelRatioActual; 1244 #endif /* VBOX_WS_WIN || VBOX_WS_X11 */ 1245 uimachine()->notifyScaleFactorChange(m_uScreenId, 1246 (uint32_t)(dScaleFactorFor3D * VBOX_OGL_SCALE_FACTOR_MULTIPLIER), 1247 (uint32_t)(dScaleFactorFor3D * VBOX_OGL_SCALE_FACTOR_MULTIPLIER)); 1248 uimachine()->notifyHiDPIOutputPolicyChange(fUseUnscaledHiDPIOutput); 1249 } 1250 1251 /* Perform frame-buffer rescaling: */ 1252 frameBuffer()->performRescale(); 1253 1212 /* Init it's view: */ 1213 m_pFrameBuffer->init(this); 1214 LogRelFlow(("GUI: UIMachineView::prepareFrameBuffer: Start EMT callbacks accepting for screen: %d\n", screenId())); 1215 /* Apply machine-view scale-factor: */ 1216 applyMachineViewScaleFactor(); 1254 1217 /* Associate uisession with frame-buffer finally: */ 1255 1218 uisession()->setFrameBuffer(screenId(), frameBuffer()); … … 1257 1220 1258 1221 /* Make sure frame-buffer was prepared: */ 1259 Assert ReturnVoid(frameBuffer());1222 AssertPtrReturnVoid(frameBuffer()); 1260 1223 1261 1224 /* Reattach to IDisplay: */
Note:
See TracChangeset
for help on using the changeset viewer.