VirtualBox

Changeset 54104 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Feb 6, 2015 6:49:01 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
98075
Message:

FE/Qt: Runtime UI: UIFrameBuffer refactoring for 6278 and 3635 (step 2): Separate performRescale interface to handle scaling stuff.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp

    r54103 r54104  
    8888        prepareConnections();
    8989
    90     /* Resize frame-buffer to default size: */
     90    /* Resize/rescale frame-buffer to the default size: */
    9191    performResize(640, 480);
     92    performRescale();
    9293
    9394#ifdef Q_OS_WIN
     
    761762
    762763    unlock();
    763 
    764     /* Update scaled-size according scale-factor for modes except the 'Scale' one: */
    765     if (m_pMachineView->machineLogic()->visualStateType() != UIVisualStateType_Scale)
    766         setScaledSize(scaleFactor() == 1.0 ? QSize() : QSize((int)(m_iWidth * scaleFactor()), (int)(m_iHeight * scaleFactor())));
     764}
     765
     766void UIFrameBuffer::performRescale()
     767{
     768//    printf("UIFrameBuffer::performRescale\n");
     769
     770    /* Make sure machine-view is assigned: */
     771    AssertPtrReturnVoid(m_pMachineView);
     772
     773    /* Depending on current visual state: */
     774    switch (m_pMachineView->machineLogic()->visualStateType())
     775    {
     776        case UIVisualStateType_Scale:
     777            m_scaledSize = m_scaledSize.width() == m_iWidth && m_scaledSize.height() == m_iHeight ? QSize() : m_scaledSize;
     778            break;
     779        default:
     780            m_scaledSize = scaleFactor() == 1.0 ? QSize() : QSize((int)(m_iWidth * scaleFactor()), (int)(m_iHeight * scaleFactor()));
     781            break;
     782    }
     783
     784    /* Update coordinate-system: */
     785    updateCoordinateSystem();
     786
     787//    printf("UIFrameBuffer::performRescale: Complete: Scale-factor=%f, Scaled-size=%dx%d\n",
     788//           scaleFactor(), scaledSize().width(), scaledSize().height());
    767789}
    768790
     
    776798}
    777799#endif /* VBOX_WITH_VIDEOHWACCEL */
    778 
    779 void UIFrameBuffer::setScaleFactor(double dScaleFactor)
    780 {
    781     /* Remember new scale-factor: */
    782     m_dScaleFactor = dScaleFactor;
    783 
    784     /* Update scaled-size according scale-factor: */
    785     setScaledSize(scaleFactor() == 1.0 ? QSize() : QSize((int)(m_iWidth * scaleFactor()), (int)(m_iHeight * scaleFactor())));
    786 
    787     /* Update coordinate-system: */
    788     updateCoordinateSystem();
    789 }
    790 
    791 void UIFrameBuffer::setBackingScaleFactor(double dBackingScaleFactor)
    792 {
    793     /* Remember new backing-scale-factor: */
    794     m_dBackingScaleFactor = dBackingScaleFactor;
    795 
    796     /* Update coordinate-system: */
    797     updateCoordinateSystem();
    798 }
    799 
    800 void UIFrameBuffer::setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput)
    801 {
    802     /* Remember new use-unscaled-HiDPI-output value: */
    803     m_fUseUnscaledHiDPIOutput = fUseUnscaledHiDPIOutput;
    804 
    805     /* Update coordinate-system: */
    806     updateCoordinateSystem();
    807 }
    808800
    809801void UIFrameBuffer::prepareConnections()
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h

    r54103 r54104  
    208208    /** Performs frame-buffer resizing. */
    209209    virtual void performResize(int iWidth, int iHeight);
     210    /** Performs frame-buffer rescaling. */
     211    virtual void performRescale();
    210212
    211213#ifdef VBOX_WITH_VIDEOHWACCEL
     
    221223    double scaleFactor() const { return m_dScaleFactor; }
    222224    /** Define the scale-factor used by the frame-buffer. */
    223     void setScaleFactor(double dScaleFactor);
     225    void setScaleFactor(double dScaleFactor) { m_dScaleFactor = dScaleFactor; }
    224226
    225227    /** Returns backing-scale-factor used by HiDPI frame-buffer. */
    226228    double backingScaleFactor() const { return m_dBackingScaleFactor; }
    227229    /** Defines backing-scale-factor used by HiDPI frame-buffer. */
    228     void setBackingScaleFactor(double dBackingScaleFactor);
     230    void setBackingScaleFactor(double dBackingScaleFactor) { m_dBackingScaleFactor = dBackingScaleFactor; }
    229231
    230232    /** Returns whether frame-buffer should use unscaled HiDPI output. */
    231233    bool useUnscaledHiDPIOutput() const { return m_fUseUnscaledHiDPIOutput; }
    232234    /** Defines whether frame-buffer should use unscaled HiDPI output. */
    233     void setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput);
     235    void setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput) { m_fUseUnscaledHiDPIOutput = fUseUnscaledHiDPIOutput; }
    234236
    235237    /** Return HiDPI frame-buffer optimization type. */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r54100 r54104  
    183183    const bool fUseUnscaledHiDPIOutput = gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid());
    184184    frameBuffer()->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput);
     185
     186    /* Perform frame-buffer rescaling: */
     187    frameBuffer()->performRescale();
    185188}
    186189
     
    234237                                   frameBuffer()->height() != (ulong)iHeight;
    235238
    236         /* Adjust 'scale' mode to current machine-view size: */
     239        /* Perform frame-buffer mode-change: */
     240        frameBuffer()->handleNotifyChange(iWidth, iHeight);
     241
     242        /* For 'scale' mode: */
    237243        if (visualStateType() == UIVisualStateType_Scale)
    238244        {
     
    240246            frameBuffer()->setScaledSize(size());
    241247        }
    242 
    243         /* Perform frame-buffer mode-change: */
    244         frameBuffer()->handleNotifyChange(iWidth, iHeight);
    245 
    246         /* Scale-mode doesn't need this.. */
    247         if (visualStateType() != UIVisualStateType_Scale)
     248        /* For other than 'scale' mode: */
     249        else
    248250        {
    249251            /* Adjust maximum-size restriction for machine-view: */
     
    267269                machineWindow()->normalizeGeometry(true /* adjust position */);
    268270        }
     271
     272        /* Perform frame-buffer rescaling: */
     273        frameBuffer()->performRescale();
    269274
    270275#ifdef Q_WS_MAC
     
    362367                                      (uint32_t)(dScaleFactor * VBOX_OGL_SCALE_FACTOR_MULTIPLIER));
    363368
    364     /* Adjust frame-buffer, machine-window and guest-screen size if necessary: */
    365     sltHandleNotifyChange(frameBuffer()->width(), frameBuffer()->height());
    366     frameBuffer()->performResize(frameBuffer()->width(), frameBuffer()->height());
    367     machineWindow()->normalizeGeometry(true /* adjust position */);
     369    /* Handle scale attributes change: */
     370    handleScaleChange();
     371    /* Adjust guest-screen size: */
    368372    adjustGuestScreenSize();
    369373
     
    383387    frameBuffer()->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput);
    384388
    385     /* Adjust frame-buffer, machine-window and guest-screen size if necessary: */
    386     sltHandleNotifyChange(frameBuffer()->width(), frameBuffer()->height());
    387     frameBuffer()->performResize(frameBuffer()->width(), frameBuffer()->height());
    388     machineWindow()->normalizeGeometry(true /* adjust position */);
     389    /* Handle scale attributes change: */
     390    handleScaleChange();
     391    /* Adjust guest-screen size: */
    389392    adjustGuestScreenSize();
    390393
     
    558561        m_pFrameBuffer->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput);
    559562
     563        /* Perform frame-buffer rescaling: */
     564        m_pFrameBuffer->performRescale();
     565
    560566        /* Associate uisession with frame-buffer finally: */
    561567        uisession()->setFrameBuffer(screenId(), m_pFrameBuffer);
     
    598604        }
    599605
    600         /* If we have a valid size, resize the framebuffer. */
     606        /* If we have a valid size, resize/rescale the frame-buffer. */
    601607        if (size.width() > 0 && size.height() > 0)
     608        {
    602609            frameBuffer()->performResize(size.width(), size.height());
     610            frameBuffer()->performRescale();
     611        }
    603612    }
    604613}
     
    844853    /* Return size: */
    845854    return size;
     855}
     856
     857void UIMachineView::handleScaleChange()
     858{
     859    LogRel(("UIMachineView::handleScaleChange: Screen=%d.\n",
     860            (unsigned long)m_uScreenId));
     861
     862    /* If machine-window is visible: */
     863    if (uisession()->isScreenVisible(m_uScreenId))
     864    {
     865        /* For 'scale' mode: */
     866        if (visualStateType() == UIVisualStateType_Scale)
     867        {
     868            /* Assign new frame-buffer logical-size: */
     869            frameBuffer()->setScaledSize(size());
     870        }
     871        /* For other than 'scale' mode: */
     872        else
     873        {
     874            /* Adjust maximum-size restriction for machine-view: */
     875            setMaximumSize(sizeHint());
     876
     877            /* Disable the resize hint override hack: */
     878            m_sizeHintOverride = QSize(-1, -1);
     879
     880            /* Force machine-window update own layout: */
     881            QCoreApplication::sendPostedEvents(0, QEvent::LayoutRequest);
     882
     883            /* Update machine-view sliders: */
     884            updateSliders();
     885
     886            /* By some reason Win host forgets to update machine-window central-widget
     887             * after main-layout was updated, let's do it for all the hosts: */
     888            machineWindow()->centralWidget()->update();
     889
     890            /* Normalize 'normal' machine-window geometry: */
     891            if (visualStateType() == UIVisualStateType_Normal)
     892                machineWindow()->normalizeGeometry(true /* adjust position */);
     893        }
     894
     895        /* Perform frame-buffer rescaling: */
     896        frameBuffer()->performRescale();
     897    }
     898
     899    LogRelFlow(("UIMachineView::handleScaleChange: Complete for Screen=%d.\n",
     900                (unsigned long)m_uScreenId));
    846901}
    847902
     
    12331288            case QEvent::Move:
    12341289            {
    1235                 /* Update backing-scale-factor for underlying frame-buffer: */
    12361290                if (m_pFrameBuffer)
     1291                {
     1292                    /* Update backing-scale-factor for underlying frame-buffer: */
    12371293                    m_pFrameBuffer->setBackingScaleFactor(darwinBackingScaleFactor(machineWindow()));
     1294                    /* Perform frame-buffer rescaling: */
     1295                    m_pFrameBuffer->performRescale();
     1296                }
    12381297                break;
    12391298            }
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h

    r53962 r54104  
    196196    QSize guestSizeHint();
    197197
     198    /** Handles machine-view scale changes. */
     199    void handleScaleChange();
     200
    198201    /* Protected setters: */
    199202    /** Store a guest size hint value to extra data, called on switching to
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp

    r53963 r54104  
    6666    saveMachineViewSettings();
    6767
    68     /* Return scaled-size to 'default' mode: */
    69     UIMachineView::applyMachineViewScaleFactor();
    70 
    7168    /* Cleanup frame buffer: */
    7269    cleanupFrameBuffer();
     
    7673{
    7774    /* Adjust frame-buffer scaled-size: */
    78     frameBuffer()->setScaledSize(viewport()->size());
     75    frameBuffer()->setScaledSize(size());
     76    frameBuffer()->performRescale();
    7977
    8078    /* If scaled-size is valid: */
     
    150148    const bool fUseUnscaledHiDPIOutput = gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid());
    151149    frameBuffer()->setUseUnscaledHiDPIOutput(fUseUnscaledHiDPIOutput);
     150
     151    /* Perform frame-buffer rescaling: */
     152    frameBuffer()->performRescale();
    152153}
    153154
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette