VirtualBox

Changeset 42909 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 21, 2012 3:46:56 PM (12 years ago)
Author:
vboxsync
Message:

FE/Qt: 6234: Support for VM groups: Support for Vista/Win7 DPI font scaling.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp

    r42873 r42909  
    337337
    338338/* static */
    339 int UIGChooserItem::textWidth(const QFont &font, int iCount)
     339int UIGChooserItem::textWidth(const QFont &font, QPaintDevice *pPaintDevice, int iCount)
    340340{
    341341    /* Return text width: */
    342     QFontMetrics fm(font);
     342    QFontMetrics fm(font, pPaintDevice);
    343343    QString strString;
    344344    strString.fill('_', iCount);
     
    347347
    348348/* static */
    349 QString UIGChooserItem::compressText(const QFont &font, QString strText, int iWidth)
     349QString UIGChooserItem::compressText(const QFont &font, QPaintDevice *pPaintDevice, QString strText, int iWidth)
    350350{
    351351    /* Check if passed text is empty: */
     
    354354
    355355    /* Check if passed text feats maximum width: */
    356     QFontMetrics fm(font);
     356    QFontMetrics fm(font, pPaintDevice);
    357357    if (fm.width(strText) <= iWidth)
    358358        return strText;
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h

    r42872 r42909  
    151151
    152152    /* Helpers: Text compression stuff: */
    153     static int textWidth(const QFont &font, int iCount);
    154     static QString compressText(const QFont &font, QString strText, int iWidth);
     153    static int textWidth(const QFont &font, QPaintDevice *pPaintDevice, int iCount);
     154    static QString compressText(const QFont &font, QPaintDevice *pPaintDevice, QString strText, int iWidth);
    155155
    156156private:
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp

    r42879 r42909  
    350350            if (isHovered() && !strMachineCountText.isEmpty())
    351351                iMaximumWidth -= (iMachinePixmapWidth + iMachineCountTextWidth);
    352             return compressText(data(GroupItemData_NameFont).value<QFont>(), m_strName, iMaximumWidth);
     352            return compressText(data(GroupItemData_NameFont).value<QFont>(),
     353                                model()->paintDevice(),
     354                                m_strName, iMaximumWidth);
    353355        }
    354356        case GroupItemData_GroupCountText: return m_groupItems.isEmpty() ? QString() : QString::number(m_groupItems.size());
     
    363365                return QSizeF(0, 0);
    364366            QFont font = data(GroupItemData_NameFont).value<QFont>();
    365             QFontMetrics fm(font);
    366             int iMaximumTextWidth = textWidth(font, 20);
    367             QString strCompressedName = compressText(font, m_strName, iMaximumTextWidth);
     367            QPaintDevice *pPaintDevice = model()->paintDevice();
     368            QFontMetrics fm(font, pPaintDevice);
     369            int iMaximumTextWidth = textWidth(font, pPaintDevice, 20);
     370            QString strCompressedName = compressText(font, pPaintDevice,
     371                                                     m_strName, iMaximumTextWidth);
    368372            return QSize(fm.width(strCompressedName), fm.height());
    369373        }
     
    372376            if (isMainRoot())
    373377                return QSizeF(0, 0);
    374             QFontMetrics fm(data(GroupItemData_NameFont).value<QFont>());
     378            QFontMetrics fm(data(GroupItemData_NameFont).value<QFont>(), model()->paintDevice());
    375379            return QSize(fm.width(data(GroupItemData_Name).toString()) + 2, fm.height());
    376380        }
     
    389393            if (isMainRoot())
    390394                return QSizeF(0, 0);
    391             QFontMetrics fm(data(GroupItemData_InfoFont).value<QFont>());
     395            QFontMetrics fm(data(GroupItemData_InfoFont).value<QFont>(), model()->paintDevice());
    392396            return QSize(fm.width(data(GroupItemData_GroupCountText).toString()), fm.height());
    393397        }
     
    396400            if (isMainRoot())
    397401                return QSizeF(0, 0);
    398             QFontMetrics fm(data(GroupItemData_InfoFont).value<QFont>());
     402            QFontMetrics fm(data(GroupItemData_InfoFont).value<QFont>(), model()->paintDevice());
    399403            return QSize(fm.width(data(GroupItemData_MachineCountText).toString()), fm.height());
    400404        }
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp

    r42872 r42909  
    150150        case MachineItemData_Name:
    151151        {
    152             return compressText(data(MachineItemData_NameFont).value<QFont>(), name(),
    153                                 data(MachineItemData_MaximumNameWidth).toInt());
     152            return compressText(data(MachineItemData_NameFont).value<QFont>(), model()->paintDevice(),
     153                                name(), data(MachineItemData_MaximumNameWidth).toInt());
    154154        }
    155155        case MachineItemData_SnapshotName:
    156156        {
    157             int iBracketWidth = QFontMetrics(data(MachineItemData_SnapshotNameFont).value<QFont>()).width("()");
    158             QString strCompressedName = compressText(data(MachineItemData_SnapshotNameFont).value<QFont>(), snapshotName(),
     157            QPaintDevice *pPaintDevice = model()->paintDevice();
     158            int iBracketWidth = QFontMetrics(data(MachineItemData_SnapshotNameFont).value<QFont>(),
     159                                             pPaintDevice).width("()");
     160            QString strCompressedName = compressText(data(MachineItemData_SnapshotNameFont).value<QFont>(),
     161                                                     pPaintDevice, snapshotName(),
    159162                                                     data(MachineItemData_MaximumSnapshotNameWidth).toInt() - iBracketWidth);
    160163            return QString("(%1)").arg(strCompressedName);
     
    168171        case MachineItemData_NameSize:
    169172        {
    170             QFontMetrics fm(data(MachineItemData_NameFont).value<QFont>());
     173            QFontMetrics fm(data(MachineItemData_NameFont).value<QFont>(), model()->paintDevice());
    171174            return QSize(fm.width(data(MachineItemData_Name).toString()) + 2, fm.height());
    172175        }
     
    174177        {
    175178            QFont font = data(MachineItemData_NameFont).value<QFont>();
    176             return QFontMetrics(font).width(compressText(font, name(), textWidth(font, 15)));
     179            QPaintDevice *pPaintDevice = model()->paintDevice();
     180            return QFontMetrics(font, pPaintDevice).width(compressText(font, pPaintDevice,
     181                                                                       name(), textWidth(font, pPaintDevice, 15)));
    177182        }
    178183        case MachineItemData_MaximumNameWidth:
     
    184189        case MachineItemData_SnapshotNameSize:
    185190        {
    186             QFontMetrics fm(data(MachineItemData_SnapshotNameFont).value<QFont>());
     191            QFontMetrics fm(data(MachineItemData_SnapshotNameFont).value<QFont>(), model()->paintDevice());
    187192            return QSize(fm.width(data(MachineItemData_SnapshotName).toString()) + 2, fm.height());
    188193        }
     
    191196            if (snapshotName().isEmpty())
    192197                return 0;
    193             QFontMetrics fm(data(MachineItemData_SnapshotNameFont).value<QFont>());
     198            QFontMetrics fm(data(MachineItemData_SnapshotNameFont).value<QFont>(), model()->paintDevice());
    194199            int iBracketWidth = fm.width("()");
    195200            int iActualTextWidth = fm.width(snapshotName());
     
    222227        case MachineItemData_StateTextSize:
    223228        {
    224             QFontMetrics fm(data(MachineItemData_StateTextFont).value<QFont>());
     229            QFontMetrics fm(data(MachineItemData_StateTextFont).value<QFont>(), model()->paintDevice());
    225230            return QSize(fm.width(data(MachineItemData_StateText).toString()) + 2, fm.height());
    226231        }
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp

    r42879 r42909  
    138138{
    139139    return m_pScene;
     140}
     141
     142QPaintDevice* UIGChooserModel::paintDevice() const
     143{
     144    if (!m_pScene || m_pScene->views().isEmpty())
     145        return 0;
     146    return m_pScene->views().first();
    140147}
    141148
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.h

    r42851 r42909  
    4545class UIGChooserHandlerKeyboard;
    4646class QTimer;
     47class QPaintDevice;
    4748
    4849/* Context-menu type: */
     
    9798    /* API: Scene getter: */
    9899    QGraphicsScene* scene() const;
     100
     101    /* API: Paint-device getter: */
     102    QPaintDevice* paintDevice() const;
    99103
    100104    /* API: Root stuff: */
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp

    r42906 r42909  
    192192        case ElementData_NameSize:
    193193        {
    194             QFontMetrics fm(data(ElementData_NameFont).value<QFont>());
     194            QFontMetrics fm(data(ElementData_NameFont).value<QFont>(), model()->paintDevice());
    195195            return QSize(fm.width(m_strName), fm.height());
    196196        }
     
    218218            int iSpacing = data(ElementData_Spacing).toInt();
    219219            int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt();
    220             QFontMetrics fm(data(ElementData_TextFont).value<QFont>());
     220            QFontMetrics fm(data(ElementData_TextFont).value<QFont>(), model()->paintDevice());
    221221
    222222            /* Search for the maximum line widths: */
     
    264264            int iMaximumTextWidth = (int)geometry().width() - 3 * iMargin - iSpacing;
    265265            QFont textFont = data(ElementData_TextFont).value<QFont>();
    266             QFontMetrics fm(textFont);
     266            QPaintDevice *pPaintDevice = model()->paintDevice();
     267            QFontMetrics fm(textFont, pPaintDevice);
    267268
    268269            /* Search for the maximum line widths: */
     
    307308                {
    308309                    bool fRightColumnPresent = !line.second.isEmpty();
    309                     QTextLayout *pTextLayout = prepareTextLayout(textFont,
     310                    QTextLayout *pTextLayout = prepareTextLayout(textFont, pPaintDevice,
    310311                                                                 fRightColumnPresent ? line.first + ":" : line.first,
    311312                                                                 iLeftColumnWidth, iLeftColumnHeight);
     
    317318                if (!line.second.isEmpty())
    318319                {
    319                     QTextLayout *pTextLayout = prepareTextLayout(textFont, line.second,
     320                    QTextLayout *pTextLayout = prepareTextLayout(textFont, pPaintDevice, line.second,
    320321                                                                 iRightColumnWidth, iRightColumnHeight);
    321322                    delete pTextLayout;
     
    605606        int iMaximumTextWidth = geometry().width() - 3 * iMargin - iSpacing;
    606607        QFont textFont = data(ElementData_TextFont).value<QFont>();
    607         QFontMetrics fm(textFont);
     608        QPaintDevice *pPaintDevice = model()->paintDevice();
     609        QFontMetrics fm(textFont, pPaintDevice);
    608610
    609611        /* Search for the maximum line widths: */
     
    641643        /* Where to paint? */
    642644        int iMachineTextX = iMachinePixmapX;
    643         int iMachineTextY = iMachinePixmapY + iHeaderHeight + 2 * iMargin;
     645        int iMachineTextY = iMargin + iHeaderHeight + 2 * iMargin;
    644646
    645647        /* For each the line: */
     
    651653            {
    652654                bool fRightColumnPresent = !line.second.isEmpty();
    653                 QTextLayout *pTextLayout = prepareTextLayout(textFont,
     655                QTextLayout *pTextLayout = prepareTextLayout(textFont, pPaintDevice,
    654656                                                             fRightColumnPresent ? line.first + ":" : line.first,
    655657                                                             iLeftColumnWidth, iLeftColumnHeight);
     
    662664            if (!line.second.isEmpty())
    663665            {
    664                 QTextLayout *pTextLayout = prepareTextLayout(textFont, line.second,
    665                                                              iRightColumnWidth, iRightColumnHeight);
     666                QTextLayout *pTextLayout = prepareTextLayout(textFont, pPaintDevice,
     667                                                             line.second, iRightColumnWidth, iRightColumnHeight);
    666668                pTextLayout->draw(pPainter, QPointF(iMachineTextX + iLeftColumnWidth + iSpacing, iMachineTextY));
    667669                delete pTextLayout;
     
    817819
    818820/* static  */
    819 QTextLayout* UIGDetailsElement::prepareTextLayout(const QFont &font, const QString &strText, int iWidth, int &iHeight)
     821QTextLayout* UIGDetailsElement::prepareTextLayout(const QFont &font, QPaintDevice *pPaintDevice,
     822                                                  const QString &strText, int iWidth, int &iHeight)
    820823{
    821824    /* Prepare variables: */
    822     QFontMetrics fm(font);
     825    QFontMetrics fm(font, pPaintDevice);
    823826    int iLeading = fm.leading();
    824827
    825828    /* Create layout; */
    826     QTextLayout *pTextLayout = new QTextLayout(strText, font);
     829    QTextLayout *pTextLayout = new QTextLayout(strText, font, pPaintDevice);
    827830
    828831    /* Configure layout: */
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h

    r42906 r42909  
    186186
    187187    /* Helper: Layout stuff: */
    188     static QTextLayout* prepareTextLayout(const QFont &font, const QString &strText, int iWidth, int &iHeight);
     188    static QTextLayout* prepareTextLayout(const QFont &font, QPaintDevice *pPaintDevice,
     189                                          const QString &strText, int iWidth, int &iHeight);
    189190
    190191    /* Helper: Animation stuff: */
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp

    r42906 r42909  
    6464{
    6565    return m_pScene;
     66}
     67
     68QPaintDevice* UIGDetailsModel::paintDevice() const
     69{
     70    if (!m_pScene || m_pScene->views().isEmpty())
     71        return 0;
     72    return m_pScene->views().first();
    6673}
    6774
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.h

    r42856 r42909  
    6363    /* API: Scene getter: */
    6464    QGraphicsScene* scene() const;
     65
     66    /* API: Paint-device getter: */
     67    QPaintDevice* paintDevice() const;
    6568
    6669    /* API: Item positioning stuff: */
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