xref: /petsc/src/sys/classes/draw/interface/dmouse.c (revision ce94432eddcd14845bc7e8083b7f8ea723b9bf7d)
15c6c1daeSBarry Smith 
25c6c1daeSBarry Smith /*
35c6c1daeSBarry Smith        Provides the calling sequences for all the basic PetscDraw routines.
45c6c1daeSBarry Smith */
55c6c1daeSBarry Smith #include <petsc-private/drawimpl.h>  /*I "petscdraw.h" I*/
65c6c1daeSBarry Smith 
75c6c1daeSBarry Smith #undef __FUNCT__
85c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetMouseButton"
95c6c1daeSBarry Smith /*@
105c6c1daeSBarry Smith     PetscDrawGetMouseButton - Returns location of mouse and which button was
115c6c1daeSBarry Smith     pressed. Waits for button to be pressed.
125c6c1daeSBarry Smith 
135c6c1daeSBarry Smith     Not collective (Use PetscDrawSynchronizedGetMouseButton() for collective)
145c6c1daeSBarry Smith 
155c6c1daeSBarry Smith     Input Parameter:
165c6c1daeSBarry Smith .   draw - the window to be used
175c6c1daeSBarry Smith 
185c6c1daeSBarry Smith     Output Parameters:
195c6c1daeSBarry Smith +   button - one of PETSC_BUTTON_LEFT, PETSC_BUTTON_CENTER, PETSC_BUTTON_RIGHT
205c6c1daeSBarry Smith .   x_user, y_user - user coordinates of location (user may pass in 0).
215c6c1daeSBarry Smith -   x_phys, y_phys - window coordinates (user may pass in 0).
225c6c1daeSBarry Smith 
235c6c1daeSBarry Smith     Level: intermediate
245c6c1daeSBarry Smith 
255c6c1daeSBarry Smith     Notes:
265c6c1daeSBarry Smith     Only processor 0 of the communicator used to create the PetscDraw may call this routine.
275c6c1daeSBarry Smith 
285c6c1daeSBarry Smith .seealso: PetscDrawSynchronizedGetMouseButton()
295c6c1daeSBarry Smith @*/
305c6c1daeSBarry Smith PetscErrorCode  PetscDrawGetMouseButton(PetscDraw draw,PetscDrawButton *button,PetscReal *x_user,PetscReal *y_user,PetscReal *x_phys,PetscReal *y_phys)
315c6c1daeSBarry Smith {
325c6c1daeSBarry Smith   PetscErrorCode ierr;
335c6c1daeSBarry Smith   PetscBool      isnull;
345c6c1daeSBarry Smith 
355c6c1daeSBarry Smith   PetscFunctionBegin;
365c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
375c6c1daeSBarry Smith   *button = PETSC_BUTTON_NONE;
385c6c1daeSBarry Smith   ierr    = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr);
395c6c1daeSBarry Smith   if (isnull) PetscFunctionReturn(0);
405c6c1daeSBarry Smith   if (!draw->ops->getmousebutton) PetscFunctionReturn(0);
415c6c1daeSBarry Smith   ierr = (*draw->ops->getmousebutton)(draw,button,x_user,y_user,x_phys,y_phys);CHKERRQ(ierr);
425c6c1daeSBarry Smith   PetscFunctionReturn(0);
435c6c1daeSBarry Smith }
445c6c1daeSBarry Smith 
455c6c1daeSBarry Smith #undef __FUNCT__
465c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSynchronizedGetMouseButton"
475c6c1daeSBarry Smith /*@
485c6c1daeSBarry Smith     PetscDrawSynchronizedGetMouseButton - Returns location of mouse and which button was
495c6c1daeSBarry Smith     pressed. Waits for button to be pressed.
505c6c1daeSBarry Smith 
515c6c1daeSBarry Smith     Collective over PetscDraw
525c6c1daeSBarry Smith 
535c6c1daeSBarry Smith     Input Parameter:
545c6c1daeSBarry Smith .   draw - the window to be used
555c6c1daeSBarry Smith 
565c6c1daeSBarry Smith     Output Parameters:
575c6c1daeSBarry Smith +   button - one of PETSC_BUTTON_LEFT, PETSC_BUTTON_CENTER, PETSC_BUTTON_RIGHT
585c6c1daeSBarry Smith .   x_user, y_user - user coordinates of location (user may pass in 0).
595c6c1daeSBarry Smith -   x_phys, y_phys - window coordinates (user may pass in 0).
605c6c1daeSBarry Smith 
615c6c1daeSBarry Smith     Level: intermediate
625c6c1daeSBarry Smith 
635c6c1daeSBarry Smith .seealso: PetscDrawGetMouseButton()
645c6c1daeSBarry Smith @*/
655c6c1daeSBarry Smith PetscErrorCode  PetscDrawSynchronizedGetMouseButton(PetscDraw draw,PetscDrawButton *button,PetscReal *x_user,PetscReal *y_user,PetscReal *x_phys,PetscReal *y_phys)
665c6c1daeSBarry Smith {
675c6c1daeSBarry Smith   PetscReal      bcast[4];
685c6c1daeSBarry Smith   PetscErrorCode ierr;
695c6c1daeSBarry Smith   PetscMPIInt    rank;
705c6c1daeSBarry Smith 
715c6c1daeSBarry Smith   PetscFunctionBegin;
725c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
73*ce94432eSBarry Smith   ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRQ(ierr);
745c6c1daeSBarry Smith   if (!rank) {
755c6c1daeSBarry Smith     ierr = PetscDrawGetMouseButton(draw,button,x_user,y_user,x_phys,y_phys);CHKERRQ(ierr);
765c6c1daeSBarry Smith   }
775c6c1daeSBarry Smith   if (button) {
78*ce94432eSBarry Smith     ierr = MPI_Bcast((PetscEnum*)button,1,MPIU_ENUM,0,PetscObjectComm((PetscObject)draw));CHKERRQ(ierr);
795c6c1daeSBarry Smith   }
805c6c1daeSBarry Smith   if (x_user) bcast[0] = *x_user;
815c6c1daeSBarry Smith   if (y_user) bcast[1] = *y_user;
825c6c1daeSBarry Smith   if (x_phys) bcast[2] = *x_phys;
835c6c1daeSBarry Smith   if (y_phys) bcast[3] = *y_phys;
84*ce94432eSBarry Smith   ierr = MPI_Bcast(bcast,4,MPIU_REAL,0,PetscObjectComm((PetscObject)draw));CHKERRQ(ierr);
855c6c1daeSBarry Smith   if (x_user) *x_user = bcast[0];
865c6c1daeSBarry Smith   if (y_user) *y_user = bcast[1];
875c6c1daeSBarry Smith   if (x_phys) *x_phys = bcast[2];
885c6c1daeSBarry Smith   if (y_phys) *y_phys = bcast[3];
895c6c1daeSBarry Smith   PetscFunctionReturn(0);
905c6c1daeSBarry Smith }
915c6c1daeSBarry Smith 
925c6c1daeSBarry Smith 
935c6c1daeSBarry Smith 
945c6c1daeSBarry Smith 
955c6c1daeSBarry Smith 
965c6c1daeSBarry Smith 
97