VirtualBox

Changeset 98838 in vbox


Ignore:
Timestamp:
Mar 6, 2023 11:14:05 AM (2 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:10322: Runtime UI: Reworking UIFrameBuffer stuff; Extending prepare/cleanup cascade a bit; Reusing some of existing code in prepare procedure.

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  
    23372337UIFrameBuffer::UIFrameBuffer()
    23382338{
     2339    prepare();
     2340}
     2341
     2342UIFrameBuffer::~UIFrameBuffer()
     2343{
     2344    cleanup();
     2345}
     2346
     2347HRESULT UIFrameBuffer::init(UIMachineView *pMachineView)
     2348{
     2349    return m_pFrameBuffer->init(pMachineView);
     2350}
     2351
     2352void UIFrameBuffer::attach()
     2353{
     2354    m_pFrameBuffer->attach();
     2355}
     2356
     2357void UIFrameBuffer::detach()
     2358{
     2359    m_pFrameBuffer->detach();
     2360}
     2361
     2362uchar* UIFrameBuffer::address()
     2363{
     2364    return m_pFrameBuffer->address();
     2365}
     2366
     2367ulong UIFrameBuffer::width() const
     2368{
     2369    return m_pFrameBuffer->width();
     2370}
     2371
     2372ulong UIFrameBuffer::height() const
     2373{
     2374    return m_pFrameBuffer->height();
     2375}
     2376
     2377ulong UIFrameBuffer::bitsPerPixel() const
     2378{
     2379    return m_pFrameBuffer->bitsPerPixel();
     2380}
     2381
     2382ulong UIFrameBuffer::bytesPerLine() const
     2383{
     2384    return m_pFrameBuffer->bytesPerLine();
     2385}
     2386
     2387UIVisualStateType UIFrameBuffer::visualState() const
     2388{
     2389    return m_pFrameBuffer->visualState();
     2390}
     2391
     2392void UIFrameBuffer::setView(UIMachineView *pMachineView)
     2393{
     2394    m_pFrameBuffer->setView(pMachineView);
     2395}
     2396
     2397void UIFrameBuffer::setMarkAsUnused(bool fUnused)
     2398{
     2399    m_pFrameBuffer->setMarkAsUnused(fUnused);
     2400}
     2401
     2402QSize UIFrameBuffer::scaledSize() const
     2403{
     2404    return m_pFrameBuffer->scaledSize();
     2405}
     2406
     2407void UIFrameBuffer::setScaledSize(const QSize &size /* = QSize() */)
     2408{
     2409    m_pFrameBuffer->setScaledSize(size);
     2410}
     2411
     2412int UIFrameBuffer::convertHostXTo(int iX) const
     2413{
     2414    return m_pFrameBuffer->convertHostXTo(iX);
     2415}
     2416
     2417int UIFrameBuffer::convertHostYTo(int iY) const
     2418{
     2419    return m_pFrameBuffer->convertHostXTo(iY);
     2420}
     2421
     2422double UIFrameBuffer::scaleFactor() const
     2423{
     2424    return m_pFrameBuffer->scaleFactor();
     2425}
     2426
     2427void UIFrameBuffer::setScaleFactor(double dScaleFactor)
     2428{
     2429    m_pFrameBuffer->setScaleFactor(dScaleFactor);
     2430}
     2431
     2432double UIFrameBuffer::devicePixelRatio() const
     2433{
     2434    return m_pFrameBuffer->devicePixelRatio();
     2435}
     2436
     2437void UIFrameBuffer::setDevicePixelRatio(double dDevicePixelRatio)
     2438{
     2439    m_pFrameBuffer->setDevicePixelRatio(dDevicePixelRatio);
     2440}
     2441
     2442double UIFrameBuffer::devicePixelRatioActual() const
     2443{
     2444    return m_pFrameBuffer->devicePixelRatioActual();
     2445}
     2446
     2447void UIFrameBuffer::setDevicePixelRatioActual(double dDevicePixelRatioActual)
     2448{
     2449    m_pFrameBuffer->setDevicePixelRatioActual(dDevicePixelRatioActual);
     2450}
     2451
     2452bool UIFrameBuffer::useUnscaledHiDPIOutput() const
     2453{
     2454    return m_pFrameBuffer->useUnscaledHiDPIOutput();
     2455}
     2456
     2457void UIFrameBuffer::setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput)
     2458{
     2459    m_pFrameBuffer->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput);
     2460}
     2461
     2462ScalingOptimizationType UIFrameBuffer::scalingOptimizationType() const
     2463{
     2464    return m_pFrameBuffer->scalingOptimizationType();
     2465}
     2466
     2467void UIFrameBuffer::setScalingOptimizationType(ScalingOptimizationType type)
     2468{
     2469    m_pFrameBuffer->setScalingOptimizationType(type);
     2470}
     2471
     2472void UIFrameBuffer::handleNotifyChange(int iWidth, int iHeight)
     2473{
     2474    m_pFrameBuffer->handleNotifyChange(iWidth, iHeight);
     2475}
     2476
     2477void UIFrameBuffer::handlePaintEvent(QPaintEvent *pEvent)
     2478{
     2479    m_pFrameBuffer->handlePaintEvent(pEvent);
     2480}
     2481
     2482void UIFrameBuffer::handleSetVisibleRegion(const QRegion &region)
     2483{
     2484    m_pFrameBuffer->handleSetVisibleRegion(region);
     2485}
     2486
     2487void UIFrameBuffer::performResize(int iWidth, int iHeight)
     2488{
     2489    m_pFrameBuffer->performResize(iWidth, iHeight);
     2490}
     2491
     2492void UIFrameBuffer::performRescale()
     2493{
     2494    m_pFrameBuffer->performRescale();
     2495}
     2496
     2497void UIFrameBuffer::viewportResized(QResizeEvent *pEvent)
     2498{
     2499    m_pFrameBuffer->viewportResized(pEvent);
     2500}
     2501
     2502void UIFrameBuffer::prepare()
     2503{
     2504    /* Creates COM object we are linked to: */
    23392505    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
     2511void UIFrameBuffer::cleanup()
     2512{
     2513    /* Detach COM object we are linked to: */
    23442514    m_pFrameBuffer.setNull();
    23452515}
    23462516
    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 &region)
    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 
    25022517#include "UIFrameBuffer.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h

    r98103 r98838  
    5555public:
    5656
    57     /** Frame-buffer constructor. */
     57    /** Constructs frame-buffer. */
    5858    UIFrameBuffer();
    59 
    60     /** Frame-buffer destructor. */
    61     ~UIFrameBuffer();
     59    /** Destructs frame-buffer. */
     60    virtual ~UIFrameBuffer() RT_OVERRIDE;
    6261
    6362    /** Frame-buffer initialization.
     
    141140private:
    142141
     142    /** Prepares everything. */
     143    void prepare();
     144    /** Cleanups everything. */
     145    void cleanup();
     146
    143147    /** Holds the frame-buffer private instance. */
    144148    ComObjPtr<UIFrameBufferPrivate> m_pFrameBuffer;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r98700 r98838  
    247247        // not 3D overlay itself, so for auto scale-up mode we have to take that into account.
    248248        if (!fUseUnscaledHiDPIOutput)
    249             dScaleFactorFor3D *= frameBuffer()->devicePixelRatioActual();
     249            dScaleFactorFor3D *= dDevicePixelRatioActual;
    250250#endif /* VBOX_WS_WIN || VBOX_WS_X11 */
    251251        uimachine()->notifyScaleFactorChange(m_uScreenId,
     
    12001200        pFrameBuffer->setView(this);
    12011201        /* 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()));
    12031203        pFrameBuffer->setMarkAsUnused(false);
    12041204        /* And remember our choice: */
     
    12101210        /* Create new frame-buffer: */
    12111211        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();
    12541217        /* Associate uisession with frame-buffer finally: */
    12551218        uisession()->setFrameBuffer(screenId(), frameBuffer());
     
    12571220
    12581221    /* Make sure frame-buffer was prepared: */
    1259     AssertReturnVoid(frameBuffer());
     1222    AssertPtrReturnVoid(frameBuffer());
    12601223
    12611224    /* Reattach to IDisplay: */
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