Ejemplo n.º 1
0
bool OffscreenSurface::eventFilter(QObject* originalDestination, QEvent* event) {
    if (!filterEnabled(originalDestination, event)) {
        return false;
    }
#ifdef DEBUG
    // Don't intercept our own events, or we enter an infinite recursion
    {
        auto rootItem = _sharedObject->getRootItem();
        auto quickWindow = _sharedObject->getWindow();
        QObject* recurseTest = originalDestination;
        while (recurseTest) {
            Q_ASSERT(recurseTest != rootItem && recurseTest != quickWindow);
            recurseTest = recurseTest->parent();
        }
    }
#endif

    switch (event->type()) {
        case QEvent::KeyPress:
        case QEvent::KeyRelease: {
            event->ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), event)) {
                return event->isAccepted();
            }
            break;
        }

        case QEvent::Wheel: {
            QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event);
            QPointF transformedPos = mapToVirtualScreen(wheelEvent->pos());
            QWheelEvent mappedEvent(transformedPos, wheelEvent->delta(), wheelEvent->buttons(), wheelEvent->modifiers(),
                                    wheelEvent->orientation());
            mappedEvent.ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), &mappedEvent)) {
                return mappedEvent.isAccepted();
            }
            break;
        }
        case QEvent::MouseMove: {
            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
            QPointF transformedPos = mapToVirtualScreen(mouseEvent->localPos());
            QMouseEvent mappedEvent(mouseEvent->type(), transformedPos, mouseEvent->screenPos(), mouseEvent->button(),
                                    mouseEvent->buttons(), mouseEvent->modifiers());
            if (event->type() == QEvent::MouseMove) {
                // TODO - this line necessary for the QML Tooltop to work (which is not currently being used), but it causes interface to crash on launch on a fresh install
                // need to investigate into why this crash is happening.
                //_qmlContext->setContextProperty("lastMousePosition", transformedPos);
            }
            mappedEvent.ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), &mappedEvent)) {
                return mappedEvent.isAccepted();
            }
            break;
        }
        default:
            break;
    }

    return false;
}
Ejemplo n.º 2
0
void QEGLPlatformCursor::pointerEvent(const QMouseEvent &event)
{
    if (event.type() != QEvent::MouseMove)
        return;
    const QRect oldCursorRect = cursorRect();
    m_cursor.pos = event.screenPos().toPoint();
    update(oldCursorRect | cursorRect());
    m_screen->handleCursorMove(m_cursor.pos);
}
bool MInverseMouseArea::eventFilter(QObject *obj, QEvent *ev)
{
    Q_UNUSED(obj);
    if (!m_enabled || !isVisible())
        return false;
    switch (ev->type()) {
    case QEvent::MouseButtonPress: {
        QMouseEvent *me = static_cast<QMouseEvent *>(ev);
        QPointF mappedPos = me->screenPos();//??is mapping to root item needed still
        m_pressed = !isUnderMouse() && !isClickedOnSoftwareInputPanel();

        if (m_pressed) {
            m_lastsceenPos = me->screenPos();
            emit pressedOutside(mappedPos.x(), mappedPos.y());
        }
        break;
    }
    case QEvent::MouseMove: {
        if (m_pressed) {
            QMouseEvent *me = static_cast<QMouseEvent *>(ev);
            const QPointF &dist = me->screenPos() - m_lastsceenPos;

            if (dist.x() * dist.x() + dist.y() * dist.y() > FlickThresholdSquare)
                m_pressed = false;
        }
        break;
    }
    case QEvent::MouseButtonRelease: {
        QMouseEvent *me = static_cast<QMouseEvent *>(ev);
        QPointF mappedPos = mapToRootItem(me->screenPos());

        if (m_pressed) {
            m_pressed = false;
            emit clickedOutside(mappedPos.x(), mappedPos.y());
        }
        break;
    }
    default:
        break;
    }

    return false;
}
Ejemplo n.º 4
0
bool KisInputManager::Private::EventEater::eventFilter(QObject* target, QEvent* event )
{
    if ((hungry && (event->type() == QEvent::MouseMove ||
                    event->type() == QEvent::MouseButtonPress ||
                    event->type() == QEvent::MouseButtonRelease))
        //  || (peckish && (event->type() == QEvent::MouseButtonPress))
        )
    {
        // Chow down
        if (KisTabletDebugger::instance()->debugEnabled()) {
            QString pre = QString("[BLOCKED]");
            QMouseEvent *ev = static_cast<QMouseEvent*>(event);
            dbgTablet << KisTabletDebugger::instance()->eventToString(*ev,pre);
        }
        peckish = false;
        return true;
    }
    else if ((event->type() == QEvent::MouseButtonPress) /* Need to scrutinize */ &&
             (!savedEvent)) /* Otherwise we enter a loop repeatedly storing the same event */
    {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
        // Pocket the event and decide what to do with it later
        // savedEvent = *(static_cast<QMouseEvent*>(event));
        savedEvent = new QMouseEvent(QEvent::MouseButtonPress,
                                     mouseEvent->pos(),
                                     mouseEvent->windowPos(),
                                     mouseEvent->screenPos(),
                                     mouseEvent->button(),
                                     mouseEvent->buttons(),
                                     mouseEvent->modifiers());
        savedTarget = target;
        mouseEvent->accept();
        return true;
    }

    return false; // All clear - let this one through!
}
Ejemplo n.º 5
0
void QQuickMultiPointTouchArea::updateTouchData(QEvent *event)
{
    bool ended = false;
    bool moved = false;
    bool started = false;
    bool isMouseEvent = false;

    clearTouchLists();
    QList<QTouchEvent::TouchPoint> touchPoints;

    switch (event->type()) {
    case QEvent::TouchBegin:
    case QEvent::TouchUpdate:
    case QEvent::TouchEnd:
        touchPoints = static_cast<QTouchEvent*>(event)->touchPoints();
        break;
    case QEvent::MouseButtonPress:
    case QEvent::MouseMove:
    case QEvent::MouseButtonRelease: {
        QMouseEvent *me = static_cast<QMouseEvent*>(event);
        _mouseQpaTouchPoint.setPos(me->localPos());
        _mouseQpaTouchPoint.setScenePos(me->windowPos());
        _mouseQpaTouchPoint.setScreenPos(me->screenPos());
        if (event->type() == QEvent::MouseMove)
            _mouseQpaTouchPoint.setState(Qt::TouchPointMoved);
        else if (event->type() == QEvent::MouseButtonRelease)
            _mouseQpaTouchPoint.setState(Qt::TouchPointReleased);
        else { // QEvent::MouseButtonPress
            addTouchPoint(me);
            started = true;
            _mouseQpaTouchPoint.setState(Qt::TouchPointPressed);
        }
        touchPoints << _mouseQpaTouchPoint;
        isMouseEvent = true;
        break;
    }
    default:
        qWarning("updateTouchData: unhandled event type %d", event->type());
        break;
    }

    if (!isMouseEvent && _mouseTouchPoint) {
        QQuickWindow *c = window();
        if (c && c->mouseGrabberItem() == this)
            touchPoints << _mouseQpaTouchPoint;
    }
    int numTouchPoints = touchPoints.count();
    //always remove released touches, and make sure we handle all releases before adds.
    for (const QTouchEvent::TouchPoint &p : qAsConst(touchPoints)) {
        Qt::TouchPointState touchPointState = p.state();
        int id = p.id();
        if (touchPointState & Qt::TouchPointReleased) {
            QQuickTouchPoint* dtp = static_cast<QQuickTouchPoint*>(_touchPoints.value(id));
            if (!dtp)
                continue;
            updateTouchPoint(dtp, &p);
            dtp->setPressed(false);
            _releasedTouchPoints.append(dtp);
            _touchPoints.remove(id);
            ended = true;
        }
    }
    if (numTouchPoints >= _minimumTouchPoints && numTouchPoints <= _maximumTouchPoints) {
        for (const QTouchEvent::TouchPoint &p : qAsConst(touchPoints)) {
            Qt::TouchPointState touchPointState = p.state();
            int id = p.id();
            if (touchPointState & Qt::TouchPointReleased) {
                //handled above
            } else if (!_touchPoints.contains(id)) { //could be pressed, moved, or stationary
                // (we may have just obtained enough points to start tracking them -- in that case moved or stationary count as newly pressed)
                addTouchPoint(&p);
                started = true;
            } else if (touchPointState & Qt::TouchPointMoved) {
                QQuickTouchPoint* dtp = static_cast<QQuickTouchPoint*>(_touchPoints.value(id));
                Q_ASSERT(dtp);
                _movedTouchPoints.append(dtp);
                updateTouchPoint(dtp,&p);
                moved = true;
            } else {
                QQuickTouchPoint* dtp = static_cast<QQuickTouchPoint*>(_touchPoints.value(id));
                Q_ASSERT(dtp);
                updateTouchPoint(dtp,&p);
            }
        }

        //see if we should be grabbing the gesture
        if (!_stealMouse /* !ignoring gesture*/) {
            bool offerGrab = false;
            const int dragThreshold = QGuiApplication::styleHints()->startDragDistance();
            for (const QTouchEvent::TouchPoint &p : qAsConst(touchPoints)) {
                if (p.state() == Qt::TouchPointReleased)
                    continue;
                const QPointF &currentPos = p.scenePos();
                const QPointF &startPos = p.startScenePos();
                if (qAbs(currentPos.x() - startPos.x()) > dragThreshold)
                    offerGrab = true;
                else if (qAbs(currentPos.y() - startPos.y()) > dragThreshold)
                    offerGrab = true;
                if (offerGrab)
                    break;
            }

            if (offerGrab) {
                QQuickGrabGestureEvent event;
                event._touchPoints = _touchPoints.values();
                emit gestureStarted(&event);
                if (event.wantsGrab())
                    grabGesture();
            }
        }

        if (ended)
            emit released(_releasedTouchPoints);
        if (moved)
            emit updated(_movedTouchPoints);
        if (started)
            emit pressed(_pressedTouchPoints);
        if (ended || moved || started) emit touchUpdated(_touchPoints.values());
    }
}
Ejemplo n.º 6
0
bool OffscreenSurface::eventFilter(QObject* originalDestination, QEvent* event) {
    if (!filterEnabled(originalDestination, event)) {
        return false;
    }
#ifdef DEBUG
    // Don't intercept our own events, or we enter an infinite recursion
    {
        auto rootItem = _sharedObject->getRootItem();
        auto quickWindow = _sharedObject->getWindow();
        QObject* recurseTest = originalDestination;
        while (recurseTest) {
            Q_ASSERT(recurseTest != rootItem && recurseTest != quickWindow);
            recurseTest = recurseTest->parent();
        }
    }
#endif

    switch (event->type()) {
        case QEvent::KeyPress:
        case QEvent::KeyRelease: {
            event->ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), event)) {
                return event->isAccepted();
            }
            break;
        }

        case QEvent::Wheel: {
            QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event);
            QPointF transformedPos = mapToVirtualScreen(wheelEvent->pos());
            QWheelEvent mappedEvent(transformedPos, wheelEvent->delta(), wheelEvent->buttons(), wheelEvent->modifiers(),
                                    wheelEvent->orientation());
            mappedEvent.ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), &mappedEvent)) {
                return mappedEvent.isAccepted();
            }
            break;
        }
        case QEvent::MouseMove: {
            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
            QPointF transformedPos = mapToVirtualScreen(mouseEvent->localPos());
            QMouseEvent mappedEvent(mouseEvent->type(), transformedPos, mouseEvent->screenPos(), mouseEvent->button(),
                                    mouseEvent->buttons(), mouseEvent->modifiers());
            mappedEvent.ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), &mappedEvent)) {
                return mappedEvent.isAccepted();
            }
            break;
        }

#if defined(Q_OS_ANDROID)
        case QEvent::TouchBegin:
        case QEvent::TouchUpdate:
        case QEvent::TouchEnd: {
            QTouchEvent *originalEvent = static_cast<QTouchEvent *>(event);
            QEvent::Type fakeMouseEventType = QEvent::None;
            Qt::MouseButton fakeMouseButton = Qt::LeftButton;
            Qt::MouseButtons fakeMouseButtons = Qt::NoButton;
            switch (event->type()) {
                case QEvent::TouchBegin:
                    fakeMouseEventType = QEvent::MouseButtonPress;
                    fakeMouseButtons = Qt::LeftButton;
                    break;
                case QEvent::TouchUpdate:
                    fakeMouseEventType = QEvent::MouseMove;
                    fakeMouseButtons = Qt::LeftButton;
                    break;
                case QEvent::TouchEnd:
                    fakeMouseEventType = QEvent::MouseButtonRelease;
                    fakeMouseButtons = Qt::NoButton;
                    break;
            }
            // Same case as OffscreenUi.cpp::eventFilter: touch events are always being accepted so we now use mouse events and consider one touch, touchPoints()[0].
            QMouseEvent fakeMouseEvent(fakeMouseEventType, originalEvent->touchPoints()[0].pos(), fakeMouseButton, fakeMouseButtons, Qt::NoModifier);
            fakeMouseEvent.ignore();
            if (QCoreApplication::sendEvent(_sharedObject->getWindow(), &fakeMouseEvent)) {
                /*qInfo() << __FUNCTION__ << "sent fake touch event:" << fakeMouseEvent.type()
                        << "_quickWindow handled it... accepted:" << fakeMouseEvent.isAccepted();*/
                return fakeMouseEvent.isAccepted();
            }
            break;
        }
        case QEvent::InputMethod:
        case QEvent::InputMethodQuery: {
            auto window = getWindow();
            if (window && window->activeFocusItem()) {
                event->ignore();
                if (QCoreApplication::sendEvent(window->activeFocusItem(), event)) {
                    bool eventAccepted = event->isAccepted();
                    if (event->type() == QEvent::InputMethodQuery) {
                        QInputMethodQueryEvent *imqEvent = static_cast<QInputMethodQueryEvent *>(event);
                        // this block disables the selection cursor in android which appears in
                        // the top-left corner of the screen
                        if (imqEvent->queries() & Qt::ImEnabled) {
                            imqEvent->setValue(Qt::ImEnabled, QVariant(false));
                        }
                    }
                    return eventAccepted;
                }
                return false;
            }
            break;
        }
#endif
        default:
            break;
    }

    return false;
}
Ejemplo n.º 7
0
bool MainWindow::eventFilter(QObject *, QEvent *event)
{    
    QMouseEvent *mos = dynamic_cast <QMouseEvent*>(event);
    QKeyEvent *kp = dynamic_cast <QKeyEvent*>(event);
    if(event->type() == QEvent::MouseButtonPress)
    {      
        if( gamepause == false )
        {
            if( mos->button() == Qt::LeftButton )
            {
                // 滑鼠在彈弓的鳥上
                if( mos->screenPos().x() > 248 && mos->screenPos().x() <= 284 )
                {
                    if( mos->screenPos().y() > 430 && mos->screenPos().y() <= 463 )
                    {
                        line1->setLine(-10,-10,-10,-10);
                        line2->setLine(-10,-10,-10,-10);
                        line1->show();
                        line2->show();
                        ready = true;
                        return true;
                    }
                }
                else
                {
                // 避免 buttons 誤觸 skill
                if( mos->screenPos().y() > 195 )
                {
                    if( skillused == false )
                    {
                        bird[num+1]->skill();
                        if(num == 0)
                        {
                            egg = new Egg(bird[num+1]->getPosition().x, bird[num+1]->getPosition().y-3, 0.1f, &timer, QPixmap(":/image/egg.png"), world, scene);
                            egg->setLinearVelocity(b2Vec2(0, 5));
                            itemList.push_back(egg);
                            eggexist = true;
                        }
                        if(num == 2)
                        {
                            float bx = bird[num+1]->getPosition().x;
                            float by = bird[num+1]->getPosition().y;
                            int vx = bird[num+1]->getLinearVelocity().x;
                            int vy = bird[num+1]->getLinearVelocity().y;
                            blue1 = new Bluebird(bx, by+2, 0.4f, &timer, QPixmap(":/image/BlueBird.png"), world, scene);
                            blue1->setLinearVelocity(b2Vec2(vx, vy+2));
                            itemList.push_back(blue1);
                            blue2 = new Bluebird(bx, by-2, 0.4f, &timer, QPixmap(":/image/BlueBird.png"), world, scene);
                            blue2->setLinearVelocity(b2Vec2(vx, vy-2));
                            itemList.push_back(blue2);
                            cloneexist = true;
                        }
                        if(num == 1)
                        {
                            float bx = bird[num+1]->getPosition().x;
                            float by = bird[num+1]->getPosition().y;
                            int vx = bird[num+1]->getLinearVelocity().x;
                            int vy = bird[num+1]->getLinearVelocity().y;
                            delete bird[num+1];
                            big = new Bigbird(bx, by, 0.8f, &timer, QPixmap(":/image/BigBirds.png"), world, scene);
                            big->setLinearVelocity(b2Vec2(vx, vy));
                            itemList.push_back(big);
                            bigexist = true;
                        }
                        skillused = true;
                    }
                }
                }
            }
        }
        //cout << "Now event x: " << mos->screenPos().x()<< " event y: " << mos->screenPos().y() << endl;
        //std::cout << "Press !" << std::endl ;
        return false;
    }
    if(event->type() == QEvent::MouseMove)
    {
        if(ready == true)
        {
            if( mos->screenPos().x() > 122 && mos->screenPos().x() <= 284 )
            {
                if( mos->screenPos().y() > 360 && mos->screenPos().y() <= 528 )
                {
                    line2->setLine(mos->screenPos().x()-100,mos->screenPos().y()-100,190,330);
                    line1->setLine(mos->screenPos().x()-100,mos->screenPos().y()-100,156,330);
                    setbird[num]->setPos(mos->screenPos().x()-112,mos->screenPos().y()-140);
                    launch = true;
                    return true;
                }
            }
        }
        //std::cout << "Move !" << std::endl ;
        return false;
    }
    if(event->type() == QEvent::MouseButtonRelease)
    {        
        if( launch == true )
        {
            scene->removeItem(setbird[num]);
            delete setbird[num];            
            float a , b;
            a = (mos->screenPos().x()-112)/30;
            b = (680-mos->screenPos().y())/30;
            int v , w ;
            v = (266 - (mos->screenPos().x()))/5;
            w = (mos->screenPos().y() - 446)/5;
            if( num == 0 )
            {
                delete bird[1];
                if( eggexist == true ) delete egg;
                bird[0] = new Greenbird(a, b, 0.4f, &timer, QPixmap(":/image/GreenBird.png"), world, scene);
                bird[0]->setLinearVelocity(b2Vec2(v,w));
                itemList.push_back(bird[0]);
                setbird[num-1]->setPos(150,300);
            }
            if( num == 1 )
            {
                if( bigexist == true ) delete big;
                else {delete bird[2];}
                bird[1] = new Whitebird(a, b, 0.4f, &timer, QPixmap(":/image/WhiteBird.png"), world, scene);
                bird[1]->setLinearVelocity(b2Vec2(v,w));
                itemList.push_back(bird[1]);
                setbird[num-1]->setPos(150,300);
            }
            if( num == 2 )
            {
                delete bird[3];
                bird[2] = new Bigbird(a, b, 0.4f, &timer, QPixmap(":/image/BigBird.png"), world, scene);
                bird[2]->setLinearVelocity(b2Vec2(v,w));
                itemList.push_back(bird[2]);
                if( cloneexist == true )
                {
                    delete blue1;
                    delete blue2;
                }
                setbird[0]->setPos(90,390);                
                setbird[num-1]->setPos(150,300);
            }
            if( num == 3 )
            {
                delete bird[4];
                bird[3] = new Bluebird(a, b, 0.4f, &timer, QPixmap(":/image/BlueBird.png"), world, scene);
                bird[3]->setLinearVelocity(b2Vec2(v,w));
                itemList.push_back(bird[3]);
                setbird[1]->setPos(90,392);
                setbird[0] = new Setbird();
                QPixmap b0;
                b0.load(":/image/GreenBird.png");
                setbird[0]->setPixmap(b0);
                setbird[0]->setPos(30,390);
                scene->addItem(setbird[0]);               
                setbird[num-1]->setPos(150,300);
            }
            if( num == 4 )
            {  
                delete bird[5];
                bird[4] = new Yellowbird(a, b, 0.4f, &timer, QPixmap(":/image/YellowBird.png"), world, scene);
                bird[4]->setLinearVelocity(b2Vec2(v,w));
                itemList.push_back(bird[4]);
                setbird[2]->setPos(90,394);
                setbird[1] = new Setbird();
                QPixmap b1;
                b1.load(":/image/WhiteBird.png");
                setbird[1]->setPixmap(b1);
                setbird[1]->setPos(30,392);
                scene->addItem(setbird[1]);                
                setbird[num-1]->setPos(150,300);
            }
            if( num == 5 )
            {
                bird[5] = new Redbird(a, b, 0.4f, &timer, QPixmap(":/image/RedBird.png"), world, scene);
                bird[5]->setLinearVelocity(b2Vec2(v,w));
                itemList.push_back(bird[5]);
                setbird[3]->setPos(90,394);
                setbird[2] = new Setbird();
                QPixmap b2;
                b2.load(":/image/BigBird.png");
                setbird[2]->setPixmap(b2);
                setbird[2]->setPos(30,394);
                scene->addItem(setbird[2]);               
                setbird[num-1]->setPos(150,300);
            }
            line1->hide();
            line2->hide();
            --num;
            birdnum->setText(QString::number(num+1));
            ready = false;
            launch = false;
            skillused = false;
            return true;
        }   
        //std::cout << "Release !" << std::endl ;
        return false;
    }

    if(event->type() == QEvent::KeyPress)
    {
        if( kp->key() == Qt::Key_P )
        {
            if(gamepause)
            {
                delete pause;

                gamepause = false;
                bgm->play();
                timer.start(100/6);
            }
            else
            {                
                pause = new QLabel(this);
                pause->setPixmap(QPixmap(":/image/pause.png").scaled(45,45));
                pause->setGeometry(290, 14, 45, 45);
                pause->show();

                gamepause = true;
                bgm->stop();
                timer.stop();
                scene->update();
            }
        }
    }
    return false;
}