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__ "PetscDrawString" 95c6c1daeSBarry Smith /*@C 105c6c1daeSBarry Smith PetscDrawString - PetscDraws text onto a drawable. 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith Not Collective 135c6c1daeSBarry Smith 145c6c1daeSBarry Smith Input Parameters: 155c6c1daeSBarry Smith + draw - the drawing context 165c6c1daeSBarry Smith . xl - the coordinates of lower left corner of text 175c6c1daeSBarry Smith . yl - the coordinates of lower left corner of text 185c6c1daeSBarry Smith . cl - the color of the text 195c6c1daeSBarry Smith - text - the text to draw 205c6c1daeSBarry Smith 215c6c1daeSBarry Smith Level: beginner 225c6c1daeSBarry Smith 235c6c1daeSBarry Smith Concepts: drawing^string 245c6c1daeSBarry Smith Concepts: string^drawing 255c6c1daeSBarry Smith 265c6c1daeSBarry Smith .seealso: PetscDrawStringVertical() 275c6c1daeSBarry Smith 285c6c1daeSBarry Smith @*/ 295c6c1daeSBarry Smith PetscErrorCode PetscDrawString(PetscDraw draw,PetscReal xl,PetscReal yl,int cl,const char text[]) 305c6c1daeSBarry Smith { 315c6c1daeSBarry Smith PetscErrorCode ierr; 325c6c1daeSBarry Smith PetscBool isnull; 335c6c1daeSBarry Smith 345c6c1daeSBarry Smith PetscFunctionBegin; 355c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 365c6c1daeSBarry Smith PetscValidCharPointer(text,5); 375c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 385c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 395c6c1daeSBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,text);CHKERRQ(ierr); 405c6c1daeSBarry Smith PetscFunctionReturn(0); 415c6c1daeSBarry Smith } 425c6c1daeSBarry Smith 435c6c1daeSBarry Smith #undef __FUNCT__ 445c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawBoxedString" 455c6c1daeSBarry Smith /*@C 465c6c1daeSBarry Smith PetscDrawBoxedString - Draws a string with a box around it 475c6c1daeSBarry Smith 485c6c1daeSBarry Smith Not Collective 495c6c1daeSBarry Smith 505c6c1daeSBarry Smith Input Parameters: 515c6c1daeSBarry Smith + draw - the drawing context 525c6c1daeSBarry Smith . sxl - the coordinates of center of the box 535c6c1daeSBarry Smith . syl - the coordinates of top line of box 545c6c1daeSBarry Smith . sc - the color of the text 555c6c1daeSBarry Smith . bc - the color of the bounding box 565c6c1daeSBarry Smith - text - the text to draw 575c6c1daeSBarry Smith 585c6c1daeSBarry Smith Output Parameter: 595c6c1daeSBarry Smith . w,h - width and height of resulting box (optional) 605c6c1daeSBarry Smith 615c6c1daeSBarry Smith Level: beginner 625c6c1daeSBarry Smith 635c6c1daeSBarry Smith Concepts: drawing^string 645c6c1daeSBarry Smith Concepts: string^drawing 655c6c1daeSBarry Smith 665c6c1daeSBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawBoxedStringSize() 675c6c1daeSBarry Smith 685c6c1daeSBarry Smith @*/ 695c6c1daeSBarry Smith PetscErrorCode PetscDrawBoxedString(PetscDraw draw,PetscReal sxl,PetscReal syl,int sc,int bc,const char text[],PetscReal *w,PetscReal *h) 705c6c1daeSBarry Smith { 715c6c1daeSBarry Smith PetscErrorCode ierr ; 725c6c1daeSBarry Smith PetscBool isnull; 735c6c1daeSBarry Smith PetscReal top,left,right,bottom,tw,th; 745c6c1daeSBarry Smith size_t len,mlen = 0; 755c6c1daeSBarry Smith char **array; 765c6c1daeSBarry Smith int cnt,i; 775c6c1daeSBarry Smith 785c6c1daeSBarry Smith PetscFunctionBegin; 795c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 805c6c1daeSBarry Smith PetscValidCharPointer(text,5); 815c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 825c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 835c6c1daeSBarry Smith 84*42963b84SBarry Smith if (draw->ops->boxedstring) { 85*42963b84SBarry Smith ierr = (*draw->ops->boxedstring)(draw,sxl,syl,sc,bc,text,w,h);CHKERRQ(ierr); 86*42963b84SBarry Smith PetscFunctionReturn(0); 87*42963b84SBarry Smith } 88*42963b84SBarry Smith 895c6c1daeSBarry Smith ierr = PetscStrToArray(text,'\n',&cnt,&array);CHKERRQ(ierr); 905c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 915c6c1daeSBarry Smith ierr = PetscStrlen(array[i],&len);CHKERRQ(ierr); 925c6c1daeSBarry Smith mlen = PetscMax(mlen,len); 935c6c1daeSBarry Smith } 945c6c1daeSBarry Smith 955c6c1daeSBarry Smith ierr = PetscDrawStringGetSize(draw,&tw,&th);CHKERRQ(ierr); 965c6c1daeSBarry Smith 975c6c1daeSBarry Smith top = syl; 985c6c1daeSBarry Smith left = sxl - .5*(mlen + 2)*tw; 995c6c1daeSBarry Smith right = sxl + .5*(mlen + 2)*tw; 1005c6c1daeSBarry Smith bottom = syl - (1.0 + cnt)*th; 1015c6c1daeSBarry Smith if (w) *w = right - left; 1025c6c1daeSBarry Smith if (h) *h = top - bottom; 1035c6c1daeSBarry Smith 1045c6c1daeSBarry Smith /* compute new bounding box */ 1055c6c1daeSBarry Smith draw->boundbox_xl = PetscMin(draw->boundbox_xl,left); 1065c6c1daeSBarry Smith draw->boundbox_xr = PetscMax(draw->boundbox_xr,right); 1075c6c1daeSBarry Smith draw->boundbox_yl = PetscMin(draw->boundbox_yl,bottom); 1085c6c1daeSBarry Smith draw->boundbox_yr = PetscMax(draw->boundbox_yr,top); 1095c6c1daeSBarry Smith 1105c6c1daeSBarry Smith /* top, left, bottom, right lines */ 1115c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,top,right,top,bc);CHKERRQ(ierr); 1125c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,bottom,left,top,bc);CHKERRQ(ierr); 1135c6c1daeSBarry Smith ierr = PetscDrawLine(draw,right,bottom,right,top,bc);CHKERRQ(ierr); 1145c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,bottom,right,bottom,bc);CHKERRQ(ierr); 1155c6c1daeSBarry Smith 1165c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 1175c6c1daeSBarry Smith ierr = PetscDrawString(draw,left + tw,top - (1.5 + i)*th,sc,array[i]);CHKERRQ(ierr); 1185c6c1daeSBarry Smith } 1195c6c1daeSBarry Smith ierr = PetscStrToArrayDestroy(cnt,array);CHKERRQ(ierr); 1205c6c1daeSBarry Smith 1215c6c1daeSBarry Smith PetscFunctionReturn(0); 1225c6c1daeSBarry Smith } 123