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);
}
Пример #3
0
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;
}
Пример #4
0
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);   

}
Пример #5
0
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

}
Пример #6
0
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;
}