VirtualBox

Changeset 55187 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Apr 10, 2015 3:52:50 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
99493
Message:

FE/Qt: 6278: Scaling support: Per-VM extra-data flag 'GUI/Scaling/Optimization' supporting 'None' and 'Performance' values. 'None' is now the default one and implies smooth scaling transformation instead of fast and furious used before.

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h

    r55170 r55187  
    9494template<> bool canConvert<MouseCapturePolicy>();
    9595template<> bool canConvert<GuruMeditationHandlerType>();
     96template<> bool canConvert<ScalingOptimizationType>();
    9697template<> bool canConvert<HiDPIOptimizationType>();
    9798#ifndef Q_WS_MAC
     
    178179template<> QString toInternalString(const GuruMeditationHandlerType &guruMeditationHandlerType);
    179180template<> GuruMeditationHandlerType fromInternalString<GuruMeditationHandlerType>(const QString &strGuruMeditationHandlerType);
     181template<> QString toInternalString(const ScalingOptimizationType &optimizationType);
     182template<> ScalingOptimizationType fromInternalString<ScalingOptimizationType>(const QString &strOptimizationType);
    180183template<> QString toInternalString(const HiDPIOptimizationType &optimizationType);
    181184template<> HiDPIOptimizationType fromInternalString<HiDPIOptimizationType>(const QString &strOptimizationType);
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp

    r55170 r55187  
    6262template<> bool canConvert<MouseCapturePolicy>() { return true; }
    6363template<> bool canConvert<GuruMeditationHandlerType>() { return true; }
     64template<> bool canConvert<ScalingOptimizationType>() { return true; }
    6465template<> bool canConvert<HiDPIOptimizationType>() { return true; }
    6566#ifndef Q_WS_MAC
     
    14111412}
    14121413
     1414/* QString <= ScalingOptimizationType: */
     1415template<> QString toInternalString(const ScalingOptimizationType &optimizationType)
     1416{
     1417    QString strResult;
     1418    switch (optimizationType)
     1419    {
     1420        case ScalingOptimizationType_None:        strResult = "None"; break;
     1421        case ScalingOptimizationType_Performance: strResult = "Performance"; break;
     1422        default:
     1423        {
     1424            AssertMsgFailed(("No text for type=%d", optimizationType));
     1425            break;
     1426        }
     1427    }
     1428    return strResult;
     1429}
     1430
     1431/* ScalingOptimizationType <= QString: */
     1432template<> ScalingOptimizationType fromInternalString<ScalingOptimizationType>(const QString &strOptimizationType)
     1433{
     1434    /* Here we have some fancy stuff allowing us
     1435     * to search through the keys using 'case-insensitive' rule: */
     1436    QStringList keys;      QList<ScalingOptimizationType> values;
     1437    keys << "None";        values << ScalingOptimizationType_None;
     1438    keys << "Performance"; values << ScalingOptimizationType_Performance;
     1439    /* 'None' type for empty/unknown words: */
     1440    if (!keys.contains(strOptimizationType, Qt::CaseInsensitive))
     1441        return ScalingOptimizationType_None;
     1442    /* Corresponding type for known words: */
     1443    return values.at(keys.indexOf(QRegExp(strOptimizationType, Qt::CaseInsensitive)));
     1444}
     1445
    14131446/* QString <= HiDPIOptimizationType: */
    14141447template<> QString toInternalString(const HiDPIOptimizationType &optimizationType)
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp

    r55170 r55187  
    143143const char* UIExtraDataDefs::GUI_HidLedsSync = "GUI/HidLedsSync";
    144144const char* UIExtraDataDefs::GUI_ScaleFactor = "GUI/ScaleFactor";
     145const char* UIExtraDataDefs::GUI_Scaling_Optimization = "GUI/Scaling/Optimization";
    145146
    146147/* Virtual Machine: Information dialog: */
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h

    r55170 r55187  
    247247        /** Holds the scale-factor. */
    248248        extern const char* GUI_ScaleFactor;
     249        /** Holds the scaling optimization type. */
     250        extern const char* GUI_Scaling_Optimization;
    249251    /** @} */
    250252
     
    622624};
    623625
     626/** Runtime UI: Scaling optimization types. */
     627enum ScalingOptimizationType
     628{
     629    ScalingOptimizationType_None,
     630    ScalingOptimizationType_Performance
     631};
     632
    624633/** Runtime UI: HiDPI optimization types. */
    625634enum HiDPIOptimizationType
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp

    r55170 r55187  
    17961796           << GUI_GuruMeditationHandler
    17971797           << GUI_HidLedsSync
    1798            << GUI_ScaleFactor
     1798           << GUI_ScaleFactor << GUI_Scaling_Optimization
    17991799           << GUI_InformationWindowGeometry
    18001800           << GUI_DefaultCloseAction << GUI_RestrictedCloseActions
     
    33903390    /* Set corresponding extra-data value: */
    33913391    setExtraDataString(GUI_ScaleFactor, QString::number(dScaleFactor), strID);
     3392}
     3393
     3394ScalingOptimizationType UIExtraDataManager::scalingOptimizationType(const QString &strID)
     3395{
     3396    return gpConverter->fromInternalString<ScalingOptimizationType>(extraDataString(GUI_Scaling_Optimization, strID));
    33923397}
    33933398
     
    36923697        else if (strKey == GUI_ScaleFactor)
    36933698            emit sigScaleFactorChange(strMachineID);
     3699        /* Scaling optimization type change: */
     3700        else if (strKey == GUI_Scaling_Optimization)
     3701            emit sigScalingOptimizationTypeChange(strMachineID);
     3702        /* Unscaled HiDPI Output mode change: */
    36943703        else if (strKey == GUI_HiDPI_UnscaledOutput)
    36953704            emit sigUnscaledHiDPIOutputModeChange(strMachineID);
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h

    r55170 r55187  
    7878    /** Notifies about the scale-factor change. */
    7979    void sigScaleFactorChange(const QString &strMachineID);
     80
     81    /** Notifies about the scaling optimization type change. */
     82    void sigScalingOptimizationTypeChange(const QString &strMachineID);
    8083
    8184    /** Notifies about unscaled HiDPI output mode change. */
     
    475478        /** Defines the @a dScaleFactor. */
    476479        void setScaleFactor(double dScaleFactor, const QString &strID);
     480
     481        /** Returns the scaling optimization type. */
     482        ScalingOptimizationType scalingOptimizationType(const QString &strID);
    477483    /** @} */
    478484
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp

    r55139 r55187  
    159159    void setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput) { m_fUseUnscaledHiDPIOutput = fUseUnscaledHiDPIOutput; }
    160160
    161     /** Return HiDPI frame-buffer optimization type. */
     161    /** Returns frame-buffer scaling optimization type. */
     162    ScalingOptimizationType scalingOptimizationType() const { return m_enmScalingOptimizationType; }
     163    /** Defines frame-buffer scaling optimization type: */
     164    void setScalingOptimizationType(ScalingOptimizationType type) { m_enmScalingOptimizationType = type; }
     165
     166    /** Returns HiDPI frame-buffer optimization type. */
    162167    HiDPIOptimizationType hiDPIOptimizationType() const { return m_hiDPIOptimizationType; }
    163     /** Define HiDPI frame-buffer optimization type: */
    164     void setHiDPIOptimizationType(HiDPIOptimizationType optimizationType) { m_hiDPIOptimizationType = optimizationType; }
     168    /** Defines HiDPI frame-buffer optimization type: */
     169    void setHiDPIOptimizationType(HiDPIOptimizationType type) { m_hiDPIOptimizationType = type; }
    165170
    166171    DECLARE_NOT_AGGREGATABLE(UIFrameBufferPrivate)
     
    285290    void paintSeamless(QPaintEvent *pEvent);
    286291
     292    /** Returns the transformation mode corresponding to the passed ScalingOptimizationType. */
     293    static Qt::TransformationMode transformationMode(ScalingOptimizationType type);
     294
    287295    /** Erases corresponding @a rect with @a painter. */
    288296    static void eraseImageRect(QPainter &painter, const QRect &rect,
     
    293301    static void drawImageRect(QPainter &painter, const QImage &image, const QRect &rect,
    294302                              int iContentsShiftX, int iContentsShiftY,
     303                              ScalingOptimizationType enmScalingOptimizationType,
    295304                              bool fUseUnscaledHiDPIOutput,
    296305                              HiDPIOptimizationType hiDPIOptimizationType,
     
    342351    /** Holds the scale-factor used by the scaled-size. */
    343352    double m_dScaleFactor;
     353    /** Holds the scaling optimization type used by the scaling mechanism. */
     354    ScalingOptimizationType m_enmScalingOptimizationType;
    344355    /** Holds the coordinate-system for the scale-factor above. */
    345356    QTransform m_transform;
     
    524535    , m_fAutoEnabled(false)
    525536    , m_dScaleFactor(1.0)
     537    , m_enmScalingOptimizationType(ScalingOptimizationType_None)
    526538    , m_dBackingScaleFactor(1.0)
    527539    , m_fUseUnscaledHiDPIOutput(false)
     
    13281340        scaledImage = m_image.copy();
    13291341        /* And scaling the image to predefined scaled-factor: */
    1330         scaledImage = scaledImage.scaled(m_scaledSize, Qt::IgnoreAspectRatio, Qt::FastTransformation);
     1342        scaledImage = scaledImage.scaled(m_scaledSize, Qt::IgnoreAspectRatio,
     1343                                         transformationMode(scalingOptimizationType()));
    13311344    }
    13321345    /* Finally we are choosing image to paint from: */
     
    13541367    drawImageRect(painter, sourceImage, paintRect,
    13551368                  m_pMachineView->contentsX(), m_pMachineView->contentsY(),
    1356                   useUnscaledHiDPIOutput(), hiDPIOptimizationType(), backingScaleFactor());
     1369                  scalingOptimizationType(), useUnscaledHiDPIOutput(),
     1370                  hiDPIOptimizationType(), backingScaleFactor());
    13571371}
    13581372
     
    13681382        scaledImage = m_image.copy();
    13691383        /* And scaling the image to predefined scaled-factor: */
    1370         scaledImage = scaledImage.scaled(m_scaledSize, Qt::IgnoreAspectRatio, Qt::FastTransformation);
     1384        scaledImage = scaledImage.scaled(m_scaledSize, Qt::IgnoreAspectRatio,
     1385                                         transformationMode(scalingOptimizationType()));
    13711386    }
    13721387    /* Finally we are choosing image to paint from: */
     
    14201435    drawImageRect(painter, sourceImage, paintRect,
    14211436                  m_pMachineView->contentsX(), m_pMachineView->contentsY(),
    1422                   useUnscaledHiDPIOutput(), hiDPIOptimizationType(), backingScaleFactor());
     1437                  scalingOptimizationType(), useUnscaledHiDPIOutput(),
     1438                  hiDPIOptimizationType(), backingScaleFactor());
     1439}
     1440
     1441/* static */
     1442Qt::TransformationMode UIFrameBufferPrivate::transformationMode(ScalingOptimizationType type)
     1443{
     1444    switch (type)
     1445    {
     1446        case ScalingOptimizationType_Performance: return Qt::FastTransformation;
     1447        default: break;
     1448    }
     1449    return Qt::SmoothTransformation;
    14231450}
    14241451
     
    14721499void UIFrameBufferPrivate::drawImageRect(QPainter &painter, const QImage &image, const QRect &rect,
    14731500                                         int iContentsShiftX, int iContentsShiftY,
     1501                                         ScalingOptimizationType enmScalingOptimizationType,
    14741502                                         bool fUseUnscaledHiDPIOutput,
    14751503                                         HiDPIOptimizationType hiDPIOptimizationType,
     
    15011529            /* Fast scale sub-pixmap (2nd copy involved): */
    15021530            subPixmap = subPixmap.scaled(subPixmap.size() * dBackingScaleFactor,
    1503                                          Qt::IgnoreAspectRatio, Qt::FastTransformation);
     1531                                         Qt::IgnoreAspectRatio, transformationMode(enmScalingOptimizationType));
    15041532        }
    15051533
     
    16711699}
    16721700
     1701ScalingOptimizationType UIFrameBuffer::scalingOptimizationType() const
     1702{
     1703    return m_pFrameBuffer->scalingOptimizationType();
     1704}
     1705
     1706void UIFrameBuffer::setScalingOptimizationType(ScalingOptimizationType type)
     1707{
     1708    m_pFrameBuffer->setScalingOptimizationType(type);
     1709}
     1710
    16731711HiDPIOptimizationType UIFrameBuffer::hiDPIOptimizationType() const
    16741712{
     
    16761714}
    16771715
    1678 void UIFrameBuffer::setHiDPIOptimizationType(HiDPIOptimizationType optimizationType)
    1679 {
    1680     m_pFrameBuffer->setHiDPIOptimizationType(optimizationType);
     1716void UIFrameBuffer::setHiDPIOptimizationType(HiDPIOptimizationType type)
     1717{
     1718    m_pFrameBuffer->setHiDPIOptimizationType(type);
    16811719}
    16821720
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h

    r54590 r55187  
    115115    void setUseUnscaledHiDPIOutput(bool fUseUnscaledHiDPIOutput);
    116116
    117     /** Return HiDPI frame-buffer optimization type. */
     117    /** Returns the frame-buffer scaling optimization type. */
     118    ScalingOptimizationType scalingOptimizationType() const;
     119    /** Defines the frame-buffer scaling optimization type. */
     120    void setScalingOptimizationType(ScalingOptimizationType type);
     121
     122    /** Returns HiDPI frame-buffer optimization type. */
    118123    HiDPIOptimizationType hiDPIOptimizationType() const;
    119     /** Define HiDPI frame-buffer optimization type: */
    120     void setHiDPIOptimizationType(HiDPIOptimizationType optimizationType);
     124    /** Defines HiDPI frame-buffer optimization type: */
     125    void setHiDPIOptimizationType(HiDPIOptimizationType type);
    121126
    122127    /** Handles frame-buffer notify-change-event. */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r54865 r55187  
    402402}
    403403
     404void UIMachineView::sltHandleScalingOptimizationChange(const QString &strMachineID)
     405{
     406    /* Skip unrelated machine IDs: */
     407    if (strMachineID != vboxGlobal().managedVMUuid())
     408        return;
     409
     410    /* Take the scale-factor into account: */
     411    frameBuffer()->setScalingOptimizationType(gEDataManager->scalingOptimizationType(vboxGlobal().managedVMUuid()));
     412
     413    /* Update viewport: */
     414    viewport()->update();
     415}
     416
    404417void UIMachineView::sltHandleUnscaledHiDPIOutputModeChange(const QString &strMachineID)
    405418{
     
    675688    connect(gEDataManager, SIGNAL(sigScaleFactorChange(const QString&)),
    676689            this, SLOT(sltHandleScaleFactorChange(const QString&)));
     690    /* Scaling-optimization change: */
     691    connect(gEDataManager, SIGNAL(sigScalingOptimizationTypeChange(const QString&)),
     692            this, SLOT(sltHandleScalingOptimizationChange(const QString&)));
    677693    /* Unscaled HiDPI output mode change: */
    678694    connect(gEDataManager, SIGNAL(sigUnscaledHiDPIOutputModeChange(const QString&)),
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h

    r54590 r55187  
    122122    /** Handles the scale-factor change. */
    123123    void sltHandleScaleFactorChange(const QString &strMachineID);
     124
     125    /** Handles the scaling-optimization change. */
     126    void sltHandleScalingOptimizationChange(const QString &strMachineID);
    124127
    125128    /** Handles the unscaled HiDPI output mode change. */
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