VirtualBox

Changeset 81171 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 9, 2019 8:54:46 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
133807
Message:

FE/Qt: bugref:6143. Adding multimedia keys layout file

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/VirtualBox_xml.qrc

    r79596 r81171  
    88        <file alias="us_international.xml">xml/us_international.xml</file>
    99        <file alias="numpad.xml">xml/numpad.xml</file>               
     10        <file alias="multimedia_keys.xml">xml/multimedia_keys.xml</file>
    1011        <file alias="german.xml">xml/german.xml</file>
    1112        <file alias="us.xml">xml/us.xml</file>
  • trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboard.cpp

    r81125 r81171  
    102102    KeyboardRegion_Main = 0,
    103103    KeyboardRegion_NumPad,
    104     KeyboardRegion_Multimedia,
    105     KeyboardRegion_OSMenu,
     104    KeyboardRegion_MultimediaKeys,
     105    KeyboardRegion_OSMenuKeys,
    106106    KeyboardRegion_Max
    107107};
     
    302302    int defaultHeight() const;
    303303
     304    int MaximumHeight() const;
     305
    304306    QVector<UISoftKeyboardKey> &keys();
    305307    const QVector<UISoftKeyboardKey> &keys() const;
     
    313315    int m_iDefaultWidth;
    314316    int m_iDefaultHeight;
     317    int m_iMaximumHeight;
     318
    315319    QVector<UISoftKeyboardKey> m_keys;
    316320    int m_iSpaceHeightAfter;
     
    477481
    478482    void drawText(int iKeyPosition, const QRect &keyGeometry, QPainter &painter);
    479     void drawTextInRect(int iKeyPosition, const QRect &keyGeometry, QPainter &painter);
     483    void drawTextInRect(const UISoftKeyboardKey &key, QPainter &painter);
    480484
    481485private:
     
    609613      * Window key press for start menu opening. This works orthogonal to left clicks.*/
    610614    void               modifierKeyPressRelease(UISoftKeyboardKey *pKey, bool fRelease);
    611     bool               loadPhysicalLayout(const QString &strLayoutFileName, bool isNumPad = false);
     615    bool               loadPhysicalLayout(const QString &strLayoutFileName, KeyboardRegion keyboardRegion = KeyboardRegion_Main);
    612616    bool               loadKeyboardLayout(const QString &strLayoutName);
    613617    void               prepareObjects();
     
    629633    QVector<UISoftKeyboardPhysicalLayout> m_physicalLayouts;
    630634    UISoftKeyboardPhysicalLayout          m_numPadLayout;
     635    UISoftKeyboardPhysicalLayout          m_multiMediaKeysLayout;
    631636    QVector<UISoftKeyboardLayout>         m_layouts;
    632637    UISoftKeyboardLayout *m_pCurrentKeyboardLayout;
     
    647652    bool  m_fHideOSMenuKeys;
    648653    bool  m_fHideNumPad;
     654    bool  m_fHideMultimediaKeys;
    649655};
    650656
     
    18571863}
    18581864
    1859 void UISoftKeyboardLayout::drawTextInRect(int iKeyPosition, const QRect &keyGeometry, QPainter &painter)
    1860 {
     1865void UISoftKeyboardLayout::drawTextInRect(const UISoftKeyboardKey &key, QPainter &painter)
     1866{
     1867    int iKeyPosition = key.position();
     1868    const QRect &keyGeometry = key.keyGeometry();
    18611869    QFont painterFont(painter.font());
    1862     int iFontSize = 25;
     1870    int iFontSize = 30;
    18631871
    18641872    const QString &strBaseCaption = baseCaption(iKeyPosition);
     
    18941902            iBottomWidth = qMax(iBottomWidth, fontMetrics.width(strPart));
    18951903        int iTextWidth =  2 * iMargin + qMax(iTopWidth, iBottomWidth);
    1896         int iTextHeight = 2 * iMargin + 2 * fontMetrics.height();
     1904        int iTextHeight = 0;
     1905
     1906        if (key.keyboardRegion() == KeyboardRegion_MultimediaKeys)
     1907            iTextHeight = 2 * iMargin + fontMetrics.height();
     1908        else
     1909            iTextHeight = 2 * iMargin + 2 * fontMetrics.height();
    18971910
    18981911        if (iTextWidth >= keyGeometry.width() || iTextHeight >= keyGeometry.height())
     
    19091922    painter.drawText(iMargin, iMargin + fontMetrics.height(), QString::number(iKeyPosition));
    19101923#else
    1911     QRect textRect(iMargin, iMargin,
    1912                    keyGeometry.width() - 2 * iMargin,
    1913                    keyGeometry.height() - 2 * iMargin);
     1924    QRect textRect;
     1925    if (key.keyboardRegion() == KeyboardRegion_MultimediaKeys)
     1926        textRect = QRect(2 * iMargin, iMargin,
     1927                         keyGeometry.width() - 2 * iMargin,
     1928                         keyGeometry.height() - 2 * iMargin);
     1929    else
     1930        textRect = QRect(iMargin, iMargin,
     1931                         keyGeometry.width() - 2 * iMargin,
     1932                         keyGeometry.height() - 2 * iMargin);
    19141933
    19151934    painter.drawText(textRect, Qt::AlignLeft | Qt::AlignTop, strTopleftString);
     
    20382057    , m_fHideOSMenuKeys(false)
    20392058    , m_fHideNumPad(false)
     2059    , m_fHideMultimediaKeys(false)
    20402060{
    20412061    prepareObjects();
     
    20892109        {
    20902110            UISoftKeyboardKey &key = keys[j];
    2091             if (m_fHideOSMenuKeys && key.keyboardRegion() == KeyboardRegion_OSMenu)
     2111
     2112            if (m_fHideOSMenuKeys && key.keyboardRegion() == KeyboardRegion_OSMenuKeys)
    20922113                continue;
    20932114
    20942115            if (m_fHideNumPad && key.keyboardRegion() == KeyboardRegion_NumPad)
     2116                continue;
     2117
     2118            if (m_fHideMultimediaKeys && key.keyboardRegion() == KeyboardRegion_MultimediaKeys)
    20952119                continue;
    20962120
     
    21112135            painter.drawPolygon(key.polygon());
    21122136
    2113             m_pCurrentKeyboardLayout->drawTextInRect(key.position(), key.keyGeometry(), painter);
     2137            m_pCurrentKeyboardLayout->drawTextInRect(key, painter);
    21142138
    21152139            if (key.type() != KeyType_Ordinary)
     
    26122636}
    26132637
    2614 bool UISoftKeyboardWidget::loadPhysicalLayout(const QString &strLayoutFileName, bool isNumPad /* = false */)
     2638bool UISoftKeyboardWidget::loadPhysicalLayout(const QString &strLayoutFileName, KeyboardRegion keyboardRegion /* = KeyboardRegion_Main */)
    26152639{
    26162640    if (strLayoutFileName.isEmpty())
     
    26182642    UIPhysicalLayoutReader reader;
    26192643    UISoftKeyboardPhysicalLayout *newPhysicalLayout = 0;
    2620     if (!isNumPad)
     2644    if (keyboardRegion == KeyboardRegion_Main)
    26212645    {
    26222646        m_physicalLayouts.append(UISoftKeyboardPhysicalLayout());
    26232647        newPhysicalLayout = &(m_physicalLayouts.back());
    26242648    }
     2649    else if (keyboardRegion == KeyboardRegion_NumPad)
     2650        newPhysicalLayout = &(m_numPadLayout);
     2651    else if (keyboardRegion == KeyboardRegion_MultimediaKeys)
     2652        newPhysicalLayout = &(m_multiMediaKeysLayout);
    26252653    else
    2626         newPhysicalLayout = &(m_numPadLayout);
     2654        return false;
    26272655
    26282656    if (!reader.parseXMLFile(strLayoutFileName, *newPhysicalLayout))
     
    26322660    }
    26332661
    2634     if (isNumPad)
    2635     {
    2636         /* Mark all the key as numpad keys: */
    2637         for (int i = 0; i < m_numPadLayout.rows().size(); ++i)
    2638         {
    2639             UISoftKeyboardRow &row = m_numPadLayout.rows()[i];
    2640             for (int j = 0; j < row.keys().size(); ++j)
    2641             {
    2642                 row.keys()[j].setKeyboardRegion(KeyboardRegion_NumPad);
    2643             }
    2644         }
     2662    for (int i = 0; i < newPhysicalLayout->rows().size(); ++i)
     2663    {
     2664        UISoftKeyboardRow &row = newPhysicalLayout->rows()[i];
     2665        for (int j = 0; j < row.keys().size(); ++j)
     2666            row.keys()[j].setKeyboardRegion(keyboardRegion);
     2667    }
     2668
     2669    if (keyboardRegion == KeyboardRegion_NumPad || keyboardRegion == KeyboardRegion_MultimediaKeys)
    26452670        return true;
    2646     }
     2671
    26472672    /* Go thru all the keys row by row and construct their geometries: */
    26482673    int iY = m_iTopMargin;
     
    26512676    const QVector<UISoftKeyboardRow> &numPadRows = m_numPadLayout.rows();
    26522677    QVector<UISoftKeyboardRow> &rows = newPhysicalLayout->rows();
    2653     int iKeyCount = 0;
     2678
     2679    /* Prepend the multimedia rows to the layout */
     2680    const QVector<UISoftKeyboardRow> &multimediaRows = m_multiMediaKeysLayout.rows();
     2681    for (int i = multimediaRows.size() - 1; i >= 0; --i)
     2682        rows.prepend(multimediaRows[i]);
     2683
    26542684    for (int i = 0; i < rows.size(); ++i)
    26552685    {
    26562686        UISoftKeyboardRow &row = rows[i];
    2657         /* Start adding the numpad keys after the 0th row: */
    2658         if (i > 0)
     2687        /* Insert the numpad rows at the end of keyboard rows starting with appending 0th numpad row to the
     2688           end of (1 + multimediaRows.size())th layout row: */
     2689        if (i > multimediaRows.size())
    26592690        {
    2660             int iNumPadRowIndex = i - 1;
    2661             if (iNumPadRowIndex < numPadRows.size())
     2691            int iNumPadRowIndex = i - (1 + multimediaRows.size());
     2692            if (iNumPadRowIndex >= 0 && iNumPadRowIndex < numPadRows.size())
    26622693            {
    26632694                for (int m = 0; m < numPadRows[iNumPadRowIndex].keys().size(); ++m)
     
    26712702        for (int j = 0; j < row.keys().size(); ++j)
    26722703        {
    2673             ++iKeyCount;
    26742704            UISoftKeyboardKey &key = (row.keys())[j];
    26752705            if (key.position() == iScrollLockPosition ||
     
    27772807void UISoftKeyboardWidget::loadLayouts()
    27782808{
    2779     /* Load physical layouts from resources: */
    2780     loadPhysicalLayout(":/numpad.xml", true);
     2809    /* Load physical layouts from resources: Numpad and multimedia layout files should be read first
     2810       since we insert these to other layouts: */
     2811    loadPhysicalLayout(":/numpad.xml", KeyboardRegion_NumPad);
     2812    loadPhysicalLayout(":/multimedia_keys.xml", KeyboardRegion_MultimediaKeys);
    27812813    QStringList physicalLayoutNames;
    27822814    physicalLayoutNames << ":/101_ansi.xml"
     
    30553087        {
    30563088            if (m_xmlReader.readElementText() == "true")
    3057                 key.setKeyboardRegion(KeyboardRegion_OSMenu);
     3089                key.setKeyboardRegion(KeyboardRegion_OSMenuKeys);
    30583090        }
    30593091        else
  • trunk/src/VBox/Frontends/VirtualBox/xml/multimedia_keys.xml

    r81097 r81171  
    11<?xml version="1.0"?>
    2 <physicallayout defaultHeight="50" defaultWidth="50">
    3     <name>numpad</name>
    4     <id>7ae32801-76c2-4aad-be0a-fd160eb50f26</id>
     2<physicallayout defaultHeight="30" defaultWidth="50">
     3    <name>multimedia keys</name>
     4    <id>80b4c26e-43fc-44f8-b515-351cff9269ce</id>
    55    <row>
    6         <key>
    7             <position>90</position>
    8             <usageid>0x53</usageid>
    9             <usagepage>0x7</usagepage>
    10             <type>lock</type>
    11             <scancode>0x45</scancode>
     6        <key><!-- WWW back -->
     7            <position>300</position>
     8            <usageid>0x2224</usageid>
     9            <usagepage>0x0C</usagepage>
     10            <scancode>0x20</scancode>
    1211        </key>
    1312        <key>
    14             <position>95</position>
     13            <position>301</position>
    1514            <usageid>0x54</usageid>
    1615            <usagepage>0x7</usagepage>
     
    1918        </key>
    2019        <key>
    21             <position>100</position>
     20            <position>302</position>
    2221            <usageid>0x55</usageid>
    2322            <usagepage>0x7</usagepage>
    2423            <scancode>0x37</scancode>
    2524        </key>
    26         <key>
    27             <position>105</position>
    28             <usageid>0x56</usageid>
    29             <usagepage>0x7</usagepage>
     25        <key><!-- Mute -->
     26            <position>303</position>
     27            <usageid>0xE2</usageid>
     28            <usagepage>0x0C</usagepage>
    3029            <scancode>0x4a</scancode>
    3130        </key>
    3231    </row>
    33     <row>
    34         <key>
    35             <position>91</position>
    36             <usageid>0x5f</usageid>
    37             <usagepage>0x7</usagepage>
    38             <scancode>0x47</scancode>
    39         </key>
    40         <key>
    41             <position>96</position>
    42             <usageid>0x60</usageid>
    43             <usagepage>0x7</usagepage>
    44             <scancode>0x48</scancode>
    45         </key>
    46         <key>
    47             <position>101</position>
    48             <usageid>0x61</usageid>
    49             <usagepage>0x7</usagepage>
    50             <scancode>0x49</scancode>
    51         </key>
    52         <key>
    53             <position>106</position>
    54             <usageid>0x57</usageid>
    55             <usagepage>0x7</usagepage>
    56             <scancode>0x4e</scancode>
    57             <height>105</height>
    58         </key>
    59     </row>
    60     <row>
    61         <key>
    62             <position>92</position>
    63             <usageid>0x5c</usageid>
    64             <usagepage>0x7</usagepage>
    65             <scancode>0x4b</scancode>
    66         </key>
    67         <key>
    68             <position>97</position>
    69             <usageid>0x5d</usageid>
    70             <usagepage>0x7</usagepage>
    71             <scancode>0x4c</scancode>
    72         </key>
    73         <key>
    74             <position>102</position>
    75             <usageid>0x5e</usageid>
    76             <usagepage>0x7</usagepage>
    77             <scancode>0x4d</scancode>
    78         </key>
    79     </row>
    80     <row>
    81         <key>
    82             <position>93</position>
    83             <usageid>0x59</usageid>
    84             <usagepage>0x7</usagepage>
    85             <scancode>0x4f</scancode>
    86         </key>
    87         <key>
    88             <position>98</position>
    89             <usageid>0x5a</usageid>
    90             <usagepage>0x7</usagepage>
    91             <scancode>0x50</scancode>
    92         </key>
    93         <key>
    94             <position>103</position>
    95             <usageid>0x5b</usageid>
    96             <usagepage>0x7</usagepage>
    97             <scancode>0x51</scancode>
    98         </key>
    99         <key>
    100             <position>108</position>
    101             <usageid>0x58</usageid>
    102             <usagepage>0x7</usagepage>
    103             <scancode>0x1c</scancode>
    104             <scancodeprefix>0xe0</scancodeprefix>
    105             <height>105</height>
    106         </key>
    107     </row>
    108     <row>
    109         <key>
    110             <position>99</position>
    111             <usageid>0x62</usageid>
    112             <usagepage>0x7</usagepage>
    113             <scancode>0x52</scancode>
    114             <width>105</width>
    115         </key>
    116         <key>
    117             <position>104</position>
    118             <usageid>0x63</usageid>
    119             <usagepage>0x7</usagepage>
    120             <scancode>0x53</scancode>
    121         </key>
    122     </row>
    12332</physicallayout>
  • trunk/src/VBox/Frontends/VirtualBox/xml/us_international.xml

    r79722 r81171  
    44    <id>3c7b7be7-4d2a-4f65-a21e-208ba2e4ecaf</id>
    55    <physicallayoutid>{368efa94-3744-48c5-9d5a-59c2f15fe5ec}</physicallayoutid>
     6    <!-- multimedia keys -->
     7    <key>
     8        <position>300</position>
     9        <basecaption>⬅</basecaption>
     10        <shiftcaption></shiftcaption>
     11        <altgrcaption></altgrcaption>
     12        <shiftaltgrcaption></shiftaltgrcaption>
     13    </key>
     14    <key>
     15        <position>303</position>
     16        <basecaption>🔇</basecaption>
     17        <shiftcaption></shiftcaption>
     18        <altgrcaption></altgrcaption>
     19        <shiftaltgrcaption></shiftaltgrcaption>
     20    </key>
    621    <key>
    722        <position>110</position>
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