VirtualBox

Ignore:
Timestamp:
Jul 2, 2019 7:18:59 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131717
Message:

FE/Qt: bugref:6143. Using dynamic font sizes for key captions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboard.cpp

    r79456 r79460  
    443443
    444444    void drawText(int iKeyPosition, const QRect &keyGeometry, QPainter &painter);
     445    void drawTextInRect(int iKeyPosition, const QRect &keyGeometry, QPainter &painter);
    445446
    446447private:
     
    16481649{
    16491650    m_keyCapMap[iKeyPosition].m_strBase = strBaseCaption;
     1651    m_keyCapMap[iKeyPosition].m_strBase.replace("\\n", "\n");
    16501652}
    16511653
     
    17011703{
    17021704    return m_uid;
     1705}
     1706
     1707void UISoftKeyboardLayout::drawTextInRect(int iKeyPosition, const QRect &keyGeometry, QPainter &painter)
     1708{
     1709    QFont painterFont(painter.font());
     1710    int iFontSize = 25;
     1711
     1712    const QString &strBaseCaption = baseCaption(iKeyPosition);
     1713    const QString &strShiftCaption = shiftCaption(iKeyPosition);
     1714
     1715    const QString &strShiftAltGrCaption = shiftAltGrCaption(iKeyPosition);
     1716    const QString &strAltGrCaption = altGrCaption(iKeyPosition);
     1717
     1718    const QString &strTopleftString = !strShiftCaption.isEmpty() ? strShiftCaption : strBaseCaption;
     1719    const QString &strBottomleftString = !strShiftCaption.isEmpty() ? strBaseCaption : QString();
     1720
     1721    do
     1722    {
     1723        painterFont.setPixelSize(iFontSize);
     1724        painterFont.setBold(true);
     1725        painter.setFont(painterFont);
     1726        QFontMetrics fontMetrics = painter.fontMetrics();
     1727        int iMargin = 0.25 * fontMetrics.width('X');
     1728
     1729        int iTextWidth = 2 * iMargin + qMax(fontMetrics.width(strTopleftString) + fontMetrics.width(strShiftAltGrCaption),
     1730                                            fontMetrics.width(strBottomleftString) + fontMetrics.width(strAltGrCaption));
     1731        int iTextHeight = 2 * iMargin + 2 * fontMetrics.height();
     1732
     1733        if (iTextWidth >= keyGeometry.width() || iTextHeight >= keyGeometry.height())
     1734            --iFontSize;
     1735        else
     1736            break;
     1737
     1738    }while(iFontSize > 1);
     1739
     1740
     1741    QFontMetrics fontMetrics = painter.fontMetrics();
     1742
     1743    int iMargin = 0.25 * fontMetrics.width('X');
     1744
     1745    QRect textRect(iMargin, iMargin,
     1746                   keyGeometry.width() - 2 * iMargin,
     1747                   keyGeometry.height() - 2 * iMargin);
     1748
     1749
     1750    painter.drawText(textRect, Qt::AlignLeft | Qt::AlignTop, strTopleftString);
     1751    painter.drawText(textRect, Qt::AlignLeft | Qt::AlignBottom, strBottomleftString);
     1752
     1753
     1754    // if (!strShiftCaption.isEmpty() && !strBaseCaption.isEmpty())
     1755    // {
     1756    //     painter.drawText(textRect, Qt::AlignLeft | Qt::AlignTop, strShiftCaption);
     1757    //     painter.drawText(textRect, Qt::AlignLeft | Qt::AlignBottom, strBaseCaption);
     1758    // }
     1759    // else
     1760    //     painter.drawText(textRect, Qt::AlignLeft | Qt::AlignTop, strBaseCaption);
     1761
     1762    painter.drawText(textRect, Qt::AlignRight | Qt::AlignTop, strShiftAltGrCaption);
     1763    painter.drawText(textRect, Qt::AlignRight | Qt::AlignBottom, strAltGrCaption);
     1764
    17031765}
    17041766
     
    18951957            painter.drawPolygon(key.polygon());
    18961958
    1897             m_pCurrentKeyboardLayout->drawText(key.position(), key.keyGeometry(), painter);
     1959            //m_pCurrentKeyboardLayout->drawText(key.position(), key.keyGeometry(), painter);
     1960            m_pCurrentKeyboardLayout->drawTextInRect(key.position(), key.keyGeometry(), painter);
    18981961
    18991962            if (key.type() != UIKeyType_Ordinary)
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