void DragAndDropManager::cursorReleased(const PointerEvent& event) { if(!mIsDragInProgress) return; if(!onDragEnded.empty()) { DragCallbackInfo info; onDragEnded(event, info); endDrag(info.processed); } else endDrag(false); Platform::releaseMouseCapture(); }
void GUITabbedTitleBar::tabDragEnd(UINT32 tabIdx, const Vector2I& dragPos) { endDrag(); if(mActiveTabIdx != tabIdx) tabToggled(tabIdx, true); _markLayoutAsDirty(); }
// Called when touch has ended void ItemDragState::onTouchEnded(ichigo::Agent *agent) { ichigo::Director *director = (ichigo::Director *)agent; ichigo::TouchPoint *tp = director->getTouchPoint(_touchID); if (tp && tp->hasEnded()) { endDrag(); } }
void KexiRelationViewTableContainerHeader::mouseReleaseEvent(QMouseEvent *ev) { kDebug() << "KexiRelationViewTableContainerHeader::Mouse Release Event"; if (m_dragging && ev->button() & Qt::LeftButton) { setCursor(Qt::ArrowCursor); m_dragging = false; emit endDrag(); } ev->accept(); }
void MediaControlPanelElement::setCanBeDragged(bool canBeDragged) { if (m_canBeDragged == canBeDragged) return; m_canBeDragged = canBeDragged; if (!canBeDragged) endDrag(); }
void GUITabbedTitleBar::tabDragged(UINT32 tabIdx, const Vector2I& dragPos) { INT32 idx = uniqueIdxToSeqIdx(tabIdx); if(idx != -1) { Rect2I bounds = _getLayoutData().area; if(bounds.contains(dragPos)) { if(!mDragInProgress) startDrag(idx, dragPos); mDragBtnOffset = dragPos.x - mInitialDragOffset; for(INT32 i = 0; i < idx; i++) { UINT32 width = mTabButtons[i]->_getLayoutData().area.width; INT32 centerX = mTabButtons[i]->_getLayoutData().area.x + width / 2; if(dragPos.x < centerX) { GUITabButton* temp = mTabButtons[i]; mTabButtons[i] = mTabButtons[idx]; mTabButtons[idx] = temp; break; } } for(UINT32 i = idx + 1; i < (UINT32)mTabButtons.size(); i++) { UINT32 width = mTabButtons[i]->_getLayoutData().area.width; INT32 centerX = mTabButtons[i]->_getLayoutData().area.x + width / 2; if(dragPos.x > centerX) { GUITabButton* temp = mTabButtons[i]; mTabButtons[i] = mTabButtons[idx]; mTabButtons[idx] = temp; break; } } _markLayoutAsDirty(); } else { endDrag(); _markLayoutAsDirty(); if(!onTabDraggedOff.empty()) onTabDraggedOff(tabIdx); } } }
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; } }
/********************************************* Reset cam orientation, zoom, rotation **********************************************/ void App::resetCam(){ for(int i=0;i<3;i++){ fRot[i] = 0.0f; } fRot[0] = 20; fZoom = 0.0f; dragVel = Vector2(0,0); endDrag(); camSetPos(0, -SLAB_SIZE/3, SLAB_SIZE); camLookAt(0, 0, 0); }
bool QDockWidgetPrivate::mouseReleaseEvent(QMouseEvent *event) { #if !defined(QT_NO_MAINWINDOW) if (event->button() == Qt::LeftButton && state && !state->nca) { endDrag(); return true; //filter out the event } #endif // !defined(QT_NO_MAINWINDOW) return false; }
// Callback for when touch has ended void DraggingState::onTouchEnded(Agent* director) { // Check if the ending touch is the one dragging this agent TouchPoint *touchPoint = ((Director *)director)->getTouchPoint(_draggingTouchID); if (!touchPoint || touchPoint->hasEnded()) { // Move to final position and end the drag moveActorToTouchPosition(((Director *)director)->getTouchPoint(_draggingTouchID)); endDrag(); } }
void DragAndDropManager::_update() { if(!mIsDragInProgress) return; // This generally happens when window loses focus and capture is lost (for example alt+tab) int captureActive = mCaptureActive.load(); if (!captureActive && mCaptureChanged.load() && (gTime().getFrameIdx() > mCaptureChangeFrame.load())) // Wait one frame to insure input (like mouse up) gets a chance to be processed { endDrag(false); mCaptureChanged.store(false); } }
// Callback for when touch has moved void DraggingState::onTouchMoved(Agent* director) { // Get the current position of the touch TouchPoint *touchPoint = ((Director *)director)->getTouchPoint(_draggingTouchID); if (touchPoint) { moveActorToTouchPosition(touchPoint); } else { // Can't find touch, end the dragging endDrag(); } }
void QDockWidgetPrivate::mouseReleaseEvent(QMouseEvent *event) { #if !defined(QT_NO_MAINWINDOW) if (event->button() != Qt::LeftButton) return; if (!state) return; if (state->nca) return; endDrag(); #endif // !defined(QT_NO_MAINWINDOW) }
void DragAndDropManager::startDrag(UINT32 typeId, void* data, std::function<void(bool)> dropCallback, bool needsValidDropTarget) { if (mIsDragInProgress) endDrag(false); mDragTypeId = typeId; mData = data; mNeedsValidDropTarget = needsValidDropTarget; addDropCallback(dropCallback); mIsDragInProgress = true; mCaptureActive.store(false); mCaptureChanged.store(false); Platform::captureMouse(*gCoreApplication().getPrimaryWindow()); }
bool QToolBarPrivate::mouseReleaseEvent(QMouseEvent*) { if (state != 0) { endDrag(); return true; } else { #ifdef Q_WS_MAC if (!macWindowDragging) return false; macWindowDragging = false; macWindowDragPressPosition = QPoint(); return true; #endif return false; } }
void DocWindowFrame::onButtonReleaseEvent( xcb_button_release_event_t* event) { if(isDragging()){ int32_t prevX, prevY; getCurrentDragPos(prevX, prevY); int32_t x, y; if(endDrag(event->detail, event->root_x, event->root_y, x, y)){ drawDragOutline(prevX, prevY); mFrameWindow.moveTo(x, y); } } }
// Called every time touch has been moved void ItemDragState::onTouchMoved(ichigo::Agent *agent) { ichigo::Director *director = (ichigo::Director *)agent; ichigo::TouchPoint *tp = director->getTouchPoint(_touchID); if (tp) { ichigo::Point localPos = _itemView->convertScreenToLocal(tp->getPos()); localPos.x += CONST_FLOAT("ITEM_DRAG_OFFSET_X"); localPos.y += CONST_FLOAT("ITEM_DRAG_OFFSET_Y"); _itemView->setPosition(localPos); } else { endDrag(); } }
void MediaControlPanelElement::defaultEventHandler(Event* event) { MediaControlDivElement::defaultEventHandler(event); if (event->isMouseEvent()) { LayoutPoint location = static_cast<MouseEvent*>(event)->absoluteLocation(); if (event->type() == eventNames().mousedownEvent && event->target() == this) { startDrag(location); event->setDefaultHandled(); } else if (event->type() == eventNames().mousemoveEvent && m_isBeingDragged) continueDrag(location); else if (event->type() == eventNames().mouseupEvent && m_isBeingDragged) { continueDrag(location); endDrag(); event->setDefaultHandled(); } } }
Qt::DropAction QBasicDrag::drag(QDrag *o) { m_drag = o; m_executed_drop_action = Qt::IgnoreAction; m_can_drop = false; m_restoreCursor = true; #ifndef QT_NO_CURSOR qApp->setOverrideCursor(Qt::DragCopyCursor); updateCursor(m_executed_drop_action); #endif startDrag(); m_eventLoop = new QEventLoop; m_eventLoop->exec(); delete m_eventLoop; m_eventLoop = 0; m_drag = 0; endDrag(); return m_executed_drop_action; }
bool GeometryInteractor::mouseReleaseEvent(SimpleOpenGLWidget* simpleOpenGLWidget, QMouseEvent* e) { endDrag(simpleOpenGLWidget, e->x(), e->y()); simpleOpenGLWidget->updateGL(); return true; }
void MechPurchaseScreen::update() { if(!MPlayer || !ChatWindow::instance()->pointInside(userInput->getMouseX(), userInput->getMouseY())) LogisticsScreen::update(); // update CBills int32_t amount = LogisticsData::instance->getCBills(); int32_t color = 0xff005392; if(amount != oldCBillsAmount) { previousAmount = oldCBillsAmount - amount; curCount = .00001f; oldCBillsAmount = amount; if(previousAmount < 0) soundSystem->playDigitalSample(WINDOW_OPEN); else soundSystem->playDigitalSample(WINDOW_CLOSE); } if(curCount && curCount + frameLength < countDownTime) { curCount += frameLength; float curAmount = previousAmount - (curCount / countDownTime * previousAmount); amount += curAmount; color = 0xffc8e100; if(curAmount > 0) color = 0xffa21600; } else if(flashTime) { flashTime += frameLength; if(flashTime < .125 || (flashTime > .25 && flashTime < .3875) || (flashTime > .5 && flashTime < .6625)) { color = 0xff000000; } else if(flashTime > .75) { flashTime = 0; } else { color = 0xffff0000; } } char tmp[64]; sprintf(tmp, "%ld ", amount); textObjects[1].setText(tmp); textObjects[1].setColor(color); int32_t oldSell = inventoryListBox.GetSelectedItem(); inventoryListBox.update(); int32_t newSell = inventoryListBox.GetSelectedItem(); if(oldSell != newSell && newSell != -1) { variantListBox.SelectItem(-1); } oldSell = variantListBox.GetSelectedItem(); variantListBox.update(); newSell = variantListBox.GetSelectedItem(); if(oldSell != newSell && newSell != -1) { inventoryListBox.SelectItem(-1); } variantListBox.disableItemsThatCostMoreThanRP(); LogisticsMech* pCurSell = inventoryListBox.getCurrentMech(); LogisticsMech* pCurBuy = variantListBox.getCurrentMech(); // disable the sell button buttons[2].disable(pCurSell ? 0 : 1); if(pCurBuy) { if(pCurBuy->getCost() > LogisticsData::instance->getCBills()) { pCurBuy = nullptr; } setMech(pCurBuy); } else if(pCurSell) setMech(pCurSell); buttons[1].disable(pCurBuy ? 0 : 1); if(!pCurBuy && userInput->isLeftClick() && buttons[1].pointInside(userInput->getMouseX(), userInput->getMouseY())) { if(!flashTime) flashTime = .0001f; } // drag and drop // update drag and drop if(pDragMech) { dragIcon.moveTo(userInput->getMouseX() - dragIcon.width() / 2, userInput->getMouseY() - dragIcon.height() / 2); if(userInput->leftMouseReleased()) { endDrag(); } } mechDisplay.update(); inventoryListBox.enableAllItems(); if(MPlayer && ChatWindow::instance()) ChatWindow::instance()->update(); }
/********************************************* SDL event loop **********************************************/ void App::utilEventLoop(){ SDL_Event event; while ( !done ){ while ( SDL_PollEvent( &event ) ){ //Hand the event off to the GUI first. If the GUI handles it, it's //done. #ifdef ENABLE_GUI if(processGUIEvent(event)){ continue; } #endif switch( event.type ){ case SDL_VIDEORESIZE: //handle resize event surface = SDL_SetVideoMode( event.resize.w, event.resize.h, 16, videoFlags ); if ( !surface ){ ERR( "Could not get a surface after resize: %s\n", SDL_GetError( ) ); notifyShutdown(); } resizeWindow( event.resize.w, event.resize.h ); #ifdef ENABLE_GUI resizeGUI( event.resize.w, event.resize.h ); #endif break; case SDL_QUIT: //handle quit requests notifyShutdown(); break; case SDL_MOUSEBUTTONDOWN: if(mFlowMgr->onClick(event.button.button, fMouseX, fMouseY, fMouseZ)){ break; } onMouseEvent(event.button.button, SDL_MOUSEBUTTONDOWN); beginDrag(); break; case SDL_MOUSEBUTTONUP: onMouseEvent(event.button.button, SDL_MOUSEBUTTONUP); endDrag(); break; case SDL_KEYDOWN: handleKeyEvent(&event.key.keysym, event.type); break; case SDL_KEYUP: handleKeyEvent(&event.key.keysym, event.type); break; default: break; } } if (!done){ //Do one frames worth of work and figure out the length of time uint32_t startTime = SDL_GetTicks(); renderMain(); updateMain(); uint32_t endTime = SDL_GetTicks(); //Figure out the scaling factor for FPS-independent movement uint32_t diff = endTime - startTime; if (iMaxFrameRate > 0 && diff < 1000 / iMaxFrameRate) { SDL_Delay((1000 / iMaxFrameRate) - diff); diff = 1000 / iMaxFrameRate; } fTimeScale = (float)diff * fTimeScaleScale; //Every hour, do a cleanup if(fCleanupTimer < 0.0f){ ps()->doPeriodicCleanup(); fCleanupTimer = CLEANUP_TIMER; } //Update our various timers fCleanupTimer -= fTimeScale; fUptime += fTimeScale; fParticleFPS = fTimeScale; } } }
MRESULT EXPENTRY icqFrameWindow(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { switch(msg) { case WM_DDE_INITIATEACK: return (MRESULT) icqDDEInitiateAck(hwnd, (HWND)mp1, (PDDEINIT)mp2); case WM_DDE_DATA: DBGMessage("WM_DDE_DATA"); icqDDEData(hwnd, (PDDESTRUCT) mp2); break; case WM_CLOSE: DBGMessage("WM_CLOSE"); close(hwnd); break; case WM_CREATE: icqskin_cfgWindow(hwnd,ICQFRAME,0); break; case WM_DESTROY: destroy(hwnd); break; case WM_ERASEBACKGROUND: erase(hwnd,(HPS) mp1, (PRECTL) mp2); break; case WM_SIZE: resize(hwnd,SHORT1FROMMP(mp2),SHORT2FROMMP(mp2)); broadcast(hwnd,WMICQ_AUTOSIZE,0,0); break; case WM_PAINT: paint(hwnd); break; case WM_SETICON: WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),msg,mp1,mp2); break; case WM_COMMAND: action(hwnd,SHORT1FROMMP(mp1), SHORT1FROMMP(mp2)); break; case WM_PRESPARAMCHANGED: ppchanged(hwnd,LONGFROMMP(mp1)); break; case WM_SETWINDOWPARAMS: return setparm(hwnd, PVOIDFROMMP(mp1), mp2); case WMICQ_SETNAME: // strncpy( ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->name, (const char *) mp1, 19); ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->name = (const char *) mp1; break; case WMICQ_SETICQHANDLE: DBGTracex(mp1); ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq = (HICQ) mp1; break; case WMICQ_GETICQHANDLE: return (MRESULT) ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq; case WMICQ_SETBUTTONTBL: setbuttons(hwnd,(const struct icqButtonTable *) mp1, (int) mp2); break; case WMICQ_QUERYPALLETE: return (MRESULT) ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->pal; case WMICQ_EVENT: // MP1 = type,code,user MP2 = parm event(hwnd,CHAR3FROMMP(mp1),CHAR4FROMMP(mp1),SHORT1FROMMP(mp1),(ULONG) mp2); break; case WMICQ_SELECTPAL: icqskin_loadPallete( (HPS) mp1, 0, ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->pal); break; case 0x041E: return WinDefWindowProc(hwnd, msg, mp1, mp2); case 0x041F: return WinDefWindowProc(hwnd, msg, mp1, mp2); case WM_BEGINDRAG: return beginDrag(hwnd, (POINTS *) &mp1); case WM_ENDDRAG: return endDrag(hwnd); case WM_TIMER: timer(hwnd); break; #ifdef SKINNED_GUI case WMICQ_QUERYBGIMAGE: return (MRESULT) ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->bg; #else case WMICQ_QUERYBGIMAGE: return (MRESULT) NO_IMAGE; #endif case WM_OWNERPOSCHANGE: DBGMessage("WM_OWNERPOSCHANGE"); return WinDefWindowProc(hwnd,msg,mp1,mp2); case WM_MOUSEMOVE: if(WinQueryCapture(HWND_DESKTOP) == hwnd); saveMouse(hwnd,SHORT1FROMMP(mp1),SHORT2FROMMP(mp1)); return WinDefWindowProc(hwnd,msg,mp1,mp2); case WMICQ_CLEAR: clearSkin( (ICQFRAME *) WinQueryWindowPtr(hwnd,0)); break; case WMICQ_LOADSKIN: loadSkin(hwnd,(const char *) mp1, (SKINFILESECTION *) mp2); break; case WMICQ_SKINCHILDS: loadSkin4Childs(hwnd,(const char *) mp1, (SKINFILESECTION *) mp2); break; case WMICQ_RESTORE: restoreWindow(hwnd,(const char *) mp1,SHORT1FROMMP(mp2),SHORT2FROMMP(mp2)); break; case WMICQ_STORE: storeWindow(hwnd,(const char *) mp1); break; case WMICQ_CONFIGURE: configure(hwnd,(int) mp1); break; case WMICQ_SETMSGCHILD: createchild(hwnd, (const MSGCHILD *) mp1, SHORT1FROMMP(mp2)); break; case WMICQ_SKINELEMENT: skinElement(hwnd,(HWND) mp1, (const char **) mp2); break; case WMICQ_DRAWCONTENTS: break; case WMICQ_AUTOSIZE: autoSize(hwnd); break; case WMICQ_SIZEBUTTONS: return (MRESULT) sizeButtonBar(hwnd,SHORT1FROMMP(mp1),SHORT2FROMMP(mp1),(const USHORT *) mp2); case WMICQ_INVALIDATE: DBGMessage("WMICQ_INVALIDATE"); WinInvalidateRect(hwnd,NULL,TRUE); break; /*---[ SysTray ]--------------------------------------------*/ case WM_BUTTON2CLICK | 0x2000: icqShowPopupMenu(((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq, 0, ICQMNU_MODES, 0, 0); return (MRESULT) TRUE; case WM_BUTTON1CLICK | 0x2000: openMessage(((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq); return (MRESULT) TRUE; case WM_TRAYEXIT: // When tray exits/crashes, it posts WM_TRAYEXIT (0xCD20) to all tray windows. icqDisableSysTray(((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq); return (MRESULT) TRUE; /*---[ Default window processing ]--------------------------*/ default: return WinDefWindowProc(hwnd,msg,mp1,mp2); } return 0; }
bool GUITabbedTitleBar::_mouseEvent(const GUIMouseEvent& event) { if(event.getType() == GUIMouseEventType::MouseDragAndDropDragged) { if(DragAndDropManager::instance().getDragTypeId() != (UINT32)DragAndDropType::EditorWidget) return false; EditorWidgetBase* draggedWidget = reinterpret_cast<EditorWidgetBase*>(DragAndDropManager::instance().getDragData()); const Vector2I& widgetRelPos = event.getPosition(); if(mTempDraggedWidget == nullptr) { UINT32 numTabButtons = (UINT32)mTabButtons.size(); for(UINT32 i = 0; i < numTabButtons; i++) { UINT32 width = mTabButtons[i]->_getLayoutData().area.width; INT32 centerX = mTabButtons[i]->_getLayoutData().area.x + width / 2; if((i + 1) == numTabButtons) { if(i == 0 && widgetRelPos.x <= centerX) { insertTab(0, draggedWidget->getDisplayName()); mTempDraggedTabIdx = mTabButtons[0]->getIndex(); break; } else if(widgetRelPos.x > centerX) { addTab(draggedWidget->getDisplayName()); mTempDraggedTabIdx = mTabButtons[i + 1]->getIndex(); break; } } else { if(i == 0 && widgetRelPos.x <= centerX) { insertTab(0, draggedWidget->getDisplayName()); mTempDraggedTabIdx = mTabButtons[0]->getIndex(); break; } else { UINT32 nextWidth = mTabButtons[i + 1]->_getLayoutData().area.width; INT32 nextCenterX = mTabButtons[i + 1]->_getLayoutData().area.x + nextWidth / 2; if(widgetRelPos.x > centerX && widgetRelPos.x < nextCenterX) { insertTab(i + 1, draggedWidget->getDisplayName()); mTempDraggedTabIdx = mTabButtons[i + 1]->getIndex(); break; } } } } mTempDraggedWidget = draggedWidget; startDrag(uniqueIdxToSeqIdx(mTempDraggedTabIdx), Vector2I()); mInitialDragOffset = Math::roundToInt(mDraggedBtn->_getOptimalSize().x * 0.5f); } if(mTempDraggedWidget != nullptr) tabDragged(mTempDraggedTabIdx, widgetRelPos); return true; } else if(event.getType() == GUIMouseEventType::MouseDragAndDropDropped) { if(DragAndDropManager::instance().getDragTypeId() != (UINT32)DragAndDropType::EditorWidget) return false; if(mTempDraggedWidget != nullptr) { UINT32 seqIdx = uniqueIdxToSeqIdx(mTempDraggedTabIdx); removeTab(mTempDraggedTabIdx); endDrag(); if(!onTabDraggedOn.empty()) onTabDraggedOn(seqIdx); } return true; } else if(event.getType() == GUIMouseEventType::MouseDragAndDropLeft) { if(mTempDraggedWidget != nullptr) { removeTab(mTempDraggedTabIdx); endDrag(); } } return false; }
void PilotReadyScreen::update() { if ( MPlayer ) { if ( MPlayer->playersReadyToLoad() ) status = NEXT; } if ( getButton( MB_MSG_PREV )->isEnabled() ) // this is disabled if the user has already pressed launch ) { // update current text char str[64]; // RP sprintf( str, "%ld ", LogisticsData::instance->getCBills() ); textObjects[1].setText( str ); for ( int i = 0; i < 4; i++ ) skillIcons[i].update(); // desel icons if necessary bool bAllFull = 1; int newSel = -1; int oldSel = -1; bool bHasMech = 0; int newRightSel = -1; for ( i = 0; i < ICON_COUNT; i++ ) { pIcons[i].update(); if ( pIcons[i].justSelected() ) newSel = i; else if ( pIcons[i].isSelected() ) oldSel = i; bool bInside = pIcons[i].pointInside( userInput->getMouseX(), userInput->getMouseY() ); if ( userInput->isLeftDoubleClick() && bInside && pIcons[i].getMech() ) { removeSelectedPilot(); } if ( userInput->isRightClick() && bInside && pIcons[i].getMech() ) { newRightSel = i; } else if ( userInput->isLeftDrag() && bInside && pIcons[i].pointInside( userInput->getMouseDragX(), userInput->getMouseDragY() ) && pIcons[i].getMech() ) { beginDrag( pIcons[i].getMech()->getPilot() ); pIcons[i].dimPilot( true ); pIcons[i].setPilot( NULL ); } if ( pIcons[i].getMech() && !pIcons[i].getPilot() ) bAllFull = 0; if ( pIcons[i].getMech() ) bHasMech = true; } if ( newSel != -1 ) { if ( oldSel != -1 ) pIcons[oldSel].select( 0 ); if ( pIcons[newSel].getPilot() ) { setPilot( pIcons[newSel].getPilot() ); } else setMech( pIcons[newSel].getMech() ); } if ( newRightSel != -1 ) { setMech( pIcons[newRightSel].getMech() ); } long curSel = newSel == -1 ? oldSel : newSel; if ( !MPlayer || !ChatWindow::instance()->pointInside(userInput->getMouseX(), userInput->getMouseY()) ) LogisticsScreen::update(); if ( mechSelected && ( !MPlayer || !ChatWindow::instance()->pointInside(userInput->getMouseX(), userInput->getMouseY()) )) { if ( userInput->getMouseY() > 317 ) { helpID = 0; textObjects[helpTextArrayID].setText( "" ); } mechDisplay.update(); } if ( !bAllFull ) // disable the next button until all have pilots { buttons[1].disable( 1 ); if ( curSel == -1 || pIcons[curSel].getPilot() ) buttons[2].disable( 1 ); else buttons[2].disable( 0 ); } else { if ( bHasMech ) buttons[1].disable( 0 ); else buttons[1].disable( 1 ); buttons[2].disable( 1 ); } if ( ( newSel == -1 && oldSel == -1 )|| !pIcons[curSel].getPilot()) { // disable the remove button buttons[3].disable(1); } else buttons[3].disable(0); for ( i = 0; i < MAX_MEDAL; i++ ) // so we get rollovers medalIcons[i].update(); // update drag and drop if ( pDragPilot ) { dragIcon.moveTo( userInput->getMouseX() - dragIcon.width() / 2, userInput->getMouseY() - dragIcon.height() / 2 ); LogisticsMechIcon* pSelIcon = 0; for ( int i = 0; i < ICON_COUNT; i++ ) { if ( pIcons[i].pointInside( userInput->getMouseX(), userInput->getMouseY() ) && pIcons[i].getMech() ) { pSelIcon = &pIcons[i]; break; } } if ( userInput->leftMouseReleased( ) ) { endDrag(pSelIcon); } } pilotListBox.update(); } if ( MPlayer && ChatWindow::instance() ) ChatWindow::instance()->update(); }
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; } }
void MechLabScreen::updateDiagramInput() { long mouseX = userInput->getMouseX(); long mouseY = userInput->getMouseY(); if ( rects[13].pointInside( mouseX, mouseY ) ) { long x, y, x2, y2; getMouseDiagramCoords( x, y ); if ( x != -2 ) { // now offset by size of the component if ( pDragComponent ) { long screenX, screenY; diagramToScreen( x, y, screenX, screenY ); x -= pDragComponent->getComponentWidth()/2; y -= pDragComponent->getComponentHeight()/2; if ( mouseX - screenX > LogisticsComponent::XICON_FACTOR/2 && pDragComponent->getComponentWidth()/2) { x += 1; } } if ( x < 0 ) x = 0; if ( x >= pVariant->getComponentAreaWidth() - 1 ) x = pVariant->getComponentAreaWidth() - 1; if ( y < 0 ) y = 0; if ( y >= pVariant->getComponentAreaHeight() - 1 ) y = pVariant->getComponentAreaHeight() - 1; if ( pDragComponent ) { x2 = x + pDragComponent->getComponentWidth(); y2 = y + pDragComponent->getComponentHeight(); if ( x2 > pVariant->getComponentAreaWidth() ) { x = pVariant->getComponentAreaWidth() - pDragComponent->getComponentWidth(); x2 = pVariant->getComponentAreaWidth(); } if ( y2 > pVariant->getComponentAreaHeight() ) { y = pVariant->getComponentAreaHeight() - pDragComponent->getComponentHeight(); y2 = pVariant->getComponentAreaHeight(); } } else { x2 = x + 1; y2 = y + 1; } long tmpX, tmpY; diagramToScreen( x, y, tmpX, tmpY ); // update outline rect if ( selRect ) selRect->moveTo( tmpX, tmpY ); // highlight text if appropriate LogisticsComponent* pComp = pVariant->getCompAtLocation(x, y, tmpX, tmpY ); if ( pComp ) { long compX, compY, compX2, compY2; diagramToScreen( tmpX, tmpY, compX, compY ); diagramToScreen( tmpX + pComp->getComponentWidth(), tmpY + pComp->getComponentHeight(), compX2, compY2 ); if ( (compX <= userInput->getMouseX() && compX2 >= userInput->getMouseX() && compY <= userInput->getMouseY() && compY2 >= userInput->getMouseY()) || tmpX == -2 ) { ::helpTextID = IDS_HELP_COMP0 + pComp->getID(); } } } else if ( selRect ) { selRect->moveTo( rects[6].left() + rects[6].width()/2 - selRect->width()/2, rects[6].top() + rects[6].height()/2 - selRect->height()/2); } // check for jump jet hot text if ( x == -2 && y == -2 ) { long tmpX, tmpY; LogisticsComponent* pComp = pVariant->getCompAtLocation(x, y, tmpX, tmpY ); if ( pComp ) { long compX, compY, compX2, compY2; diagramToScreen( tmpX, tmpY, compX, compY ); diagramToScreen( tmpX + pComp->getComponentWidth(), tmpY + pComp->getComponentHeight(), compX2, compY2 ); if ( (compX <= userInput->getMouseX() && compX2 >= userInput->getMouseX() && compY <= userInput->getMouseY() && compY2 >= userInput->getMouseY()) || tmpX == -2 ) { ::helpTextID = IDS_HELP_COMP0 + pComp->getID(); } } } if ( pDragComponent ) { if (NO_ERR == pVariant->canAddComponent( pDragComponent, x, y ) && x != -1 && y != -1 ) { selRect->setColor( 0xffffffff ); } else selRect->setColor( 0xffff0000 ); } else if ( userInput->isLeftDrag() ) { long i, j; getMouseDiagramCoords( i, j ); if ( i != -1 && j != -1 ) { LogisticsComponent* pComp = pVariant->getCompAtLocation(i, j, selI, selJ ); if ( pComp && pComp == pSelectedComponent ) { if ( canRemoveComponent( pComp ) ) { componentListBox.SelectItem( -1 ); beginDrag( pComp ); bDragLeft = true; removeComponent( i, j ); setComponent( pComp ); updateDiagram(); } else soundSystem->playDigitalSample( LOG_WRONGBUTTON ); } else pSelectedComponent = 0; } } else if ( userInput->isLeftDoubleClick() ) { long tmpI, tmpJ; getMouseDiagramCoords( tmpI, tmpJ ); if ( tmpI != -1 && tmpJ != -1 ) { selI = tmpI; selJ = tmpJ; LogisticsComponent* pComp = pVariant->getCompAtLocation(tmpI, tmpJ, selI, selJ ); if ( pComp ) { if ( canRemoveComponent( pComp ) ) { removeComponent( selI, selJ ); componentListBox.SelectItem( -1 ); if ( -1 == selectFirstDiagramComponent() ) selectFirstLBComponent(); } else soundSystem->playDigitalSample( LOG_WRONGBUTTON ); } } } else if ( userInput->isLeftClick() ) { long tmpI, tmpJ; getMouseDiagramCoords( tmpI, tmpJ ); if ( tmpI != -1 && tmpJ != -1 ) { selI = tmpI; selJ = tmpJ; LogisticsComponent* pComp = pVariant->getCompAtLocation(tmpI, tmpJ, selI, selJ ); if ( pComp ) { pSelectedComponent = pComp; setComponent( pComp ); soundSystem->playDigitalSample( LOG_SELECT ); componentListBox.SelectItem( -1 ); } } } } if ( userInput->leftMouseReleased() && pDragComponent ) endDrag(); }