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