KoPointerEvent KisToolProxy::convertEventToPointerEvent(QEvent *event, const QPointF &docPoint, bool *result) { switch (event->type()) { case QEvent::TabletPress: case QEvent::TabletRelease: case QEvent::TabletMove: { *result = true; QTabletEvent *tabletEvent = static_cast<QTabletEvent*>(event); KoPointerEvent ev(tabletEvent, docPoint); ev.setTabletButton(Qt::LeftButton); return ev; } case QEvent::MouseButtonPress: case QEvent::MouseButtonDblClick: case QEvent::MouseButtonRelease: case QEvent::MouseMove: { *result = true; QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); return KoPointerEvent(mouseEvent, docPoint); } default: ; } *result = false; QMouseEvent fakeEvent(QEvent::MouseMove, QPoint(), Qt::NoButton, Qt::NoButton, Qt::NoModifier); return KoPointerEvent(&fakeEvent, QPointF()); }
KoPointerEvent KisToolDyna::filterEvent(KoPointerEvent* event) { qreal wid = m_widthRange - m_mouse.vel; wid = wid * m_width; if (wid < 0.00001) { wid = 0.00001; } qreal delx = m_mouse.angx * wid; qreal dely = m_mouse.angy * wid; qreal px = m_mouse.lastx; qreal py = m_mouse.lasty; qreal nx = m_mouse.curx; qreal ny = m_mouse.cury; QPointF prev(px , py); // previous position QPointF now(nx , ny); // new position QPointF prevr(px + m_odelx , py + m_odely); QPointF prevl(px - m_odelx , py - m_odely); QPointF nowl(nx - delx , ny - dely); QPointF nowr(nx + delx , ny + dely); // transform coords from float points into image points prev.rx() *= m_surfaceWidth; prevr.rx() *= m_surfaceWidth; prevl.rx() *= m_surfaceWidth; now.rx() *= m_surfaceWidth; nowl.rx() *= m_surfaceWidth; nowr.rx() *= m_surfaceWidth; prev.ry() *= m_surfaceHeight; prevr.ry() *= m_surfaceHeight; prevl.ry() *= m_surfaceHeight; now.ry() *= m_surfaceHeight; nowl.ry() *= m_surfaceHeight; nowr.ry() *= m_surfaceHeight; qreal m_pressure; #if 0 qreal xTilt, yTilt; qreal m_rotation; qreal m_tangentialPressure; // some funny debugging dbgPlugins << "m_mouse.vel: " << m_mouse.vel; dbgPlugins << "m_mouse.velx: " << m_mouse.velx; dbgPlugins << "m_mouse.vely: " << m_mouse.vely; dbgPlugins << "m_mouse.accx: " << m_mouse.accx; dbgPlugins << "m_mouse.accy: " << m_mouse.accy; dbgPlugins << "fixed: " << m_mouse.fixedangle; dbgPlugins << "drag: " << m_curdrag; dbgPlugins << "mass: " << m_curmass; dbgPlugins << "xAngle: " << m_xangle; dbgPlugins << "yAngle: " << m_yangle; #endif m_pressure = m_mouse.vel * 100; m_pressure = qBound(0.0,m_pressure, 1.0); m_odelx = delx; m_odely = dely; // how to change pressure in the KoPointerEvent??? return KoPointerEvent(event,now); }