Warning, file /office/calligra/libs/flake/KoPointerEvent.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /* This file is part of the KDE project
0002 
0003    Copyright (C) 2006 Thorsten Zachmann <zachmann@kde.org>
0004    Copyright (C) 2006 C. Boemann Rasmussen <cbo@boemann.dk>
0005    Copyright (C) 2006-2007 Thomas Zander <zander@kde.org>
0006 
0007    This library is free software; you can redistribute it and/or
0008    modify it under the terms of the GNU Library General Public
0009    License as published by the Free Software Foundation; either
0010    version 2 of the License, or (at your option) any later version.
0011 
0012    This library is distributed in the hope that it will be useful,
0013    but WITHOUT ANY WARRANTY; without even the implied warranty of
0014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0015    Library General Public License for more details.
0016 
0017    You should have received a copy of the GNU Library General Public License
0018    along with this library; see the file COPYING.LIB.  If not, write to
0019    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0020  * Boston, MA 02110-1301, USA.
0021 */
0022 
0023 #include "KoPointerEvent.h"
0024 #include "KoInputDeviceHandlerEvent.h"
0025 #include <QTabletEvent>
0026 #include <QMouseEvent>
0027 #include <QWheelEvent>
0028 #include <QTouchEvent>
0029 #include <QGraphicsSceneMouseEvent>
0030 
0031 class Q_DECL_HIDDEN KoPointerEvent::Private
0032 {
0033 public:
0034     Private()
0035         : tabletEvent(0), mouseEvent(0), wheelEvent(0), touchEvent(0), gsMouseEvent(0)
0036         , gsWheelEvent(0), deviceEvent(0), tabletButton(Qt::NoButton)
0037         , globalPos(0, 0), pos(0, 0), posZ(0), rotationX(0), rotationY(0)
0038         , rotationZ(0) {}
0039     QTabletEvent *tabletEvent;
0040     QMouseEvent *mouseEvent;
0041     QWheelEvent *wheelEvent;
0042     QTouchEvent *touchEvent;
0043     QGraphicsSceneMouseEvent *gsMouseEvent;
0044     QGraphicsSceneWheelEvent *gsWheelEvent;
0045     KoInputDeviceHandlerEvent *deviceEvent;
0046     Qt::MouseButton tabletButton;
0047     QPoint globalPos, pos;
0048     int posZ;
0049     int rotationX, rotationY, rotationZ;
0050 };
0051 
0052 KoPointerEvent::KoPointerEvent(QMouseEvent *ev, const QPointF &pnt)
0053     : point(pnt),
0054       m_event(ev),
0055       d(new Private())
0056 {
0057     Q_ASSERT(m_event);
0058     d->mouseEvent = ev;
0059 }
0060 
0061 KoPointerEvent::KoPointerEvent(QGraphicsSceneMouseEvent *ev, const QPointF &pnt)
0062     : point(pnt),
0063       m_event(ev),
0064       d(new Private())
0065 {
0066     Q_ASSERT(m_event);
0067     d->gsMouseEvent = ev;
0068 }
0069 
0070 KoPointerEvent::KoPointerEvent(QGraphicsSceneWheelEvent *ev, const QPointF &pnt)
0071     : point(pnt),
0072       m_event(ev),
0073       d(new Private())
0074 {
0075     Q_ASSERT(m_event);
0076     d->gsWheelEvent = ev;
0077 }
0078 
0079 KoPointerEvent::KoPointerEvent(QTabletEvent *ev, const QPointF &pnt)
0080     : point(pnt),
0081       m_event(ev),
0082       d(new Private())
0083 {
0084     Q_ASSERT(m_event);
0085     d->tabletEvent = ev;
0086 }
0087 
0088 KoPointerEvent::KoPointerEvent(QTouchEvent *ev, const QPointF &pnt, const QVector<KoTouchPoint> &_touchPoints)
0089     : point (pnt)
0090     , touchPoints(_touchPoints)
0091     , m_event(ev)
0092     , d(new Private())
0093 {
0094     Q_ASSERT(m_event);
0095     d->touchEvent = ev;
0096 }
0097 
0098 KoPointerEvent::KoPointerEvent(QWheelEvent *ev, const QPointF &pnt)
0099     : point(pnt),
0100       m_event(ev),
0101       d(new Private())
0102 {
0103     Q_ASSERT(m_event);
0104     d->wheelEvent = ev;
0105 }
0106 
0107 KoPointerEvent::KoPointerEvent(KoInputDeviceHandlerEvent * ev, int x, int y, int z, int rx, int ry, int rz)
0108     : m_event(ev)
0109     , d(new Private())
0110 {
0111     Q_ASSERT(m_event);
0112     d->deviceEvent = ev;
0113     d->pos = QPoint(x, y);
0114     d->posZ = z;
0115     d->rotationX = rx;
0116     d->rotationY = ry;
0117     d->rotationZ = rz;
0118 }
0119 
0120 KoPointerEvent::KoPointerEvent(KoPointerEvent *event, const QPointF &point)
0121     : point(point)
0122     , touchPoints(event->touchPoints)
0123     , m_event(event->m_event)
0124     , d(new Private(*(event->d)))
0125 {
0126     Q_ASSERT(m_event);
0127 }
0128 
0129 KoPointerEvent::KoPointerEvent(const KoPointerEvent &rhs)
0130     : point(rhs.point)
0131     , touchPoints(rhs.touchPoints)
0132     , m_event(rhs.m_event)
0133     , d(new Private(*rhs.d))
0134 {
0135 }
0136 
0137 KoPointerEvent::~KoPointerEvent()
0138 {
0139     delete d;
0140 }
0141 
0142 Qt::MouseButton KoPointerEvent::button() const
0143 {
0144     if (d->mouseEvent)
0145         return d->mouseEvent->button();
0146     else if (d->tabletEvent || d->touchEvent)
0147         return d->tabletButton;
0148     else if (d->deviceEvent)
0149         return d->deviceEvent->button();
0150     else if (d->gsMouseEvent)
0151         return d->gsMouseEvent->button();
0152     else
0153         return Qt::NoButton;
0154 }
0155 
0156 Qt::MouseButtons KoPointerEvent::buttons() const
0157 {
0158     if (d->mouseEvent)
0159         return d->mouseEvent->buttons();
0160     else if (d->wheelEvent)
0161         return d->wheelEvent->buttons();
0162     else if (d->tabletEvent || d->touchEvent)
0163         return d->tabletButton;
0164     else if (d->deviceEvent)
0165         return d->deviceEvent->buttons();
0166     else if (d->gsMouseEvent)
0167         return d->gsMouseEvent->buttons();
0168     else if (d->gsWheelEvent)
0169         return d->gsWheelEvent->buttons();
0170     return Qt::NoButton;
0171 }
0172 
0173 QPoint KoPointerEvent::globalPos() const
0174 {
0175     if (d->mouseEvent)
0176         return d->mouseEvent->globalPos();
0177     else if (d->wheelEvent)
0178         return d->wheelEvent->globalPos();
0179     else if (d->tabletEvent)
0180         return d->tabletEvent->globalPos();
0181     else if (d->gsMouseEvent)
0182         return d->gsMouseEvent->screenPos();
0183     else if (d->gsWheelEvent)
0184         return d->gsWheelEvent->screenPos();
0185     else
0186         return d->globalPos;
0187 }
0188 
0189 QPoint KoPointerEvent::pos() const
0190 {
0191     if (d->mouseEvent)
0192         return d->mouseEvent->pos();
0193     else if (d->wheelEvent)
0194         return d->wheelEvent->pos();
0195     else if (d->tabletEvent)
0196         return d->tabletEvent->pos();
0197     else if (d->gsMouseEvent)
0198         return d->gsMouseEvent->pos().toPoint();
0199     else if (d->gsWheelEvent)
0200         return d->gsWheelEvent->pos().toPoint();
0201     else
0202         return d->pos;
0203 }
0204 
0205 qreal KoPointerEvent::pressure() const
0206 {
0207     if (d->tabletEvent)
0208         return d->tabletEvent->pressure();
0209     else
0210         return 1.0;
0211 }
0212 
0213 qreal KoPointerEvent::rotation() const
0214 {
0215     if (d->tabletEvent)
0216         return d->tabletEvent->rotation();
0217     else
0218         return 0.0;
0219 }
0220 
0221 qreal KoPointerEvent::tangentialPressure() const
0222 {
0223     if (d->tabletEvent)
0224         return d->tabletEvent->tangentialPressure();
0225     else
0226         return 0.0;
0227 }
0228 
0229 int KoPointerEvent::x() const
0230 {
0231     if (d->tabletEvent)
0232         return d->tabletEvent->x();
0233     if (d->wheelEvent)
0234         return d->wheelEvent->x();
0235     else if (d->mouseEvent)
0236         return d->mouseEvent->x();
0237     else
0238         return pos().x();
0239 }
0240 
0241 int KoPointerEvent::xTilt() const
0242 {
0243     if (d->tabletEvent)
0244         return d->tabletEvent->xTilt();
0245     else
0246         return 0;
0247 }
0248 
0249 int KoPointerEvent::y() const
0250 {
0251     if (d->tabletEvent)
0252         return d->tabletEvent->y();
0253     if (d->wheelEvent)
0254         return d->wheelEvent->y();
0255     else if (d->mouseEvent)
0256         return d->mouseEvent->y();
0257     else
0258         return pos().y();
0259 }
0260 
0261 int KoPointerEvent::yTilt() const
0262 {
0263     if (d->tabletEvent)
0264         return d->tabletEvent->yTilt();
0265     else
0266         return 0;
0267 }
0268 
0269 int KoPointerEvent::z() const
0270 {
0271     if (d->tabletEvent)
0272         return d->tabletEvent->z();
0273     else if (d->deviceEvent)
0274         return d->posZ;
0275     else
0276         return 0;
0277 }
0278 
0279 int KoPointerEvent::delta() const
0280 {
0281     if (d->wheelEvent)
0282         return d->wheelEvent->delta();
0283     else if (d->gsWheelEvent)
0284         return d->gsWheelEvent->delta();
0285     else
0286         return 0;
0287 }
0288 
0289 int KoPointerEvent::rotationX() const
0290 {
0291     return d->rotationX;
0292 }
0293 
0294 int KoPointerEvent::rotationY() const
0295 {
0296     return d->rotationY;
0297 }
0298 
0299 int KoPointerEvent::rotationZ() const
0300 {
0301     return d->rotationZ;
0302 }
0303 
0304 Qt::Orientation KoPointerEvent::orientation() const
0305 {
0306     if (d->wheelEvent)
0307         return d->wheelEvent->orientation();
0308     else if (d->gsWheelEvent)
0309         return d->gsWheelEvent->orientation();
0310     else
0311         return Qt::Horizontal;
0312 }
0313 
0314 bool KoPointerEvent::isTabletEvent()
0315 {
0316     return dynamic_cast<QTabletEvent*>(m_event) != 0;
0317 }
0318 
0319 void KoPointerEvent::setTabletButton(Qt::MouseButton button)
0320 {
0321     d->tabletButton = button;
0322 }
0323 
0324 Qt::KeyboardModifiers KoPointerEvent::modifiers() const
0325 {
0326     if (d->tabletEvent)
0327         return d->tabletEvent->modifiers();
0328     else if (d->mouseEvent)
0329         return d->mouseEvent->modifiers();
0330     else if (d->wheelEvent)
0331         return d->wheelEvent->modifiers();
0332     else if (d->deviceEvent)
0333         return d->deviceEvent->modifiers();
0334     else if (d->gsMouseEvent)
0335         return d->gsMouseEvent->modifiers();
0336     else if (d->gsWheelEvent)
0337         return d->gsWheelEvent->modifiers();
0338     else
0339         return Qt::NoModifier;
0340 }