static void Key(unsigned char key, int x, int y) { switch (key) { case 'z': zoom /= 0.75; glutPostRedisplay(); break; case 'Z': zoom *= 0.75; glutPostRedisplay(); break; case 'f': DoFeedback(); glutPostRedisplay(); break; case 'l': linePoly = !linePoly; if (linePoly) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } else { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } glutPostRedisplay(); break; case 27: exit(0); } }
INT_PTR ForceDlgProc::DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { hwnd=hWnd; Update(t); break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_AP_FEEDBACKON: DoFeedback(); return TRUE; case IDC_AP_VARIATIONON: DoEnableVar(); return TRUE; case IDC_AP_RANGE: DoRange(); return TRUE; default: return TRUE; } } return FALSE; }
void HandlePlacementMotionEvent (ClientData *pcd, XMotionEvent *pev) { int diffx, diffy; /* * If in pre-resize mode, check for motion crossing threshhold before * switching modes */ if (wmGD.preMove) { diffx = pev->x_root - wmGD.preMoveX; diffy = pev->y_root - wmGD.preMoveY; if ((ABS(diffx) > wmGD.moveThreshold) || (ABS(diffy) > wmGD.moveThreshold)) { StartInteractiveSizing(pcd, pev->time); } return; } if (placeResize) { /* * Track lower right corner */ if (pev->x_root > placeX) placeWidth = pev->x_root - placeX + 1; if (pev->y_root > placeY) placeHeight = pev->y_root - placeY + 1; } else { /* * track window position */ placeX = pev->x_root; placeY = pev->y_root; } placePointerX = pev->x_root; placePointerY = pev->y_root; FixFrameValues (pcd, &placeX, &placeY, &placeWidth, &placeHeight, placeResize); MoveOutline (placeX, placeY, placeWidth, placeHeight); if (wmGD.showFeedback & WM_SHOW_FB_PLACEMENT) { DoFeedback (pcd, placeX, placeY, placeWidth, placeHeight, 0, placeResize); } } /* END OF FUNCTION HandlePlacementMotionEvent */
/*************************************<->************************************* * * SetupPlacement (pcd) * * * Description: * ----------- * Perform the initialization for interactive placement * * * Inputs: * ------ * pcd - pointer to client data * * Outputs: * ------- * * * Comments: * -------- * o sets up global data and puts initial display on the screen * *************************************<->***********************************/ void SetupPlacement (ClientData *pcd) { int cX, cY, junk; Window junk_win; /* * Restore the state of the last "depressed" frame gadget */ if (wmGD.gadgetClient && wmGD.gadgetDepressed) { PopGadgetOut(wmGD.gadgetClient, wmGD.gadgetDepressed); } /* get offset of frame origin from window origin */ placeOffsetX = pcd->clientOffset.x; placeOffsetY = pcd->clientOffset.y; XQueryPointer (DISPLAY, ACTIVE_ROOT, &junk_win, &junk_win, &cX, &cY, &junk, &junk, (unsigned int *)&junk); /* convert to frame coordinates */ placePointerX = placeX = cX; placePointerY = placeY = cY; placeWidth = pcd->clientWidth; placeHeight = pcd->clientHeight; ClientToFrame (pcd, &cX, &cY, &placeWidth, &placeHeight); /* in "position" mode to start with */ placeResize = FALSE; wmGD.preMove = FALSE; /* normal window being dealt with, not icon */ wmGD.movingIcon = FALSE; if (wmGD.showFeedback & WM_SHOW_FB_PLACEMENT) { DoFeedback (pcd, placeX, placeY, placeWidth, placeHeight, (FB_SIZE | FB_POSITION), placeResize); } /* set up initial visual feedback */ MoveOutline (placeX, placeY, placeWidth, placeHeight); } /* END OF FUNCTION SetupPlacement */
void HandlePlacementKeyEvent (ClientData *pcd, XKeyEvent *pev) { XEvent KeyEvent; KeySym keysym; Boolean control, valid; int big_inc; int tmpX = 0; int tmpY = 0; int warpX, warpY, newX, newY; int keyPlaceX = placeX; int keyPlaceY = placeY; unsigned int keyPlaceWidth = placeWidth; unsigned int keyPlaceHeight = placeHeight; /* filter out repeating keys */ placeKeyMultiplier = 1; if (pev->type == KeyPress) { while (placeKeyMultiplier <= 10 && XCheckIfEvent (DISPLAY, &KeyEvent, IsRepeatedKeyEvent, (char *) pev)) { placeKeyMultiplier++; } } /* convert event data to useful key data */ #ifdef FIX_1611 keysym = WmKeycodeToKeysym(DISPLAY, pev->keycode); #else keysym = XKeycodeToKeysym (DISPLAY, pev->keycode, 0); #endif control = (pev->state & ControlMask) != 0; big_inc = DisplayWidth(DISPLAY, ACTIVE_PSD->screen) / 20; /* interpret key data */ valid = FALSE; switch (keysym) { case XK_Left: tmpX = (control) ? (-big_inc) : -1; valid = TRUE; break; case XK_Up: tmpY = (control) ? (-big_inc) : -1; valid = TRUE; break; case XK_Right: tmpX = (control) ? (big_inc) : 1; valid = TRUE; break; case XK_Down: tmpY = (control) ? (big_inc) : 1; valid = TRUE; break; case XK_space: StartInteractiveSizing(pcd, pev->time); break; case XK_Return: placementDone = TRUE; /* global "done" flag */ break; default: break; } /* if a valid key was pressed, then react to it */ if (valid) { tmpX *= placeKeyMultiplier; tmpY *= placeKeyMultiplier; if (placeResize) { keyPlaceWidth += tmpX; /* change size of outline */ keyPlaceHeight += tmpY; FixFrameValues(pcd, &keyPlaceX, &keyPlaceY, &keyPlaceWidth, &keyPlaceHeight, placeResize); warpX = keyPlaceX+keyPlaceWidth-1; warpY = keyPlaceY+keyPlaceHeight-1; SetPointerPosition (warpX, warpY, &newX, &newY); if ((warpX == newX) && (warpY == newY)) { placeWidth = keyPlaceWidth; placeHeight = keyPlaceHeight; } else { placeWidth = newX - keyPlaceX + 1; placeHeight = newY - keyPlaceY + 1; } } else { keyPlaceX += tmpX; /* change position of outline */ keyPlaceY += tmpY; FixFrameValues(pcd, &keyPlaceX, &keyPlaceY, &keyPlaceWidth, &keyPlaceHeight, placeResize); warpX = keyPlaceX; warpY = keyPlaceY; SetPointerPosition (warpX, warpY, &newX, &newY); placeX = newX; placeY = newY; } placePointerX = newX; placePointerY = newY; } FixFrameValues (pcd, &placeX, &placeY, &placeWidth, &placeHeight, placeResize); MoveOutline (placeX, placeY, placeWidth, placeHeight); if (wmGD.showFeedback & WM_SHOW_FB_PLACEMENT) { DoFeedback (pcd, placeX, placeY, placeWidth, placeHeight, 0, placeResize); } } /* END OF FUNCTION HandlePlacementKeyEvent */
void ForceDlgProc::Update(TimeValue t) { DoFeedback(); DoEnableVar(); DoRange(); }
void TFeedbackView::ProcessFeedback( const TEventArgs& inArgs ) { if( !fbAlwaysOn ) DoFeedback( inArgs ); }
// Depending on the fbAlwaysOn flag, give feedback during feedback only, // or always during the trial. Don't ask. void TFeedbackView::ProcessTrialActive( const TEventArgs& inArgs ) { if( fbAlwaysOn ) DoFeedback( inArgs ); }