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 }