bool QToolBarPrivate::mousePressEvent(QMouseEvent *event) { Q_Q(QToolBar); QStyleOptionToolBar opt; q->initStyleOption(&opt); if (q->style()->subElementRect(QStyle::SE_ToolBarHandle, &opt, q).contains(event->pos()) == false) { #ifdef Q_WS_MAC // When using the unified toolbar on Mac OS X the user can can click and // drag between toolbar contents to move the window. Make this work by // implementing the standard mouse-dragging code and then call // window->move() in mouseMoveEvent below. if (QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parent)) { if (mainWindow->toolBarArea(q) == Qt::TopToolBarArea && mainWindow->unifiedTitleAndToolBarOnMac() && q->childAt(event->pos()) == 0) { macWindowDragging = true; macWindowDragPressPosition = event->pos(); return true; } } #endif return false; } if (event->button() != Qt::LeftButton) return true; if (!layout->movable()) return true; initDrag(event->pos()); return true; }
bool QDockWidgetPrivate::mousePressEvent(QMouseEvent *event) { #if !defined(QT_NO_MAINWINDOW) Q_Q(QDockWidget); QDockWidgetLayout *dwLayout = qobject_cast<QDockWidgetLayout*>(layout); if (!dwLayout->nativeWindowDeco()) { QRect titleArea = dwLayout->titleArea(); if (event->button() != Qt::LeftButton || !titleArea.contains(event->pos()) || // check if the tool window is movable... do nothing if it // is not (but allow moving if the window is floating) (!hasFeature(this, QDockWidget::DockWidgetMovable) && !q->isFloating()) || qobject_cast<QMainWindow*>(parent) == 0 || isAnimating() || state != 0) { return false; } initDrag(event->pos(), false); if (state) state->ctrlDrag = hasFeature(this, QDockWidget::DockWidgetFloatable) && event->modifiers() & Qt::ControlModifier; return true; } #endif // !defined(QT_NO_MAINWINDOW) return false; }
void abstractRotation::drag(int x,int y){ int raggio=(int)(qMin(dimx,dimy)*0.4);//prendo solo l'80% come sfera di drag e poi lo dimezzo per avere il raggio int xx=x-dimx/2;//coordinate inizio drag relative al centro int yy=y-dimy/2; int xx2=posx-dimx/2;//coordinate fine drag relative al centro int yy2=posy-dimy/2; double h;//altezza sulla sfera h=raggio*raggio-xx*xx-yy*yy; if (h<0) h=0; double_point3 v1(xx,yy,sqrt(h)); //vettore che punta all'inizio del drag h=raggio*raggio-xx2*xx2-yy2*yy2; if (h<0) h=0; double_point3 v2(xx2,yy2,sqrt(h)); //vettore che punta alla fine del drag double_point3 asse(v1%v2);//ottengo l'asse di rotazione come il vettore perpendicolare ai due precedenti asse.normalize(); double seno,coseno; v1.normalize(); v2.normalize(); seno=(v1%v2).module(); //ottengo il seno come modulo del cross dei due vettori normalizzati coseno=-(v1*v2)*2; //ottengo il coseno come il dot dei due vettori normalizzati... poi lo dimezzo per avere un'approssimazione di cos(x/2) asse=asse*seno; double_quaternion tmp(coseno,asse.x(),asse.y(),asse.z()); rot=tmp*rot; rot.normalize();//rinormalizzo per evitare errori di approssimazione //rot=normalize(rot);//rinormalizzo per evitare errori di approssimazione initDrag(x,y); }
bool UINode::onMouseButtonPress (int32_t x, int32_t y, unsigned char button) { if (!_enabled) return false; for (UINodeListRevIter i = _nodes.rbegin(); i != _nodes.rend(); ++i) { UINode* nodePtr = *i; if (!nodePtr->hasFocus()) continue; if ((*i)->onMouseButtonPress(x - getRenderX(), y - getRenderY(), button)) { return true; } } switch (button) { case SDL_BUTTON_LEFT: initDrag(x, y); onMouseLeftPress(x, y); return true; case SDL_BUTTON_RIGHT: return onMouseRightPress(x, y); case SDL_BUTTON_MIDDLE: return onMouseMiddlePress(x, y); } return false; }
void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event) { Q_Q(QDockWidget); int fw = q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, q); QRect geo = q->geometry(); QRect titleRect = q->frameGeometry(); #ifdef Q_WS_MAC if ((features & QDockWidget::DockWidgetVerticalTitleBar)) { titleRect.setTop(geo.top()); titleRect.setBottom(geo.bottom()); titleRect.setRight(geo.left() - 1); } else #endif { titleRect.setLeft(geo.left()); titleRect.setRight(geo.right()); titleRect.setBottom(geo.top() - 1); titleRect.adjust(0, fw, 0, 0); } switch (event->type()) { case QEvent::NonClientAreaMouseButtonPress: if (!titleRect.contains(event->globalPos())) break; if (state != 0) break; if (qobject_cast<QMainWindow*>(parent) == 0) break; if (isAnimating()) break; initDrag(event->pos(), true); if (state == 0) break; state->ctrlDrag = event->modifiers() & Qt::ControlModifier; startDrag(); break; case QEvent::NonClientAreaMouseMove: if (state == 0 || !state->dragging) break; if (state->nca) { endDrag(); } break; case QEvent::NonClientAreaMouseButtonRelease: break; case QEvent::NonClientAreaMouseButtonDblClick: _q_toggleTopLevel(); break; default: break; } }
bool UINode::onFingerPress (int64_t finger, uint16_t x, uint16_t y) { initDrag(x, y); for (UINodeListRevIter i = _nodes.rbegin(); i != _nodes.rend(); ++i) { UINode* nodePtr = *i; if (!nodePtr->isVisible()) continue; if (!nodePtr->checkBounds(x - getRenderX(), y - getRenderY())) continue; if (nodePtr->onFingerPress(finger, x - getRenderX(), y - getRenderY())) return true; } return false; }
void QDockWidgetPrivate::mousePressEvent(QMouseEvent *event) { #if !defined(QT_NO_MAINWINDOW) Q_Q(QDockWidget); QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(q->layout()); if (!layout->nativeWindowDeco()) { QRect titleArea = layout->titleArea(); if (event->button() != Qt::LeftButton) return; if (!titleArea.contains(event->pos())) return; // check if the tool window is movable... do nothing if it is not if (!::hasFeature(q, QDockWidget::DockWidgetMovable)) return; if (qobject_cast<QMainWindow*>(q->parentWidget()) == 0) return; if (isAnimating()) return; if (state != 0) return; initDrag(event->pos(), false); if (state == 0) return; state->ctrlDrag = event->modifiers() & Qt::ControlModifier; } #endif // !defined(QT_NO_MAINWINDOW) }
void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event) { Q_Q(QDockWidget); int fw = q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, q); QRect geo = q->geometry(); QRect titleRect = q->frameGeometry(); #ifdef Q_WS_MAC if ((features & QDockWidget::DockWidgetVerticalTitleBar)) { titleRect.setTop(geo.top()); titleRect.setBottom(geo.bottom()); titleRect.setRight(geo.left() - 1); } else #endif { titleRect.setLeft(geo.left()); titleRect.setRight(geo.right()); titleRect.setBottom(geo.top() - 1); titleRect.adjust(0, fw, 0, 0); } switch (event->type()) { case QEvent::NonClientAreaMouseButtonPress: if (!titleRect.contains(event->globalPos())) break; if (state != 0) break; if (qobject_cast<QMainWindow*>(parent) == 0) break; if (isAnimating()) break; initDrag(event->pos(), true); if (state == 0) break; #ifdef Q_WS_WIN // On Windows, NCA mouse events don't contain modifier info state->ctrlDrag = GetKeyState(VK_CONTROL) & 0x8000; #else state->ctrlDrag = event->modifiers() & Qt::ControlModifier; #endif startDrag(); break; case QEvent::NonClientAreaMouseMove: if (state == 0 || !state->dragging) break; if (state->nca) { endDrag(); } #ifdef Q_OS_MAC else { // workaround for lack of mouse-grab on Mac QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget())); Q_ASSERT(layout != 0); q->move(event->globalPos() - state->pressPos); if (!state->ctrlDrag) layout->hover(state->widgetItem, event->globalPos()); } #endif break; case QEvent::NonClientAreaMouseButtonRelease: #ifdef Q_OS_MAC if (state) endDrag(); #endif break; case QEvent::NonClientAreaMouseButtonDblClick: _q_toggleTopLevel(); break; default: break; } }