first step for fixing the wacom problem on linux

preferencesAboutTextFull
Claudio Valerio 13 years ago
parent 70a204a920
commit e42bb6c098
  1. 125
      src/board/UBBoardView.cpp

@ -282,86 +282,82 @@ UBBoardView::event (QEvent * e)
return QGraphicsView::event (e); return QGraphicsView::event (e);
} }
void void UBBoardView::tabletEvent (QTabletEvent * event)
UBBoardView::tabletEvent (QTabletEvent * event)
{ {
if (!mUseHighResTabletEvent) if (!mUseHighResTabletEvent) {
{ event->setAccepted (false);
event->setAccepted (false); return;
return;
} }
UBDrawingController *dc = UBDrawingController::drawingController (); qDebug() << "tableEvent position " << event->pos();
qDebug() << "tableEvent global position " << event->globalPos();
QPointF tabletPos = UBGeometryUtils::pointConstrainedInRect (event->hiResGlobalPos ()
- mapToGlobal (QPoint (0, 0)), rect ());
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool (); UBDrawingController *dc = UBDrawingController::drawingController ();
if (event->type () == QEvent::TabletPress || event->type () == QEvent::TabletEnterProximity) QPointF tabletPos = UBGeometryUtils::pointConstrainedInRect (event->hiResGlobalPos () - mapToGlobal (QPoint (0, 0)), rect ());
{
if (event->pointerType () == QTabletEvent::Eraser) // QPointF tabletPos = event->pos();
{
dc->setStylusTool (UBStylusTool::Eraser); qDebug() << "tabletPos " << tabletPos;
mUsingTabletEraser = true;
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool ();
if (event->type () == QEvent::TabletPress || event->type () == QEvent::TabletEnterProximity) {
if (event->pointerType () == QTabletEvent::Eraser) {
dc->setStylusTool (UBStylusTool::Eraser);
mUsingTabletEraser = true;
} }
else else {
{ if (mUsingTabletEraser && currentTool == UBStylusTool::Eraser)
if (mUsingTabletEraser && currentTool == UBStylusTool::Eraser) dc->setStylusTool (dc->latestDrawingTool ());
{
dc->setStylusTool (dc->latestDrawingTool ());
}
mUsingTabletEraser = false; mUsingTabletEraser = false;
} }
} }
// if event are not Pen events, we drop the tablet stuff and route everything through mouse event // if event are not Pen events, we drop the tablet stuff and route everything through mouse event
if (currentTool != UBStylusTool::Pen if (currentTool != UBStylusTool::Pen && currentTool != UBStylusTool::Line && currentTool != UBStylusTool::Marker && !mMarkerPressureSensitive){
&& currentTool != UBStylusTool::Line event->setAccepted (false);
&& currentTool != UBStylusTool::Marker return;
&& !mMarkerPressureSensitive)
{
event->setAccepted (false);
return;
} }
QPointF scenePos = viewportTransform ().inverted ().map (tabletPos); QPointF scenePos = viewportTransform ().inverted ().map (tabletPos);
qDebug() << "scene Pos " << scenePos;
qreal pressure = 1.0; qreal pressure = 1.0;
if (((currentTool == UBStylusTool::Pen || currentTool == UBStylusTool::Line) if (((currentTool == UBStylusTool::Pen || currentTool == UBStylusTool::Line)
&& mPenPressureSensitive) && mPenPressureSensitive)
|| (currentTool == UBStylusTool::Marker && mMarkerPressureSensitive)) || (currentTool == UBStylusTool::Marker && mMarkerPressureSensitive))
{ pressure = event->pressure ();
pressure = event->pressure ();
}
bool acceptEvent = true;
switch (event->type ()) bool acceptEvent = true;
{
case QEvent::TabletPress: switch (event->type ()) {
{ case QEvent::TabletPress: {
mTabletStylusIsPressed = true; qDebug() << "TabletPress";
scene ()->inputDevicePress (scenePos, pressure); mTabletStylusIsPressed = true;
scene()->inputDevicePress (scenePos, pressure);
break; break;
} }
case QEvent::TabletMove: case QEvent::TabletMove: {
{ qDebug() << "TabletMove";
if (mTabletStylusIsPressed) if (mTabletStylusIsPressed)
{
scene ()->inputDeviceMove (scenePos, pressure); scene ()->inputDeviceMove (scenePos, pressure);
}
acceptEvent = false; // rerouted to mouse move acceptEvent = false; // rerouted to mouse move
break; break;
} }
case QEvent::TabletRelease: case QEvent::TabletRelease: {
{ qDebug() << "TabletRelease";
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool (); UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool ();
scene ()->setToolCursor (currentTool); scene ()->setToolCursor (currentTool);
setToolCursor (currentTool); setToolCursor (currentTool);
@ -374,22 +370,21 @@ UBBoardView::tabletEvent (QTabletEvent * event)
mMouseButtonIsPressed = false; mMouseButtonIsPressed = false;
break; break;
} }
default: default: {
{
//NOOP - avoid compiler warning //NOOP - avoid compiler warning
} }
} }
// ignore mouse press and mouse move tablet event so that it is rerouted to mouse events, // ignore mouse press and mouse move tablet event so that it is rerouted to mouse events,
// documented in QTabletEvent Class Reference: // documented in QTabletEvent Class Reference:
/* The event handler QWidget::tabletEvent() receives all three types of tablet events. /* The event handler QWidget::tabletEvent() receives all three types of tablet events.
Qt will first send a tabletEvent then, if it is not accepted, it will send a mouse event. */ Qt will first send a tabletEvent then, if it is not accepted, it will send a mouse event. */
// //
// This is a workaround to the fact that tablet event are not delivered to child widget (like palettes) // This is a workaround to the fact that tablet event are not delivered to child widget (like palettes)
// //
event->setAccepted (acceptEvent); event->setAccepted (acceptEvent);
} }

Loading…
Cancel
Save