VirtualBox

Changeset 53447 in vbox


Ignore:
Timestamp:
Dec 4, 2014 6:54:02 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
97165
Message:

FE/Qt: Mac OS X: 6278: Support for unscaled HiDPI (Retina) video-output.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp

    r53372 r53447  
    120120const char* UIExtraDataDefs::GUI_Accelerate2D_PixformatAYUV = "GUI/Accelerate2D/PixformatAYUV";
    121121#endif /* VBOX_WITH_VIDEOHWACCEL */
     122const char* UIExtraDataDefs::GUI_HiDPI_UnscaledOutput = "GUI/HiDPI/UnscaledOutput";
    122123const char* UIExtraDataDefs::GUI_HiDPI_Optimization = "GUI/HiDPI/Optimization";
    123124const char* UIExtraDataDefs::GUI_ShowMiniToolBar = "GUI/ShowMiniToolBar";
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h

    r53406 r53447  
    207207        extern const char* GUI_Accelerate2D_PixformatAYUV;
    208208#endif /* VBOX_WITH_VIDEOHWACCEL */
     209        /** Holds whether Runtime UI should use unscaled HiDPI output. */
     210        extern const char* GUI_HiDPI_UnscaledOutput;
    209211        /** Holds Runtime UI HiDPI optimization type. */
    210212        extern const char* GUI_HiDPI_Optimization;
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp

    r53401 r53447  
    17811781           << GUI_Accelerate2D_PixformatYUY2 << GUI_Accelerate2D_PixformatAYUV
    17821782#endif /* VBOX_WITH_VIDEOHWACCEL */
     1783           << GUI_HiDPI_UnscaledOutput
    17831784           << GUI_HiDPI_Optimization
    17841785           << GUI_ShowMiniToolBar << GUI_MiniToolBarAutoHide << GUI_MiniToolBarAlignment
     
    30903091}
    30913092#endif /* VBOX_WITH_VIDEOHWACCEL */
     3093
     3094bool UIExtraDataManager::useUnscaledHiDPIOutput(const QString &strID)
     3095{
     3096    /* 'False' unless feature allowed: */
     3097    return isFeatureAllowed(GUI_HiDPI_UnscaledOutput, strID);
     3098}
    30923099
    30933100HiDPIOptimizationType UIExtraDataManager::hiDPIOptimizationType(const QString &strID)
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h

    r53401 r53447  
    394394#endif /* VBOX_WITH_VIDEOHWACCEL */
    395395
     396        /** Returns whether Runtime UI should use unscaled HiDPI output. */
     397        bool useUnscaledHiDPIOutput(const QString &strID);
     398
    396399        /** Returns Runtime UI HiDPI optimization type. */
    397400        HiDPIOptimizationType hiDPIOptimizationType(const QString &strID);
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp

    r53446 r53447  
    6363    , m_fAutoEnabled(false)
    6464    , m_dScaleFactor(gEDataManager->scaleFactor(vboxGlobal().managedVMUuid()))
     65    , m_fUseUnscaledHiDPIOutput(gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
    6566    , m_hiDPIOptimizationType(HiDPIOptimizationType_None)
    6667    , m_dBackingScaleFactor(1.0)
     
    817818    QRect paintRect = pEvent->rect();
    818819
     820    /* Take the backing-scale-factor into account: */
     821    if (useUnscaledHiDPIOutput() && backingScaleFactor() > 1.0)
     822    {
     823        paintRect.moveTo(paintRect.topLeft() * backingScaleFactor());
     824        paintRect.setSize(paintRect.size() * backingScaleFactor());
     825    }
     826
    819827    /* Scaled image is NULL by default: */
    820828    QImage scaledImage;
     
    842850    drawImageRect(painter, sourceImage, paintRect,
    843851                  m_pMachineView->contentsX(), m_pMachineView->contentsY(),
    844                   hiDPIOptimizationType(), backingScaleFactor());
     852                  useUnscaledHiDPIOutput(), hiDPIOptimizationType(), backingScaleFactor());
    845853}
    846854
     
    849857    /* Prepare the 'paint' rectangle: */
    850858    QRect paintRect = pEvent->rect();
     859
     860    /* Take the backing-scale-factor into account: */
     861    if (useUnscaledHiDPIOutput() && backingScaleFactor() > 1.0)
     862    {
     863        paintRect.moveTo(paintRect.topLeft() * backingScaleFactor());
     864        paintRect.setSize(paintRect.size() * backingScaleFactor());
     865    }
    851866
    852867    /* Scaled image is NULL by default: */
     
    910925            drawImageRect(painter, sourceImage, rect,
    911926                          m_pMachineView->contentsX(), m_pMachineView->contentsY(),
    912                           hiDPIOptimizationType(), backingScaleFactor());
     927                          useUnscaledHiDPIOutput(), hiDPIOptimizationType(), backingScaleFactor());
    913928        }
    914929    }
     
    918933void UIFrameBuffer::drawImageRect(QPainter &painter, const QImage &image, const QRect &rect,
    919934                                  int iContentsShiftX, int iContentsShiftY,
     935                                  bool fUseUnscaledHiDPIOutput,
    920936                                  HiDPIOptimizationType hiDPIOptimizationType,
    921937                                  double dBackingScaleFactor)
     
    943959        /* Should we
    944960         * perform logical HiDPI scaling and optimize it for performance? */
    945         if (hiDPIOptimizationType == HiDPIOptimizationType_Performance)
     961        if (!fUseUnscaledHiDPIOutput && hiDPIOptimizationType == HiDPIOptimizationType_Performance)
    946962        {
    947963            /* Fast scale sub-pixmap (2nd copy involved): */
     
    953969#  ifdef VBOX_GUI_WITH_HIDPI
    954970        /* Should we
     971         * do not perform logical HiDPI scaling or
    955972         * perform logical HiDPI scaling and optimize it for performance? */
    956         if (hiDPIOptimizationType == HiDPIOptimizationType_Performance)
     973        if (fUseUnscaledHiDPIOutput || hiDPIOptimizationType == HiDPIOptimizationType_Performance)
    957974        {
    958975            /* Mark sub-pixmap as HiDPI: */
     
    965982    /* Which point we should draw corresponding sub-pixmap? */
    966983    QPoint paintPoint = rect.topLeft();
     984
     985    /* Take the backing-scale-factor into account: */
     986    if (fUseUnscaledHiDPIOutput && dBackingScaleFactor > 1.0)
     987        paintPoint /= dBackingScaleFactor;
    967988
    968989    /* Draw sub-pixmap: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h

    r53389 r53447  
    213213#endif /* VBOX_WITH_VIDEOHWACCEL */
    214214
     215    /** Returns whether frame-buffer should use unscaled HiDPI output. */
     216    bool useUnscaledHiDPIOutput() const { return m_fUseUnscaledHiDPIOutput; }
     217
    215218    /** Return HiDPI frame-buffer optimization type. */
    216219    HiDPIOptimizationType hiDPIOptimizationType() const { return m_hiDPIOptimizationType; }
     
    243246    static void drawImageRect(QPainter &painter, const QImage &image, const QRect &rect,
    244247                              int iContentsShiftX, int iContentsShiftY,
     248                              bool fUseUnscaledHiDPIOutput,
    245249                              HiDPIOptimizationType hiDPIOptimizationType,
    246250                              double dBackingScaleFactor);
     
    308312    /** @name HiDPI screens related variables.
    309313     * @{ */
     314    /** Holds whether frame-buffer should use unscaled HiDPI output. */
     315    bool m_fUseUnscaledHiDPIOutput;
    310316    /** Holds HiDPI frame-buffer optimization type. */
    311317    HiDPIOptimizationType m_hiDPIOptimizationType;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r53443 r53447  
    185185    AssertMsg(newSize.isValid(), ("Size should be valid!\n"));
    186186
     187#ifdef Q_WS_MAC
     188    /* Take the backing-scale-factor into account: */
     189    if (gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
     190    {
     191        const double dBackingScaleFactor = darwinBackingScaleFactor(machineWindow());
     192        if (dBackingScaleFactor > 1.0)
     193            newSize *= dBackingScaleFactor;
     194    }
     195#endif /* Q_WS_MAC */
     196
    187197    /* Take the scale-factor into account: */
    188198    newSize /= gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
     
    302312                           iHeight * dScaleFactor + 2 * dScaleFactor + 1));
    303313    }
     314
     315#ifdef Q_WS_MAC
     316    /* Take the backing-scale-factor into account: */
     317    if (gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
     318    {
     319        const double dBackingScaleFactor = darwinBackingScaleFactor(machineWindow());
     320        if (dBackingScaleFactor > 1.0)
     321        {
     322            rect.moveTo(rect.topLeft() / dBackingScaleFactor - QPoint(1, 1));
     323            rect.setSize(rect.size() / dBackingScaleFactor + QSize(2, 2));
     324        }
     325    }
     326#endif /* Q_WS_MAC */
    304327
    305328    /* Limit the resulting part by the viewport rectangle: */
     
    669692    QSize size(m_pFrameBuffer->width(), m_pFrameBuffer->height());
    670693
     694#ifdef Q_WS_MAC
     695    /* Take the backing-scale-factor into account: */
     696    if (gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
     697    {
     698        const double dBackingScaleFactor = darwinBackingScaleFactor(machineWindow());
     699        if (dBackingScaleFactor > 1.0)
     700            size /= dBackingScaleFactor;
     701    }
     702#endif /* Q_WS_MAC */
     703
    671704    /* Take the scale-factor into account: */
    672705    size *= gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
     
    752785        size = QSize(800, 600);
    753786
     787#ifdef Q_WS_MAC
     788    /* Take the backing-scale-factor into account: */
     789    if (gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
     790    {
     791        const double dBackingScaleFactor = darwinBackingScaleFactor(machineWindow());
     792        if (dBackingScaleFactor > 1.0)
     793            size /= dBackingScaleFactor;
     794    }
     795#endif /* Q_WS_MAC */
     796
    754797    /* Take the scale-factor into account: */
    755798    size *= gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
     
    859902
    860903    QSize v = QSize(frameBuffer()->width(), frameBuffer()->height());
     904
     905#ifdef Q_WS_MAC
     906    /* Take the backing-scale-factor into account: */
     907    if (gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
     908    {
     909        const double dBackingScaleFactor = darwinBackingScaleFactor(machineWindow());
     910        if (dBackingScaleFactor > 1.0)
     911            v /= dBackingScaleFactor;
     912    }
     913#endif /* Q_WS_MAC */
    861914
    862915    /* Take the scale-factor into account: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp

    r53249 r53447  
    969969            cpnt.setX(cpnt.x() + xShift);
    970970            cpnt.setY(cpnt.y() + yShift);
     971
     972#ifdef Q_WS_MAC
     973            /* Take the backing-scale-factor into account: */
     974            if (gEDataManager->useUnscaledHiDPIOutput(vboxGlobal().managedVMUuid()))
     975            {
     976                const double dBackingScaleFactor = darwinBackingScaleFactor(m_windows.value(uScreenId));
     977                if (dBackingScaleFactor > 1.0)
     978                    cpnt *= dBackingScaleFactor;
     979            }
     980#endif /* Q_WS_MAC */
    971981
    972982            /* Post absolute mouse-event into guest: */
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