15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 45c6c1daeSBarry Smith */ 5*af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 65c6c1daeSBarry Smith 75c6c1daeSBarry Smith #undef __FUNCT__ 851fa3d41SBarry Smith #define __FUNCT__ "PetscDrawStringCentered" 951fa3d41SBarry Smith /*@C 1051fa3d41SBarry Smith PetscDrawStringCentered - PetscDraws text onto a drawable centered at a point 1151fa3d41SBarry Smith 1251fa3d41SBarry Smith Not Collective 1351fa3d41SBarry Smith 1451fa3d41SBarry Smith Input Parameters: 1551fa3d41SBarry Smith + draw - the drawing context 1651fa3d41SBarry Smith . xc - the coordinates of right-left center of text 1751fa3d41SBarry Smith . yl - the coordinates of lower edge of text 1851fa3d41SBarry Smith . cl - the color of the text 1951fa3d41SBarry Smith - text - the text to draw 2051fa3d41SBarry Smith 2151fa3d41SBarry Smith Level: beginner 2251fa3d41SBarry Smith 2351fa3d41SBarry Smith Concepts: drawing^string 2451fa3d41SBarry Smith Concepts: string^drawing 2551fa3d41SBarry Smith 2651fa3d41SBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawString(), PetscDrawStringBoxed() 2751fa3d41SBarry Smith 2851fa3d41SBarry Smith @*/ 2951fa3d41SBarry Smith PetscErrorCode PetscDrawStringCentered(PetscDraw draw,PetscReal xc,PetscReal yl,int cl,const char text[]) 3051fa3d41SBarry Smith { 3151fa3d41SBarry Smith PetscErrorCode ierr; 3251fa3d41SBarry Smith PetscBool isnull; 3351fa3d41SBarry Smith size_t len; 3451fa3d41SBarry Smith PetscReal tw,th; 3551fa3d41SBarry Smith 3651fa3d41SBarry Smith PetscFunctionBegin; 3751fa3d41SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3851fa3d41SBarry Smith PetscValidCharPointer(text,5); 3951fa3d41SBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 4051fa3d41SBarry Smith if (isnull) PetscFunctionReturn(0); 4151fa3d41SBarry Smith 4251fa3d41SBarry Smith ierr = PetscDrawStringGetSize(draw,&tw,&th);CHKERRQ(ierr); 4351fa3d41SBarry Smith ierr = PetscStrlen(text,&len);CHKERRQ(ierr); 4451fa3d41SBarry Smith xc = xc - .5*len*tw; 4551fa3d41SBarry Smith ierr = PetscDrawString(draw,xc,yl,cl,text);CHKERRQ(ierr); 4651fa3d41SBarry Smith PetscFunctionReturn(0); 4751fa3d41SBarry Smith } 4851fa3d41SBarry Smith 4951fa3d41SBarry Smith 5051fa3d41SBarry 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 6951fa3d41SBarry 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__ 8751fa3d41SBarry Smith #define __FUNCT__ "PetscDrawStringBoxed" 885c6c1daeSBarry Smith /*@C 8951fa3d41SBarry 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 10951fa3d41SBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawStringBoxedSize(), PetscDrawString(), PetscDrawStringCentered() 1105c6c1daeSBarry Smith 1115c6c1daeSBarry Smith @*/ 11251fa3d41SBarry 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