VirtualBox

Changeset 47396 in vbox


Ignore:
Timestamp:
Jul 25, 2013 1:58:12 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
87546
Message:

FE/Qt: Runtime UI: Multi-Touch Support: Initial implementation.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp

    r46542 r47396  
    163163        {
    164164            CMouseCapabilityChangedEvent es(pEvent);
    165             emit sigMouseCapabilityChange(es.GetSupportsAbsolute(), es.GetSupportsRelative(), es.GetNeedsHostCursor());
     165            emit sigMouseCapabilityChange(es.GetSupportsAbsolute(), es.GetSupportsRelative(), es.GetSupportsMultiTouch(), es.GetNeedsHostCursor());
    166166            break;
    167167        }
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h

    r46542 r47396  
    6666    /* All Console Signals */
    6767    void sigMousePointerShapeChange(bool fVisible, bool fAlpha, QPoint hotCorner, QSize size, QVector<uint8_t> shape);
    68     void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fNeedsHostCursor);
     68    void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
    6969    void sigKeyboardLedsChangeEvent(bool fNumLock, bool fCapsLock, bool fScrollLock);
    7070    void sigStateChange(KMachineState state);
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp

    r46542 r47396  
    9191            Qt::QueuedConnection);
    9292
    93     connect(pListener->getWrapped(), SIGNAL(sigMouseCapabilityChange(bool, bool, bool)),
    94             this, SIGNAL(sigMouseCapabilityChange(bool, bool, bool)),
     93    connect(pListener->getWrapped(), SIGNAL(sigMouseCapabilityChange(bool, bool, bool, bool)),
     94            this, SIGNAL(sigMouseCapabilityChange(bool, bool, bool, bool)),
    9595            Qt::QueuedConnection);
    9696
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.h

    r46542 r47396  
    4141signals:
    4242    void sigMousePointerShapeChange(bool fVisible, bool fAlpha, QPoint hotCorner, QSize size, QVector<uint8_t> shape);
    43     void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fNeedsHostCursor);
     43    void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
    4444    void sigKeyboardLedsChangeEvent(bool fNumLock, bool fCapsLock, bool fScrollLock);
    4545    void sigStateChange(KMachineState state);
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp

    r47160 r47396  
    456456    bool fIsMouseSupportsAbsolute = uisession()->isMouseSupportsAbsolute();
    457457    bool fIsMouseSupportsRelative = uisession()->isMouseSupportsRelative();
     458    bool fIsMouseSupportsMultiTouch = uisession()->isMouseSupportsMultiTouch();
    458459    bool fIsMouseHostCursorNeeded = uisession()->isMouseHostCursorNeeded();
     460
     461    /* For now MT stuff is not important for MI action: */
     462    Q_UNUSED(fIsMouseSupportsMultiTouch);
    459463
    460464    /* Update action state: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r47103 r47396  
    9494        /* No need for background drawing: */
    9595        setAttribute(Qt::WA_OpaquePaintEvent);
     96        /* Enable multi-touch support: */
     97        setAttribute(Qt::WA_AcceptTouchEvents);
    9698    }
    9799
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp

    r47099 r47396  
    2121#include <QDesktopWidget>
    2222#include <QMouseEvent>
     23#include <QTouchEvent>
    2324
    2425/* GUI includes: */
     
    594595                                   pMouseEvent->buttons(), 0, Qt::Horizontal))
    595596                        return true;
     597                    break;
     598                }
     599                case QEvent::TouchBegin:
     600                case QEvent::TouchUpdate:
     601                case QEvent::TouchEnd:
     602                {
     603                    if (uisession()->isMouseSupportsMultiTouch())
     604                        return multiTouchEvent(static_cast<QTouchEvent*>(pEvent), uScreenId);
    596605                    break;
    597606                }
     
    877886}
    878887
     888bool UIMouseHandler::multiTouchEvent(QTouchEvent *pTouchEvent, ulong uScreenId)
     889{
     890    /* Eat if machine isn't running: */
     891    if (!uisession()->isRunning())
     892        return true;
     893
     894    /* Eat if such view & viewport aren't registered: */
     895    if (!m_views.contains(uScreenId) || !m_viewports.contains(uScreenId))
     896        return true;
     897
     898    /* Get mouse: */
     899    CMouse mouse = session().GetConsole().GetMouse();
     900
     901    /* Pass all multi-touch events into guest: */
     902    foreach (const QTouchEvent::TouchPoint &touchPoint, pTouchEvent->touchPoints())
     903    {
     904        /* Get touch-point origin: */
     905        QPoint currentTouchPoint = touchPoint.pos().toPoint();
     906
     907        /* Get touch-point state: */
     908        LONG iTouchPointState = KTouchContactState_None;
     909        switch (touchPoint.state())
     910        {
     911            case Qt::TouchPointPressed:
     912            case Qt::TouchPointMoved:
     913            case Qt::TouchPointStationary:
     914                iTouchPointState = KTouchContactState_InContact | KTouchContactState_InRange;
     915                break;
     916            default:
     917                break;
     918        }
     919
     920        /* Pass absolute touch-point data: */
     921        LogRelFlow(("UIMouseHandler::multiTouchEvent: Origin: %dx%d, State: %d\n",
     922                    currentTouchPoint.x(), currentTouchPoint.y(), iTouchPointState));
     923        mouse.PutMouseEventMultiTouch((LONG)currentTouchPoint.x(), (LONG)currentTouchPoint.y(),
     924                                      (LONG)touchPoint.id(), iTouchPointState);
     925    }
     926
     927    /* Eat by default? */
     928    return true;
     929}
     930
    879931#ifdef Q_WS_WIN
    880932/* This method is actually required only because under win-host
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.h

    r44529 r47396  
    3131/* Forward declarations: */
    3232class QWidget;
     33class QTouchEvent;
    3334class UISession;
    3435class UIMachineLogic;
     
    105106                    int wheelDelta, Qt::Orientation wheelDirection);
    106107
     108    /* Separate function to handle incoming multi-touch events: */
     109    bool multiTouchEvent(QTouchEvent *pTouchEvent, ulong uScreenId);
     110
    107111#ifdef Q_WS_WIN
    108112    /* This method is actually required only because under win-host
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp

    r47100 r47396  
    101101    , m_fIsMouseSupportsAbsolute(false)
    102102    , m_fIsMouseSupportsRelative(false)
     103    , m_fIsMouseSupportsMultiTouch(false)
    103104    , m_fIsMouseHostCursorNeeded(false)
    104105    , m_fIsMouseCaptured(false)
     
    651652}
    652653
    653 void UISession::sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fNeedsHostCursor)
    654 {
     654void UISession::sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor)
     655{
     656    LogRelFlow(("UISession::sltMouseCapabilityChange: "
     657                "Supports absolute: %s, Supports relative: %s, "
     658                "Supports multi-touch: %s, Needs host cursor: %s\n",
     659                fSupportsAbsolute ? "TRUE" : "FALSE", fSupportsRelative ? "TRUE" : "FALSE",
     660                fSupportsMultiTouch ? "TRUE" : "FALSE", fNeedsHostCursor ? "TRUE" : "FALSE"));
     661
    655662    /* Check if something had changed: */
    656663    if (   m_fIsMouseSupportsAbsolute != fSupportsAbsolute
    657664        || m_fIsMouseSupportsRelative != fSupportsRelative
     665        || m_fIsMouseSupportsMultiTouch != fSupportsMultiTouch
    658666        || m_fIsMouseHostCursorNeeded != fNeedsHostCursor)
    659667    {
     
    661669        m_fIsMouseSupportsAbsolute = fSupportsAbsolute;
    662670        m_fIsMouseSupportsRelative = fSupportsRelative;
     671        m_fIsMouseSupportsMultiTouch = fSupportsMultiTouch;
    663672        m_fIsMouseHostCursorNeeded = fNeedsHostCursor;
    664673
     
    803812            this, SLOT(sltMousePointerShapeChange(bool, bool, QPoint, QSize, QVector<uint8_t>)));
    804813
    805     connect(gConsoleEvents, SIGNAL(sigMouseCapabilityChange(bool, bool, bool)),
    806             this, SLOT(sltMouseCapabilityChange(bool, bool, bool)));
     814    connect(gConsoleEvents, SIGNAL(sigMouseCapabilityChange(bool, bool, bool, bool)),
     815            this, SLOT(sltMouseCapabilityChange(bool, bool, bool, bool)));
    807816
    808817    connect(gConsoleEvents, SIGNAL(sigKeyboardLedsChangeEvent(bool, bool, bool)),
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h

    r46813 r47396  
    135135    bool isMouseSupportsAbsolute() const { return m_fIsMouseSupportsAbsolute; }
    136136    bool isMouseSupportsRelative() const { return m_fIsMouseSupportsRelative; }
     137    bool isMouseSupportsMultiTouch() const { return m_fIsMouseSupportsMultiTouch; }
    137138    bool isMouseHostCursorNeeded() const { return m_fIsMouseHostCursorNeeded; }
    138139    bool isMouseCaptured() const { return m_fIsMouseCaptured; }
     
    214215    /* Console events slots */
    215216    void sltMousePointerShapeChange(bool fVisible, bool fAlpha, QPoint hotCorner, QSize size, QVector<uint8_t> shape);
    216     void sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fNeedsHostCursor);
     217    void sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
    217218    void sltKeyboardLedsChangeEvent(bool fNumLock, bool fCapsLock, bool fScrollLock);
    218219    void sltStateChange(KMachineState state);
     
    300301    bool m_fIsMouseSupportsAbsolute : 1;
    301302    bool m_fIsMouseSupportsRelative : 1;
     303    bool m_fIsMouseSupportsMultiTouch: 1;
    302304    bool m_fIsMouseHostCursorNeeded : 1;
    303305    bool m_fIsMouseCaptured : 1;
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