void OpenGLWindow::mouseMoveEvent(QMouseEvent * e) { if (!focused) return; int deltaX, deltaY; if (cursorClip) { if (skipClipFrame) { skipClipFrame = false; return; } auto center = glm::ivec2(width() / 2, height() / 2); deltaX = e->windowPos().x() - center.x; deltaY = e->windowPos().y() - center.y; } else { deltaX = e->windowPos().x() - prevMousePos.x(); deltaY = e->windowPos().y() - prevMousePos.y(); } prevMousePos = e->windowPos(); InputSystem::MouseMove(e->windowPos().x(), e->windowPos().y(), deltaX, deltaY); if (cursorClip) { CenterCursor(); } //cout << "[" << e->windowPos().x() << ", " << e->windowPos().y() << "] delta [" << deltaX << ", " << deltaY << "]" << endl; }
void OpenGLWindow::mousePressEvent(QMouseEvent * e) { if (!focused) return; if (e->button() == Qt::MouseButton::RightButton) { HideCursor(); CenterCursor(); } MouseEvent(e, GLFW_PRESS); }
BOOL CRVTrackerExtrudePoly::OnStart() { // Only start in geometry mode if (m_pView->GetEditMode() != GEOMETRY_EDITMODE) return FALSE; // Extrude the poly. if (!m_pView->IPoly().IsValid()) return FALSE; //reset the moved amount m_fTotalMoved = 0.0f; m_pView->IPoly()()->GetCenterPoint(m_vScaleRefPt); m_vPerpNormal = m_pView->IPoly()()->Normal(); m_pView->ExtrudePoly( m_pView->IPoly(), m_cMovingVerts, !m_bNewBrush, false , m_bNewBrush); // Jump out if the movement list is empty for some reason if (!m_cMovingVerts.GetSize()) return FALSE; if(m_bNewBrush) { // Setup an undo. if (m_cMovingVerts > 0) m_pView->GetRegionDoc()->Modify(new CPreAction(ACTION_ADDEDNODE, m_cMovingVerts[0].m_pBrush), TRUE); } else { PreActionList actionList; DWORD i; BOOL bStart = TRUE; // Setup an undo. for(i=0; i < m_cMovingVerts; i++) { AddToActionListIfNew(&actionList, new CPreAction(ACTION_MODIFYNODE, m_cMovingVerts[i].m_pBrush), true); } m_pView->GetRegionDoc()->Modify(&actionList, TRUE); } CenterCursor(); return TRUE; }
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT r; float delta_x, delta_y; point p; switch (message) { case WM_MOVE: GetClientRect (hwnd, &r); height = r.bottom - r.top; width = r.right - r.left; break; case WM_LBUTTONDOWN: lmb = true; SetCapture (hwnd); break; case WM_RBUTTONDOWN: rmb = true; SetCapture (hwnd); break; case WM_LBUTTONUP: lmb = false; if (!rmb) { ReleaseCapture (); MoveCursor (select_pos.x, select_pos.y); } break; case WM_RBUTTONUP: rmb = false; if (!lmb) { ReleaseCapture (); MoveCursor (select_pos.x, select_pos.y); } break; case WM_MOUSEMOVE: p.x = LOWORD(lParam); // horizontal position of cursor p.y = HIWORD(lParam); // vertical position of cursor if (!mouse_forced && !lmb && !rmb) { select_pos = p; } if (mouse_forced) { mouse_forced = false; } else if (rmb || lmb) { CenterCursor (); delta_x = (float)(mouse_pos.x - p.x) / MOUSE_MOVEMENT; delta_y = (float)(mouse_pos.y - p.y) / MOUSE_MOVEMENT; if (rmb && lmb) { CameraSelectionYaw (delta_x); CameraSelectionZoom (-delta_y); } else if (rmb) { CameraPan (delta_x); CameraForward (delta_y); } else if (lmb) { CameraSelectionYaw (delta_x); CameraSelectionPitch (delta_y); } } mouse_pos = p; break; case WM_CLOSE: AppQuit (); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }
LONG WINAPI ScreenSaverProc(HWND hwnd_in,UINT message,WPARAM wparam,LPARAM lparam) { RECT r; int key; float delta_x, delta_y; POINT p; // Handles screen saver messages switch(message) { case WM_SIZE: width = LOWORD(lparam); // width of client area height = HIWORD(lparam); // height of client area if (wparam == SIZE_MAXIMIZED) { IniIntSet ("WindowMaximized", 1); } else { IniIntSet ("WindowWidth", width); IniIntSet ("WindowHeight", height); IniIntSet ("WindowMaximized", 0); } RenderResize (); break; case WM_KEYDOWN: key = (int) wparam; if (key == 'R') WorldReset (); else if (key == 'W') RenderWireframeToggle (); else if (key == 'E') RenderEffectCycle (); else if (key == 'L') RenderLetterboxToggle (); else if (key == 'F') RenderFPSToggle (); else if (key == 'G') RenderFogToggle (); else if (key == 'T') RenderFlatToggle (); else if (key == VK_F1) RenderHelpToggle (); else if (key == VK_ESCAPE) break; else if (!SCREENSAVER) { //Dev mode keys if (key == 'C') CameraAutoToggle (); if (key == 'B') CameraNextBehavior (); if (key == VK_F5) CameraReset (); if (key == VK_UP) CameraMedial (1.0f); if (key == VK_DOWN) CameraMedial (-1.0f); if (key == VK_LEFT) CameraLateral (1.0f); if (key == VK_RIGHT) CameraLateral (-1.0f); if (key == VK_PRIOR) CameraVertical (1.0f); if (key == VK_NEXT) CameraVertical (-1.0f); if (key == VK_F5) CameraReset (); return 0; } else break; return 0; case WM_MOVE: GetClientRect (hwnd, &r); height = r.bottom - r.top; width = r.right - r.left; IniIntSet ("WindowX", r.left); IniIntSet ("WindowY", r.top); IniIntSet ("WindowWidth", width); IniIntSet ("WindowHeight", height); half_width = width / 2; half_height = height / 2; return 0; case WM_LBUTTONDOWN: lmb = true; SetCapture (hwnd); break; case WM_RBUTTONDOWN: rmb = true; SetCapture (hwnd); break; case WM_LBUTTONUP: lmb = false; if (!rmb) { ReleaseCapture (); MoveCursor (select_pos.x, select_pos.y); } break; case WM_RBUTTONUP: rmb = false; if (!lmb) { ReleaseCapture (); MoveCursor (select_pos.x, select_pos.y); } break; case WM_MOUSEMOVE: p.x = LOWORD(lparam); // horizontal position of cursor p.y = HIWORD(lparam); // vertical position of cursor if (p.x < 0 || p.x > width) break; if (p.y < 0 || p.y > height) break; if (!mouse_forced && !lmb && !rmb) { select_pos = p; } if (mouse_forced) { mouse_forced = false; } else if (rmb || lmb) { CenterCursor (); delta_x = (float)(mouse_pos.x - p.x) * MOUSE_MOVEMENT; delta_y = (float)(mouse_pos.y - p.y) * MOUSE_MOVEMENT; if (rmb && lmb) { GLvector pos; CameraPan (delta_x); pos = CameraPosition (); pos.y += delta_y; CameraPositionSet (pos); } else if (rmb) { CameraPan (delta_x); CameraForward (delta_y); } else if (lmb) { GLvector angle; angle = CameraAngle (); angle.y -= delta_x; angle.x += delta_y; CameraAngleSet (angle); } } mouse_pos = p; break; case WM_CREATE: hwnd = hwnd_in; if (SCREENSAVER) AppInit (); SetTimer (hwnd, 1, 7, NULL); return 0; case WM_TIMER: AppUpdate (); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } #if SCREENSAVER return DefScreenSaverProc(hwnd_in,message,wparam,lparam); #else return DefWindowProc (hwnd_in,message,wparam,lparam); #endif }
BOOL CRVTrackerExtrudePoly::OnUpdate(const CUIEvent &cEvent) { // Only update on idle events if (cEvent.GetType() != UIEVENT_NONE) return TRUE; // Don't update if it hasn't moved if (m_cCurPt == m_cLastPt) return TRUE; //find the delta we moved float fDelta = (float)(m_cCurPt.y - m_cLastPt.y); //keep track of our old moved amount float fOldMove = m_fTotalMoved; //update our total moved amount m_fTotalMoved += fDelta; //the amount we will want to offset float fOffset; if(m_bSnap) { //get our grid size float fGridSize = (float)m_pView->GetGridSpacing(); //find our snap position of the original pos float fOldSnapPos = fOldMove - (float)fmod(fOldMove, fGridSize); //get our new snap position float fNewSnapPos = m_fTotalMoved - (float)fmod(m_fTotalMoved, fGridSize); //now find the total offset fOffset = fNewSnapPos - fOldSnapPos; } else { fOffset = fDelta; } if(fabs(fOffset) > 0.01f) { for(uint32 i=0; i < m_cMovingVerts; i++ ) { m_cMovingVerts[i]() -= m_vPerpNormal * fOffset; m_cMovingVerts[i].m_pBrush->UpdateBoundingInfo(); } if( GetApp()->m_bFullUpdate ) { m_pView->GetDocument()->UpdateAllViews(m_pView); m_pView->DrawRect(); } } CenterCursor(); //m_cLastPt = m_cCurPt; return TRUE; }