VirtualBox

Changeset 88430 in vbox for trunk


Ignore:
Timestamp:
Apr 9, 2021 11:42:55 AM (4 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9831. Some improvements on the tab ovelay mode.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.cpp

    r88423 r88430  
    345345    , m_iSearchTermLength(0)
    346346    , m_iZoomPercentage(100)
    347     , m_fImageOverlay(false)
    348     , m_pOverlayWidget(0)
     347    , m_fOverlayMode(false)
     348    , m_fCursorChanged(false)
    349349    , m_pOverlayLabel(0)
    350350{
     
    368368    m_pFindInPageWidget->setVisible(false);
    369369
    370 
    371     m_pOverlayWidget = new QWidget(this);
    372     QHBoxLayout *overlayLayout = new QHBoxLayout(m_pOverlayWidget);
    373     m_pOverlayLabel = new QLabel;
    374     overlayLayout->addWidget(m_pOverlayLabel);
    375     m_pOverlayWidget->hide();
     370    m_pOverlayLabel = new QLabel(this);
     371    if (m_pOverlayLabel)
     372    {
     373        m_pOverlayLabel->hide();
     374        m_pOverlayLabel->installEventFilter(this);
     375    }
    376376
    377377    m_pOverlayBlurEffect = new QGraphicsBlurEffect(this);
    378     viewport()->setGraphicsEffect(m_pOverlayBlurEffect);
    379     m_pOverlayBlurEffect->setEnabled(false);
    380     m_pOverlayBlurEffect->setBlurRadius(8);
     378    if (m_pOverlayBlurEffect)
     379    {
     380        viewport()->setGraphicsEffect(m_pOverlayBlurEffect);
     381        m_pOverlayBlurEffect->setEnabled(false);
     382        m_pOverlayBlurEffect->setBlurRadius(8);
     383    }
    381384    retranslateUi();
    382385}
     
    398401void UIHelpViewer::setSource(const QUrl &url)
    399402{
     403    clearOverlay();
    400404    QTextBrowser::setSource(url);
    401405    QTextDocument *pDocument = document();
    402406    iterateDocumentImages();
    403407    if (!pDocument || pDocument->isEmpty())
    404     {
    405408        setText(tr("<div><p><h3>404. Not found.</h3>The page <b>%1</b> could not be found.</p></div>").arg(url.toString()));
    406     }
    407409    if (m_pFindInPageWidget && m_pFindInPageWidget->isVisible())
    408410    {
     
    494496}
    495497
     498bool UIHelpViewer::isInOverlayMode() const
     499{
     500    return m_fOverlayMode;
     501}
     502
    496503int UIHelpViewer::zoomPercentage() const
    497504{
     
    560567void UIHelpViewer::resizeEvent(QResizeEvent *pEvent)
    561568{
     569    clearOverlay();
    562570    /* Make sure the widget stays inside the parent during parent resize: */
    563571    if (m_pFindInPageWidget)
     
    571579void UIHelpViewer::wheelEvent(QWheelEvent *pEvent)
    572580{
    573     if (m_fImageOverlay)
    574         return;
    575 
     581    if (m_fOverlayMode)
     582        return;
    576583    /* QTextBrowser::wheelEvent scales font when some modifiers are pressed. We dont want: */
    577584    if (pEvent && pEvent->modifiers() == Qt::NoModifier)
     
    581588void UIHelpViewer::mousePressEvent(QMouseEvent *pEvent)
    582589{
    583     if (m_fImageOverlay)
    584         clearOverlay();
     590    clearOverlay();
    585591
    586592    QIWithRetranslateUI<QTextBrowser>::mousePressEvent(pEvent);
    587 
    588593    QString strAnchor = anchorAt(pEvent->pos());
    589594    if (!strAnchor.isEmpty())
     
    596601        }
    597602    }
    598 
    599603    loadImageAtPosition(pEvent->globalPos());
    600604}
     
    602606void UIHelpViewer::mouseMoveEvent(QMouseEvent *pEvent)
    603607{
    604     if (m_fImageOverlay)
    605         return;
    606 
    607     QIWithRetranslateUI<QTextBrowser>::mouseMoveEvent(pEvent);
     608    if (m_fOverlayMode)
     609        return;
    608610
    609611    QPoint viewportCoordinates = viewport()->mapFromGlobal(pEvent->globalPos());
    610612    QTextCursor cursor = cursorForPosition(viewportCoordinates);
    611     if (cursor.charFormat().isImageFormat())
     613    if (!m_fCursorChanged && cursor.charFormat().isImageFormat())
     614    {
     615        m_fCursorChanged = true;
    612616        viewport()->setCursor(m_handCursor);
    613     else
     617    }
     618    if (m_fCursorChanged && !cursor.charFormat().isImageFormat())
     619    {
    614620        viewport()->setCursor(m_defaultCursor);
     621        m_fCursorChanged = false;
     622    }
     623    QIWithRetranslateUI<QTextBrowser>::mouseMoveEvent(pEvent);
    615624}
    616625
    617626void UIHelpViewer::mouseDoubleClickEvent(QMouseEvent *pEvent)
    618627{
    619     if (m_fImageOverlay)
    620         clearOverlay();
    621 
     628    clearOverlay();
    622629    QIWithRetranslateUI<QTextBrowser>::mouseDoubleClickEvent(pEvent);
    623630}
     
    626633{
    627634    QIWithRetranslateUI<QTextBrowser>::paintEvent(pEvent);
    628     // if (m_pOverlayBlurEffect && m_pOverlayBlurEffect->isEnabled())
    629     //     m_pOverlayBlurEffect->setEnabled(false);
    630 
    631     if (m_pOverlayLabel && m_pOverlayWidget)
    632     {
    633         if (m_fImageOverlay)
     635
     636    if (m_pOverlayLabel)
     637    {
     638        if (m_fOverlayMode)
    634639        {
    635 
    636             // QPainter painter(viewport());
    637             // painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
    638640            QSize size(0.8 * width(), 0.8 * height());
    639641            m_pOverlayLabel->setPixmap(m_overlayPixmap.scaled(size,  Qt::KeepAspectRatio, Qt::SmoothTransformation));
    640             m_pOverlayWidget->move(0.1 * width(), 0.1 * height());
    641             m_pOverlayWidget->show();
    642             // QRect rect(10, 10, 0.4 * width() - 20, height() - 20);
    643             // painter.drawPixmap(rect, m_overlayPixmap);
    644             //painter.fillRect(rect, Qt::red);
     642            int x = 0.5 * (width() - m_pOverlayLabel->width());
     643            int y = 0.5 * (height() - m_pOverlayLabel->height());
     644            m_pOverlayLabel->move(x, y);
     645            m_pOverlayLabel->show();
    645646        }
    646647        else
    647             m_pOverlayWidget->hide();
    648 
    649     }
     648            m_pOverlayLabel->hide();
     649    }
     650}
     651
     652bool UIHelpViewer::eventFilter(QObject *pObject, QEvent *pEvent)
     653{
     654    if (pObject == m_pOverlayLabel)
     655    {
     656        if (pEvent->type() == QEvent::MouseButtonPress ||
     657            pEvent->type() == QEvent::MouseButtonDblClick)
     658            clearOverlay();
     659    }
     660    return QIWithRetranslateUI<QTextBrowser>::eventFilter(pObject, pEvent);
    650661}
    651662
     
    862873void UIHelpViewer::clearOverlay()
    863874{
     875    if (!m_fOverlayMode)
     876        return;
    864877    m_overlayPixmap = QPixmap();
    865     m_fImageOverlay = false;
     878    m_fOverlayMode = false;
    866879    if (m_pOverlayBlurEffect)
    867880        m_pOverlayBlurEffect->setEnabled(false);
     881    emit sigOverlayModeChanged(false);
    868882}
    869883
     
    895909        if (!m_overlayPixmap.isNull())
    896910        {
    897             m_fImageOverlay = true;
     911            m_fOverlayMode = true;
    898912            if (m_pOverlayBlurEffect)
    899913                m_pOverlayBlurEffect->setEnabled(true);
    900914            viewport()->setCursor(m_defaultCursor);
     915            emit sigOverlayModeChanged(true);
    901916        }
    902917    }
  • trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.h

    r88423 r88430  
    5151    void sigAddBookmark();
    5252    void sigZoomPercentageChanged(int iPercentage);
     53    void sigOverlayModeChanged(bool fEnabled);
    5354
    5455public:
     
    7273    void setZoomPercentage(int iZoomPercentage);
    7374    void setHelpFileList(const QList<QUrl> &helpFileList);
     75    bool isInOverlayMode() const;
    7476
    7577    static const QPair<int, int> zoomPercentageMinMax;
     
    8890    virtual void mouseDoubleClickEvent(QMouseEvent *pEvent) /* override */;
    8991    virtual void paintEvent(QPaintEvent *pEvent) /* override */;
     92    virtual bool eventFilter(QObject *pObject, QEvent *pEvent) /* override */;
    9093
    9194private slots:
     
    138141    QList<QUrl> m_helpFileList;
    139142    QPixmap m_overlayPixmap;
    140     bool m_fImageOverlay;
    141 
    142     QWidget *m_pOverlayWidget;
     143    bool m_fOverlayMode;
     144    bool m_fCursorChanged;
    143145    QLabel *m_pOverlayLabel;
    144146    QGraphicsBlurEffect *m_pOverlayBlurEffect;
     147
    145148};
    146149
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