VirtualBox

Changeset 86861 in vbox


Ignore:
Timestamp:
Nov 11, 2020 2:15:22 PM (4 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9831. Scaling text browser's font size

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

Legend:

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

    r86812 r86861  
    380380        <file alias="hd_warning_16px.png">images/hd_warning_16px.png</file>
    381381        <file alias="hd_write_16px.png">images/hd_write_16px.png</file>
     382        <file alias="help_browser_plus_32px.png">images/help_browser_plus_32px.png</file>
     383        <file alias="help_browser_minus_32px.png">images/help_browser_minus_32px.png</file>
     384        <file alias="help_browser_reset_32px.png">images/help_browser_reset_32px.png</file>
    382385        <file alias="help_browser_add_bookmark.png">images/help_browser_add_bookmark.png</file>
    383386        <file alias="help_browser_backward_32px.png">images/help_browser_backward_32px.png</file>
  • trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp

    r86844 r86861  
    3434#include <QMenu>
    3535#include <QMouseEvent>
     36#include <QPainter>
    3637#include <QPixmap>
    3738#include <QtPrintSupport/QPrintDialog>
    3839#include <QtPrintSupport/QPrinter>
    3940#include <QPushButton>
    40 #include <QScrollBar>
    4141#include <QSpacerItem>
    42 #include <QStyle>
    4342#include <QSplitter>
    4443#include <QTextBrowser>
    4544#include <QVBoxLayout>
     45#include <QWidgetAction>
    4646#ifdef RT_OS_SOLARIS
    4747# include <QFontDatabase>
     
    5050/* GUI includes: */
    5151#include "UICommon.h"
     52#include "QIAdvancedSlider.h"
    5253#include "QIFileDialog.h"
    5354#include "QITabWidget.h"
     
    7778Q_DECLARE_METATYPE(HelpBrowserTabs);
    7879
    79 const int iBookmarkUrlDataType = 6;
     80static const int iBookmarkUrlDataType = 6;
     81static const QPair<float, float> fontScaleMinMax(0.5f, 3.f);
     82
     83/*********************************************************************************************************************************
     84*   UIFontScaleWidget definition.                                                                                         *
     85*********************************************************************************************************************************/
     86class UIFontScaleWidget : public QIWithRetranslateUI<QWidget>
     87{
     88
     89    Q_OBJECT;
     90
     91signals:
     92
     93    void sigFontPointSizeChanged(int iNewFontPointSize);
     94
     95public:
     96
     97    UIFontScaleWidget(int iInitialFontPointSize, QWidget *pParent = 0);
     98    void setFontPointSize(int iFontPointSize);
     99    int fontPointSize() const;
     100
     101protected:
     102
     103    void retranslateUi() /* override */;
     104
     105private slots:
     106
     107    void sltSetFontPointSize();
     108
     109private:
     110
     111    void prepare();
     112    int fontPercentage() const;
     113    QHBoxLayout  *m_pMainLayout;
     114    QIToolButton *m_pMinusButton;
     115    QIToolButton *m_pResetButton;
     116    QIToolButton *m_pPlusButton;
     117    QIAdvancedSlider *m_pSlider;
     118    QLabel *m_pValueLabel;
     119    int m_iInitialFontPointSize;
     120    int m_iFontPointSize;
     121};
    80122
    81123
     
    185227    void sigOpenLinkInNewTab(const QUrl &url);
    186228    void sigCloseFindInPageWidget();
     229    void sigFontPointSizeChanged(int iFontPointSize);
    187230
    188231public:
     
    193236    void setSource(const QUrl &url, const QString &strError);
    194237    void toggleFindInPageWidget(bool fVisible);
     238    int initialFontPointSize() const;
    195239
    196240public slots:
     
    200244
    201245    void contextMenuEvent(QContextMenuEvent *event) /* override */;
    202     virtual void paintEvent(QPaintEvent *pEvent) /* override */;
    203246    virtual void resizeEvent(QResizeEvent *pEvent) /* override */;
     247    virtual void wheelEvent(QWheelEvent *pEvent) /* override */;
    204248
    205249private slots:
     
    228272    int m_iSelectedMatchIndex;
    229273    int m_iSearchTermLength;
     274    int m_iInitialFontPointSize;
    230275};
    231276
     
    244289    void sigOpenLinkInNewTab(const QUrl &url);
    245290    void sigAddBookmark(const QUrl &url, const QString &strTitle);
     291    void sigFontPointSizeChanged(int iFontPointSize);
    246292
    247293public:
     
    254300    QString documentTitle() const;
    255301    void setToolBarVisible(bool fVisible);
    256     void printCurrent(QPrinter &printer);
     302    void print(QPrinter &printer);
     303    int initialFontPointSize() const;
     304    void setFontPointSize(int iPointSize);
    257305
    258306private slots:
     
    318366    void setToolBarVisible(bool fVisible);
    319367    void printCurrent(QPrinter &printer);
     368    int initialFontPointSize() const;
     369    void setFontPointSize(int iPointSize);
     370
     371protected:
     372
     373    virtual void paintEvent(QPaintEvent *pEvent) /* override */;
    320374
    321375private slots:
     
    325379    void sltHandleTabClose(int iTabIndex);
    326380    void sltHandleCurrentChanged(int iTabIndex);
     381    void sltHandleFontSizeChange(int iFontPointSize);
    327382
    328383private:
     
    332387    void addNewTab(const QUrl &initialUrl);
    333388    const QHelpEngine* m_pHelpEngine;
     389    UIFontScaleWidget *m_pFontScaleWidget;
    334390    QUrl m_homeUrl;
    335391    QStringList m_savedUrlList;
    336392    bool m_fSwitchToNewTab;
    337393};
     394
     395
     396/*********************************************************************************************************************************
     397*   UIFontScaleWidget implementation.                                                                                            *
     398*********************************************************************************************************************************/
     399
     400UIFontScaleWidget::UIFontScaleWidget(int iInitialFontPointSize, QWidget *pParent /* = 0 */)
     401    :QIWithRetranslateUI<QWidget>(pParent)
     402    , m_pMainLayout(0)
     403    , m_pMinusButton(0)
     404    , m_pResetButton(0)
     405    , m_pPlusButton(0)
     406    , m_pSlider(0)
     407    , m_pValueLabel(0)
     408    , m_iInitialFontPointSize(iInitialFontPointSize)
     409    , m_iFontPointSize(iInitialFontPointSize)
     410{
     411    prepare();
     412}
     413
     414void UIFontScaleWidget::setFontPointSize(int iFontPointSize)
     415{
     416    if (m_iFontPointSize == iFontPointSize)
     417        return;
     418    m_iFontPointSize = iFontPointSize;
     419    if (m_pValueLabel && m_iInitialFontPointSize != 0)
     420    {
     421        m_pValueLabel->setText(QString("%1\%").arg(QString::number(fontPercentage())));
     422    }
     423}
     424
     425int UIFontScaleWidget::fontPointSize() const
     426{
     427    return m_iFontPointSize;
     428}
     429
     430void UIFontScaleWidget::retranslateUi()
     431{
     432}
     433
     434void UIFontScaleWidget::prepare()
     435{
     436    setAutoFillBackground(true);
     437    m_pMainLayout = new QHBoxLayout(this);
     438    AssertReturnVoid(m_pMainLayout);
     439    m_pMainLayout->setSpacing(0);
     440    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
     441    m_pMinusButton = new QIToolButton;
     442    m_pResetButton = new QIToolButton;
     443    m_pPlusButton = new QIToolButton;
     444    //m_pSlider = new QIAdvancedSlider;
     445    m_pValueLabel = new QLabel;
     446    AssertReturnVoid(m_pMinusButton &&
     447                     m_pResetButton &&
     448                     m_pPlusButton &&
     449                     m_pValueLabel);
     450
     451    m_pValueLabel->setText(QString("%1\%").arg(QString::number(fontPercentage())));
     452
     453    m_pMinusButton->setIcon(UIIconPool::iconSet(":/help_browser_minus_32px.png"));
     454    m_pResetButton->setIcon(UIIconPool::iconSet(":/help_browser_reset_32px.png"));
     455    m_pPlusButton->setIcon(UIIconPool::iconSet(":/help_browser_plus_32px.png"));
     456
     457    connect(m_pPlusButton, &QIToolButton::pressed, this, &UIFontScaleWidget::sltSetFontPointSize);
     458    connect(m_pMinusButton, &QIToolButton::pressed, this, &UIFontScaleWidget::sltSetFontPointSize);
     459    connect(m_pResetButton, &QIToolButton::pressed, this, &UIFontScaleWidget::sltSetFontPointSize);
     460
     461    m_pMainLayout->addWidget(m_pResetButton);
     462    m_pMainLayout->addWidget(m_pMinusButton);
     463    //m_pMainLayout->addWidget(m_pSlider);
     464    m_pMainLayout->addWidget(m_pValueLabel);
     465    m_pMainLayout->addWidget(m_pPlusButton);
     466}
     467
     468int UIFontScaleWidget::fontPercentage() const
     469{
     470    if (m_iInitialFontPointSize == 0)
     471        return 0;
     472    return 100 * m_iFontPointSize / m_iInitialFontPointSize;
     473}
     474
     475void UIFontScaleWidget::sltSetFontPointSize()
     476{
     477    if (!sender())
     478        return;
     479    int iStep = 2;
     480    int iNewSize = m_iFontPointSize;
     481    if (sender() == m_pMinusButton)
     482        iNewSize -= iStep;
     483    else if (sender() == m_pPlusButton)
     484        iNewSize += iStep;
     485    else if (sender() == m_pResetButton)
     486        iNewSize = m_iInitialFontPointSize;
     487    if (iNewSize >= fontScaleMinMax.second * m_iInitialFontPointSize ||
     488        iNewSize <= fontScaleMinMax.first * m_iInitialFontPointSize)
     489        iNewSize = m_iFontPointSize;
     490    setFontPointSize(iNewSize);
     491    emit sigFontPointSizeChanged(m_iFontPointSize);
     492}
    338493
    339494
     
    587742}
    588743
    589 void UIHelpBrowserTab::printCurrent(QPrinter &printer)
     744void UIHelpBrowserTab::print(QPrinter &printer)
    590745{
    591746    if (m_pContentViewer)
    592     {
    593747        m_pContentViewer->print(&printer);
     748}
     749
     750int UIHelpBrowserTab::initialFontPointSize() const
     751{
     752    if (m_pContentViewer)
     753        return m_pContentViewer->initialFontPointSize();
     754    return 0;
     755}
     756
     757void UIHelpBrowserTab::setFontPointSize(int iPointSize)
     758{
     759    if (m_pContentViewer)
     760    {
     761        if (m_pContentViewer->font().pointSize() == iPointSize)
     762            return;
     763        QFont mFont = m_pContentViewer->font();
     764        mFont.setPointSize(iPointSize);
     765        m_pContentViewer->setFont(mFont);
    594766    }
    595767}
     
    613785    m_pMainLayout->addWidget(m_pContentViewer);
    614786    m_pContentViewer->setOpenExternalLinks(false);
    615 
    616787    connect(m_pContentViewer, &UIHelpBrowserViewer::sourceChanged,
    617788        this, &UIHelpBrowserTab::sigSourceChanged);
     
    624795    connect(m_pContentViewer, &UIHelpBrowserViewer::sigCloseFindInPageWidget,
    625796            this, &UIHelpBrowserTab::sltCloseFindInPageWidget);
     797    connect(m_pContentViewer, &UIHelpBrowserViewer::sigFontPointSizeChanged,
     798            this, &UIHelpBrowserTab::sigFontPointSizeChanged);
    626799
    627800    m_pContentViewer->setSource(initialUrl, m_strPageNotFoundText);
     
    794967    , m_iSearchTermLength(0)
    795968{
     969    m_iInitialFontPointSize = font().pointSize();
    796970    setUndoRedoEnabled(true);
    797971    connect(m_pFindInPageWidget, &UIFindInPageWidget::sigDragging,
     
    8531027}
    8541028
     1029int UIHelpBrowserViewer::initialFontPointSize() const
     1030{
     1031    return m_iInitialFontPointSize;
     1032}
     1033
    8551034void UIHelpBrowserViewer::contextMenuEvent(QContextMenuEvent *event)
    8561035{
     
    8711050}
    8721051
    873 void UIHelpBrowserViewer::paintEvent(QPaintEvent *pEvent)
    874 {
    875     QIWithRetranslateUI<QTextBrowser>::paintEvent(pEvent);
    876 }
    877 
    8781052void UIHelpBrowserViewer::resizeEvent(QResizeEvent *pEvent)
    8791053{
     
    8871061}
    8881062
     1063void UIHelpBrowserViewer::wheelEvent(QWheelEvent *pEvent)
     1064{
     1065    int iPreviousSize = font().pointSize();
     1066    QTextBrowser::wheelEvent(pEvent);
     1067    /* Don't allow font size to get too large or small: */
     1068    if (font().pointSize() >= fontScaleMinMax.second * m_iInitialFontPointSize ||
     1069        font().pointSize() <= fontScaleMinMax.first * m_iInitialFontPointSize)
     1070    {
     1071        QFont mFont = font();
     1072        mFont.setPointSize(iPreviousSize);
     1073        setFont(mFont);
     1074    }
     1075    else
     1076        emit sigFontPointSizeChanged(font().pointSize());
     1077}
    8891078
    8901079void UIHelpBrowserViewer::retranslateUi()
     
    10351224    : QITabWidget(pParent)
    10361225    , m_pHelpEngine(pHelpEngine)
     1226    , m_pFontScaleWidget(0)
    10371227    , m_homeUrl(homeUrl)
    10381228    , m_savedUrlList(urlList)
     
    10551245   connect(pTabWidget, &UIHelpBrowserTab::sigAddBookmark,
    10561246           this, &UIHelpBrowserTabManager::sigAddBookmark);
     1247   connect(pTabWidget, &UIHelpBrowserTab::sigFontPointSizeChanged,
     1248           this, &UIHelpBrowserTabManager::sltHandleFontSizeChange);
     1249
    10571250   if (m_fSwitchToNewTab)
    10581251       setCurrentIndex(index);
     1252
     1253   if (!m_pFontScaleWidget)
     1254   {
     1255       m_pFontScaleWidget = new UIFontScaleWidget(initialFontPointSize(), this);
     1256       connect(m_pFontScaleWidget, &UIFontScaleWidget::sigFontPointSizeChanged,
     1257               this, &UIHelpBrowserTabManager::sltHandleFontSizeChange);
     1258   }
    10591259}
    10601260
     
    11191319    if (!pTab)
    11201320        return;
    1121     return pTab->printCurrent(printer);
     1321    return pTab->print(printer);
     1322}
     1323
     1324void UIHelpBrowserTabManager::paintEvent(QPaintEvent *pEvent)
     1325{
     1326    if (m_pFontScaleWidget)
     1327    {
     1328        int iMargin = 20;
     1329        m_pFontScaleWidget->move(width() - m_pFontScaleWidget->width() - iMargin,
     1330                                 height() - m_pFontScaleWidget->height() - iMargin);
     1331    }
     1332    QITabWidget::paintEvent(pEvent);
     1333}
     1334
     1335int UIHelpBrowserTabManager::initialFontPointSize() const
     1336{
     1337    UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
     1338    if (!pTab)
     1339        return 0;
     1340    return pTab->initialFontPointSize();
     1341}
     1342
     1343void UIHelpBrowserTabManager::setFontPointSize(int iPointSize)
     1344{
     1345    for (int i = 0; i < count(); ++i)
     1346    {
     1347        UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(widget(i));
     1348        if (!pTab)
     1349            continue;
     1350        pTab->setFontPointSize(iPointSize);
     1351    }
     1352    if (m_pFontScaleWidget)
     1353        m_pFontScaleWidget->setFontPointSize(iPointSize);
    11221354}
    11231355
     
    11561388    Q_UNUSED(iTabIndex);
    11571389    emit sigSourceChanged(currentSource());
     1390}
     1391
     1392void UIHelpBrowserTabManager::sltHandleFontSizeChange(int iFontPointSize)
     1393{
     1394    setFontPointSize(iFontPointSize);
    11581395}
    11591396
     
    12331470}
    12341471
    1235 
    12361472bool UIHelpBrowserWidget::shouldBeMaximized() const
    12371473{
     
    14081644    m_pViewMenu = new QMenu(tr("View"), this);
    14091645    AssertReturnVoid(m_pViewMenu);
     1646
    14101647    if (m_pPrintDialogAction)
    14111648        m_pFileMenu->addAction(m_pPrintDialogAction);
     
    17171954        m_pTabManager->setSource(url, false);
    17181955}
     1956
    17191957#include "UIHelpBrowserWidget.moc"
    17201958
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