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__ 8*51fa3d41SBarry Smith #define __FUNCT__ "PetscDrawStringCentered" 9*51fa3d41SBarry Smith /*@C 10*51fa3d41SBarry Smith PetscDrawStringCentered - PetscDraws text onto a drawable centered at a point 11*51fa3d41SBarry Smith 12*51fa3d41SBarry Smith Not Collective 13*51fa3d41SBarry Smith 14*51fa3d41SBarry Smith Input Parameters: 15*51fa3d41SBarry Smith + draw - the drawing context 16*51fa3d41SBarry Smith . xc - the coordinates of right-left center of text 17*51fa3d41SBarry Smith . yl - the coordinates of lower edge of text 18*51fa3d41SBarry Smith . cl - the color of the text 19*51fa3d41SBarry Smith - text - the text to draw 20*51fa3d41SBarry Smith 21*51fa3d41SBarry Smith Level: beginner 22*51fa3d41SBarry Smith 23*51fa3d41SBarry Smith Concepts: drawing^string 24*51fa3d41SBarry Smith Concepts: string^drawing 25*51fa3d41SBarry Smith 26*51fa3d41SBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawString(), PetscDrawStringBoxed() 27*51fa3d41SBarry Smith 28*51fa3d41SBarry Smith @*/ 29*51fa3d41SBarry Smith PetscErrorCode PetscDrawStringCentered(PetscDraw draw,PetscReal xc,PetscReal yl,int cl,const char text[]) 30*51fa3d41SBarry Smith { 31*51fa3d41SBarry Smith PetscErrorCode ierr; 32*51fa3d41SBarry Smith PetscBool isnull; 33*51fa3d41SBarry Smith size_t len; 34*51fa3d41SBarry Smith PetscReal tw,th; 35*51fa3d41SBarry Smith 36*51fa3d41SBarry Smith PetscFunctionBegin; 37*51fa3d41SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 38*51fa3d41SBarry Smith PetscValidCharPointer(text,5); 39*51fa3d41SBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 40*51fa3d41SBarry Smith if (isnull) PetscFunctionReturn(0); 41*51fa3d41SBarry Smith 42*51fa3d41SBarry Smith ierr = PetscDrawStringGetSize(draw,&tw,&th);CHKERRQ(ierr); 43*51fa3d41SBarry Smith ierr = PetscStrlen(text,&len);CHKERRQ(ierr); 44*51fa3d41SBarry Smith xc = xc - .5*len*tw; 45*51fa3d41SBarry Smith ierr = PetscDrawString(draw,xc,yl,cl,text);CHKERRQ(ierr); 46*51fa3d41SBarry Smith PetscFunctionReturn(0); 47*51fa3d41SBarry Smith } 48*51fa3d41SBarry Smith 49*51fa3d41SBarry Smith 50*51fa3d41SBarry Smith #undef __FUNCT__ 515c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawString" 525c6c1daeSBarry Smith /*@C 535c6c1daeSBarry Smith PetscDrawString - PetscDraws text onto a drawable. 545c6c1daeSBarry Smith 555c6c1daeSBarry Smith Not Collective 565c6c1daeSBarry Smith 575c6c1daeSBarry Smith Input Parameters: 585c6c1daeSBarry Smith + draw - the drawing context 595c6c1daeSBarry Smith . xl - the coordinates of lower left corner of text 605c6c1daeSBarry Smith . yl - the coordinates of lower left corner of text 615c6c1daeSBarry Smith . cl - the color of the text 625c6c1daeSBarry Smith - text - the text to draw 635c6c1daeSBarry Smith 645c6c1daeSBarry Smith Level: beginner 655c6c1daeSBarry Smith 665c6c1daeSBarry Smith Concepts: drawing^string 675c6c1daeSBarry Smith Concepts: string^drawing 685c6c1daeSBarry Smith 69*51fa3d41SBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawStringCentered(), PetscDrawStringBoxed() 705c6c1daeSBarry Smith 715c6c1daeSBarry Smith @*/ 725c6c1daeSBarry Smith PetscErrorCode PetscDrawString(PetscDraw draw,PetscReal xl,PetscReal yl,int cl,const char text[]) 735c6c1daeSBarry Smith { 745c6c1daeSBarry Smith PetscErrorCode ierr; 755c6c1daeSBarry Smith PetscBool isnull; 765c6c1daeSBarry Smith 775c6c1daeSBarry Smith PetscFunctionBegin; 785c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 795c6c1daeSBarry Smith PetscValidCharPointer(text,5); 805c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 815c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 825c6c1daeSBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,text);CHKERRQ(ierr); 835c6c1daeSBarry Smith PetscFunctionReturn(0); 845c6c1daeSBarry Smith } 855c6c1daeSBarry Smith 865c6c1daeSBarry Smith #undef __FUNCT__ 87*51fa3d41SBarry Smith #define __FUNCT__ "PetscDrawStringBoxed" 885c6c1daeSBarry Smith /*@C 89*51fa3d41SBarry Smith PetscDrawStringBoxed - Draws a string with a box around it 905c6c1daeSBarry Smith 915c6c1daeSBarry Smith Not Collective 925c6c1daeSBarry Smith 935c6c1daeSBarry Smith Input Parameters: 945c6c1daeSBarry Smith + draw - the drawing context 955c6c1daeSBarry Smith . sxl - the coordinates of center of the box 965c6c1daeSBarry Smith . syl - the coordinates of top line of box 975c6c1daeSBarry Smith . sc - the color of the text 985c6c1daeSBarry Smith . bc - the color of the bounding box 995c6c1daeSBarry Smith - text - the text to draw 1005c6c1daeSBarry Smith 1015c6c1daeSBarry Smith Output Parameter: 1025c6c1daeSBarry Smith . w,h - width and height of resulting box (optional) 1035c6c1daeSBarry Smith 1045c6c1daeSBarry Smith Level: beginner 1055c6c1daeSBarry Smith 1065c6c1daeSBarry Smith Concepts: drawing^string 1075c6c1daeSBarry Smith Concepts: string^drawing 1085c6c1daeSBarry Smith 109*51fa3d41SBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawStringBoxedSize(), PetscDrawString(), PetscDrawStringCentered() 1105c6c1daeSBarry Smith 1115c6c1daeSBarry Smith @*/ 112*51fa3d41SBarry Smith PetscErrorCode PetscDrawStringBoxed(PetscDraw draw,PetscReal sxl,PetscReal syl,int sc,int bc,const char text[],PetscReal *w,PetscReal *h) 1135c6c1daeSBarry Smith { 1145c6c1daeSBarry Smith PetscErrorCode ierr; 1155c6c1daeSBarry Smith PetscBool isnull; 1165c6c1daeSBarry Smith PetscReal top,left,right,bottom,tw,th; 1175c6c1daeSBarry Smith size_t len,mlen = 0; 1185c6c1daeSBarry Smith char **array; 1195c6c1daeSBarry Smith int cnt,i; 1205c6c1daeSBarry Smith 1215c6c1daeSBarry Smith PetscFunctionBegin; 1225c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1235c6c1daeSBarry Smith PetscValidCharPointer(text,5); 1245c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 1255c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 1265c6c1daeSBarry Smith 12742963b84SBarry Smith if (draw->ops->boxedstring) { 12842963b84SBarry Smith ierr = (*draw->ops->boxedstring)(draw,sxl,syl,sc,bc,text,w,h);CHKERRQ(ierr); 12942963b84SBarry Smith PetscFunctionReturn(0); 13042963b84SBarry Smith } 13142963b84SBarry Smith 1325c6c1daeSBarry Smith ierr = PetscStrToArray(text,'\n',&cnt,&array);CHKERRQ(ierr); 1335c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 1345c6c1daeSBarry Smith ierr = PetscStrlen(array[i],&len);CHKERRQ(ierr); 1355c6c1daeSBarry Smith mlen = PetscMax(mlen,len); 1365c6c1daeSBarry Smith } 1375c6c1daeSBarry Smith 1385c6c1daeSBarry Smith ierr = PetscDrawStringGetSize(draw,&tw,&th);CHKERRQ(ierr); 1395c6c1daeSBarry Smith 1405c6c1daeSBarry Smith top = syl; 1415c6c1daeSBarry Smith left = sxl - .5*(mlen + 2)*tw; 1425c6c1daeSBarry Smith right = sxl + .5*(mlen + 2)*tw; 1435c6c1daeSBarry Smith bottom = syl - (1.0 + cnt)*th; 1445c6c1daeSBarry Smith if (w) *w = right - left; 1455c6c1daeSBarry Smith if (h) *h = top - bottom; 1465c6c1daeSBarry Smith 1475c6c1daeSBarry Smith /* compute new bounding box */ 1485c6c1daeSBarry Smith draw->boundbox_xl = PetscMin(draw->boundbox_xl,left); 1495c6c1daeSBarry Smith draw->boundbox_xr = PetscMax(draw->boundbox_xr,right); 1505c6c1daeSBarry Smith draw->boundbox_yl = PetscMin(draw->boundbox_yl,bottom); 1515c6c1daeSBarry Smith draw->boundbox_yr = PetscMax(draw->boundbox_yr,top); 1525c6c1daeSBarry Smith 1535c6c1daeSBarry Smith /* top, left, bottom, right lines */ 1545c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,top,right,top,bc);CHKERRQ(ierr); 1555c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,bottom,left,top,bc);CHKERRQ(ierr); 1565c6c1daeSBarry Smith ierr = PetscDrawLine(draw,right,bottom,right,top,bc);CHKERRQ(ierr); 1575c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,bottom,right,bottom,bc);CHKERRQ(ierr); 1585c6c1daeSBarry Smith 1595c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 1605c6c1daeSBarry Smith ierr = PetscDrawString(draw,left + tw,top - (1.5 + i)*th,sc,array[i]);CHKERRQ(ierr); 1615c6c1daeSBarry Smith } 1625c6c1daeSBarry Smith ierr = PetscStrToArrayDestroy(cnt,array);CHKERRQ(ierr); 1635c6c1daeSBarry Smith PetscFunctionReturn(0); 1645c6c1daeSBarry Smith } 165