Actual source code: dmouse.c

      1: #define PETSC_DLL
      2: /*
      3:        Provides the calling sequences for all the basic PetscDraw routines.
      4: */
     5:  #include src/sys/src/draw/drawimpl.h

      9: /*@
     10:     PetscDrawGetMouseButton - Returns location of mouse and which button was
     11:     pressed. Waits for button to be pressed.

     13:     Not collective (Use PetscDrawSynchronizedGetMouseButton() for collective)

     15:     Input Parameter:
     16: .   draw - the window to be used

     18:     Output Parameters:
     19: +   button - one of BUTTON_LEFT, BUTTON_CENTER, BUTTON_RIGHT
     20: .   x_user, y_user - user coordinates of location (user may pass in 0).
     21: -   x_phys, y_phys - window coordinates (user may pass in 0).

     23:     Level: intermediate

     25:     Notes:
     26:     Only processor 0 of the communicator used to create the PetscDraw may call this routine.

     28: .seealso: PetscDrawSynchronizedGetMouseButton()
     29: @*/
     30: PetscErrorCode PETSC_DLLEXPORT PetscDrawGetMouseButton(PetscDraw draw,PetscDrawButton *button,PetscReal* x_user,PetscReal *y_user,PetscReal *x_phys,PetscReal *y_phys)
     31: {
     33:   PetscTruth isnull;

     37:   *button = BUTTON_NONE;
     38:   PetscTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);
     39:   if (isnull) return(0);
     40:   if (!draw->ops->getmousebutton) return(0);
     41:   (*draw->ops->getmousebutton)(draw,button,x_user,y_user,x_phys,y_phys);
     42:   return(0);
     43: }

     47: /*@
     48:     PetscDrawSynchronizedGetMouseButton - Returns location of mouse and which button was
     49:     pressed. Waits for button to be pressed.

     51:     Collective over PetscDraw

     53:     Input Parameter:
     54: .   draw - the window to be used

     56:     Output Parameters:
     57: +   button - one of BUTTON_LEFT, BUTTON_CENTER, BUTTON_RIGHT
     58: .   x_user, y_user - user coordinates of location (user may pass in 0).
     59: -   x_phys, y_phys - window coordinates (user may pass in 0).

     61:     Level: intermediate

     63: .seealso: PetscDrawGetMouseButton()
     64: @*/
     65: PetscErrorCode PETSC_DLLEXPORT PetscDrawSynchronizedGetMouseButton(PetscDraw draw,PetscDrawButton *button,PetscReal* x_user,PetscReal *y_user,PetscReal *x_phys,PetscReal *y_phys)
     66: {
     67:   PetscReal      bcast[4];
     69:   PetscMPIInt    rank;

     73:   MPI_Comm_rank(draw->comm,&rank);
     74:   if (!rank) {
     75:     PetscDrawGetMouseButton(draw,button,x_user,y_user,x_phys,y_phys);
     76:   }
     77:   if (button) {
     78:      MPI_Bcast(button,1,MPI_INT,0,draw->comm);
     79:   }
     80:   if (x_user) bcast[0] = *x_user;
     81:   if (y_user) bcast[1] = *y_user;
     82:   if (x_phys) bcast[2] = *x_phys;
     83:   if (y_phys) bcast[3] = *y_phys;
     84:   MPI_Bcast(bcast,4,MPIU_REAL,0,draw->comm);
     85:   if (x_user) *x_user = bcast[0];
     86:   if (y_user) *y_user = bcast[1];
     87:   if (x_phys) *x_phys = bcast[2];
     88:   if (y_phys) *y_phys = bcast[3];
     89:   return(0);
     90: }