void DefaultViewPort::wheelEvent(QWheelEvent* evnt)
{
int delta = evnt->delta();
- int cv_event = -1;
- int flags = ((delta & 0xffff)<<16) | ((evnt->orientation() == Qt::Vertical) ? CV_EVENT_MOUSEWHEEL : CV_EVENT_MOUSEHWHEEL);
+ int cv_event = ((evnt->orientation() == Qt::Vertical) ? CV_EVENT_MOUSEWHEEL : CV_EVENT_MOUSEHWHEEL);
+ int flags = (delta & 0xffff)<<16;
QPoint pt = evnt->pos();
- icvmouseHandler(evnt, mouse_wheel, cv_event, flags);
- icvmouseProcessing(QPoingF(pt), cv_event, flags);
+ icvmouseHandler((QMouseEvent*)evnt, mouse_wheel, cv_event, flags);
+ icvmouseProcessing(QPointF(pt), cv_event, flags);
scaleView(delta / 240.0, pt);
viewport()->update();
- QWidget::mouseWheel(evnt);
+ QWidget::wheelEvent(evnt);
}
Qt::KeyboardModifiers modifiers = evnt->modifiers();
Qt::MouseButtons buttons = evnt->buttons();
- flags = 0;
+ // This line gives excess flags flushing, with it you cannot predefine flags value.
+ // icvmouseHandler called with flags == 0 where it really need.
+ //flags = 0;
if(modifiers & Qt::ShiftModifier)
flags |= CV_EVENT_FLAG_SHIFTKEY;
if(modifiers & Qt::ControlModifier)
if(buttons & Qt::MidButton)
flags |= CV_EVENT_FLAG_MBUTTON;
- cv_event = CV_EVENT_MOUSEMOVE;
- switch(evnt->button())
- {
- case Qt::LeftButton:
- cv_event = tableMouseButtons[category][0];
- flags |= CV_EVENT_FLAG_LBUTTON;
- break;
- case Qt::RightButton:
- cv_event = tableMouseButtons[category][1];
- flags |= CV_EVENT_FLAG_RBUTTON;
- break;
- case Qt::MidButton:
- cv_event = tableMouseButtons[category][2];
- flags |= CV_EVENT_FLAG_MBUTTON;
- break;
- default:;
- }
+ if (cv_event == -1)
+ switch(evnt->button())
+ {
+ case Qt::LeftButton:
+ cv_event = tableMouseButtons[category][0];
+ flags |= CV_EVENT_FLAG_LBUTTON;
+ break;
+ case Qt::RightButton:
+ cv_event = tableMouseButtons[category][1];
+ flags |= CV_EVENT_FLAG_RBUTTON;
+ break;
+ case Qt::MidButton:
+ cv_event = tableMouseButtons[category][2];
+ flags |= CV_EVENT_FLAG_MBUTTON;
+ break;
+ default:
+ cv_event = CV_EVENT_MOUSEMOVE;
+ }
}
glDrawCallback(glDrawData);
}
+void OpenGlViewPort::wheelEvent(QWheelEvent* evnt)
+{
+ int delta = evnt->delta();
+ int cv_event = ((evnt->orientation() == Qt::Vertical) ? CV_EVENT_MOUSEWHEEL : CV_EVENT_MOUSEHWHEEL);
+ int flags = (delta & 0xffff)<<16;
+ QPoint pt = evnt->pos();
+
+ icvmouseHandler((QMouseEvent*)evnt, mouse_wheel, cv_event, flags);
+ icvmouseProcessing(QPointF(pt), cv_event, flags);
+
+ scaleView(delta / 240.0, pt);
+ viewport()->update();
+
+ QWidget::wheelEvent(evnt);
+}
+
void OpenGlViewPort::mousePressEvent(QMouseEvent* evnt)
{
int cv_event = -1, flags = 0;
Qt::KeyboardModifiers modifiers = evnt->modifiers();
Qt::MouseButtons buttons = evnt->buttons();
- flags = 0;
- if (modifiers & Qt::ShiftModifier)
+ // This line gives excess flags flushing, with it you cannot predefine flags value.
+ // icvmouseHandler called with flags == 0 where it really need.
+ //flags = 0;
+ if(modifiers & Qt::ShiftModifier)
flags |= CV_EVENT_FLAG_SHIFTKEY;
- if (modifiers & Qt::ControlModifier)
+ if(modifiers & Qt::ControlModifier)
flags |= CV_EVENT_FLAG_CTRLKEY;
- if (modifiers & Qt::AltModifier)
+ if(modifiers & Qt::AltModifier)
flags |= CV_EVENT_FLAG_ALTKEY;
- if (buttons & Qt::LeftButton)
- flags |= CV_EVENT_FLAG_LBUTTON;
- if (buttons & Qt::RightButton)
- flags |= CV_EVENT_FLAG_RBUTTON;
- if (buttons & Qt::MidButton)
- flags |= CV_EVENT_FLAG_MBUTTON;
-
- cv_event = CV_EVENT_MOUSEMOVE;
- switch (evnt->button())
- {
- case Qt::LeftButton:
- cv_event = tableMouseButtons[category][0];
+ if(buttons & Qt::LeftButton)
flags |= CV_EVENT_FLAG_LBUTTON;
- break;
-
- case Qt::RightButton:
- cv_event = tableMouseButtons[category][1];
+ if(buttons & Qt::RightButton)
flags |= CV_EVENT_FLAG_RBUTTON;
- break;
-
- case Qt::MidButton:
- cv_event = tableMouseButtons[category][2];
+ if(buttons & Qt::MidButton)
flags |= CV_EVENT_FLAG_MBUTTON;
- break;
- default:
- ;
- }
+ if (cv_event == -1)
+ switch(evnt->button())
+ {
+ case Qt::LeftButton:
+ cv_event = tableMouseButtons[category][0];
+ flags |= CV_EVENT_FLAG_LBUTTON;
+ break;
+ case Qt::RightButton:
+ cv_event = tableMouseButtons[category][1];
+ flags |= CV_EVENT_FLAG_RBUTTON;
+ break;
+ case Qt::MidButton:
+ cv_event = tableMouseButtons[category][2];
+ flags |= CV_EVENT_FLAG_MBUTTON;
+ break;
+ default:
+ cv_event = CV_EVENT_MOUSEMOVE;
+ }
}
};
-enum type_mouse_event { mouse_up = 0, mouse_down = 1, mouse_dbclick = 2, mouse_move = 3 };
+enum type_mouse_event { mouse_up = 0, mouse_down = 1, mouse_dbclick = 2, mouse_move = 3, mouse_wheel = 4 };
static const int tableMouseButtons[][3]={
{CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP}, //mouse_up
{CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN}, //mouse_down
{CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK}, //mouse_dbclick
- {CV_EVENT_MOUSEMOVE, CV_EVENT_MOUSEMOVE, CV_EVENT_MOUSEMOVE} //mouse_move
+ {CV_EVENT_MOUSEMOVE, CV_EVENT_MOUSEMOVE, CV_EVENT_MOUSEMOVE}, //mouse_move
+ {0, 0, 0} //mouse_wheel, to prevent exceptions in code
};
void resizeGL(int w, int h);
void paintGL();
+ void wheelEvent(QWheelEvent* event);
void mouseMoveEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event);